Раздел 4.3: Символьный драйвер через miscdevice
В этом разделе мы реализуем символьный драйвер на базе интерфейса miscdevice, который предоставляет простой способ регистрации устройства без ручного управления мажорными/минорными номерами и создания классов (class_create, device_create).
Преимущества miscdevice
Автоматическая регистрация устройства с динамическим минорным номером
Автоматическое создание файла /dev/<имя>
Упрощённый интерфейс: достаточно одной структуры miscdevice и набора file_operations
Исходный код: misc_char_driver.c
static struct file_operations fops = {
.owner = THIS_MODULE,
.read = dev_read,
.write = dev_write,
};
static struct miscdevice garvis_misc_device = {
.minor = MISC_DYNAMIC_MINOR,
.name = "garvis_misc",
.fops = &fops,
.mode = 0666
};
static int __init garvis_misc_init(void) {
return misc_register(&garvis_misc_device);
}
static void __exit garvis_misc_exit(void) {
misc_deregister(&garvis_misc_device);
}
module_init(garvis_misc_init);
module_exit(garvis_misc_exit);
Сборка и тестирование
$ make
$ sudo insmod misc_char_driver.ko
$ echo "Hello, Garvis" > /dev/garvis_misc
$ cat /dev/garvis_misc
$ sudo rmmod misc_char_driver
Вывод в dmesg
Garvis misc: device registered with /dev/garvis_misc
Garvis misc: received 13 bytes: Hello, Garvis
Garvis misc: device unregistered
Заключение
Интерфейс miscdevice идеально подходит для упрощённой разработки символьных драйверов, особенно в учебных или небольших прикладных проектах. Он минимизирует код регистрации устройства и устраняет необходимость управлять классами и номерами вручную.