Я учусь писать простой модуль ядра, который реализует системные вызовы open, read, write, close, ioctl
для чтения / записи в памяти ядра (что-то вроде демонстрации совместно используемой памяти / IPC).
Раньше я звонил mknod
для привязки старшего / младшего номера, выделенного драйвером, к символьному файлу.Но я задался вопросом о том, почему мы не всегда обязаны делать это вручную, когда мы подключаем USB-устройство к системе, и я обнаружил udev
.
Я знаю, как использовать kobject_init_and_add()
и kobject_uevent()
создать узел в дереве sysfs
и уведомить udev
, но во время исследования папки /sys
я заметил папку /sys/dev/char
, которая содержит символические ссылки на устройства, названные как major:minor
.Я не понимаю, почему я не могу найти здесь главную / второстепенную пару моего драйвера ... Должен ли я вручную делать что-то еще внутри модуля?
Как найти полный, но простой пример того, как правильно описать и обработать мое «виртуальное» устройство в дереве sysfs?