Как автоматически создать устройство в / dev после загрузки модуля ядра для драйвера устройства? - PullRequest
12 голосов
/ 02 января 2012

Я пытаюсь разработать драйверы для устройств Linux, и в качестве первой попытки я пытаюсь разработать драйвер устройства с символами, который имеет следующие параметры файла:

struct file_operations fops{  
.open=open_fun,  
.release=release_fun,  
.write=write_fun,  
.read=read_fun,  
};  

Когда я загружаю драйвер с помощью insmodЯ вижу, что в /proc/devices перечислены драйверы для устройств типа char, но я не могу найти его в /dev.Поиск Google предложил использовать mknod для создания устройства в /dev и связать его с основным и второстепенным драйвером.Однако попытка сделать это привела к ошибке «Отказано в доступе», даже если это сделано как суперпользователь.

Что нужно сделать, чтобы устройство появилось в /dev при загрузке модуля ядра?Я пытался зарегистрировать устройство как в более старой (register_chrdev), так и в более новой версии (cdev_init & cdev_add), но ни одна из них не работает.

Спасибо,
Мир

Ответы [ 5 ]

4 голосов
/ 02 февраля 2017
  • Включите заголовочный файл linux / device.h и linux / kdev_t.h

  • статическая структураclass c_dev;

  • статическая структура dev_t dev;

Добавьте нижеприведенный API-интерфейс внутрь __init функции драйвера

  • cl = class_create (THIS_MODULE, "x");

где x - имя, отображаемое внутри / sys / class / при загрузке драйвера.

  • Использование API-интерфейса ядра device_create () с device_create (cl, NULL, dev, NULL, "d");

где d - файл устройства, который будет создан в /dev.

где dev - переменная для первого номера устройства, который инициализируется во время использованияиз alloc_chrdev_region API для динамического выделения старшего номера для драйвера

Для получения дополнительной ссылки перейдите по ссылке http://opensourceforu.com/2011/04/character-device-files-creation-operations/

3 голосов
/ 02 января 2012

Я мог видеть записи в /dev после создания узла, выполнив следующую команду в консоли.

sudo mknod -m 0666 / dev / msio c 22 0

Пользователь не был root, поэтому мне пришлось использовать sudo. Моя запись была msio, символьное устройство с большим и младшим номерами 22, 0 соответственно.

Я дам вам знать, если это может быть достигнуто программно.

3 голосов
/ 02 января 2012

Возможно, вам придется создать некоторые правила udev , чтобы сообщить системе, какие узлы устройства вам нужно создать.

2 голосов
/ 13 января 2012

CONFIG_DEVTMPFS неплохо, если вы можете использовать это в своем дистрибутиве. Вы можете настроить автомонтирование ядра при загрузке (CONFIG_DEVTMPFS_MOUNT) или смонтировать его вручную (mount -t devtmpfs none /dev).

0 голосов
/ 19 октября 2014

Сначала вы должны использовать: sudo mknod / dev / devicename c 81 0

Он создает файл устройства в / dev, но вы должны дать ему разрешение на чтение / запись.для этого

sudo chmod 777 / dev / devicename

Готово !!!

...