Не удалось создать символьное устройство в LinuxLinux

Ответить
Anonymous
 Не удалось создать символьное устройство в Linux

Сообщение Anonymous »


Я написал вот такой демонстрационный драйвер устройства:

#include #include #include #include #include #include #define CDEV_NAME "mycdev" структура my_char_dev { беззнаковый символ *ptr; структура семафора sem; структура cdev cdev; }; структура my_char_dev *mycdev; int my_char_open(инод структуры *inode, файл структуры *filp) { printk(KERN_INFO "%s\n", __FUNCTION__); вернуть 0; } int my_char_release(инод структуры *inode, файл структуры *filp) { printk(KERN_INFO "%s\n", __FUNCTION__); вернуть 0; } ssize_t my_char_read(файл структуры *filp, char __user *buf, size_t count, loff_t *f_pos) { printk(KERN_INFO "%s\n", __FUNCTION__); вернуть 0; } ssize_t my_char_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_ops) { printk(KERN_INFO "%s\n", __FUNCTION__); вернуть 0; } struct file_operations my_char_fops = { .владелец = ЭТОТ_МОДУЛЬ, .open = my_char_open, .release = my_char_release, .read = my_char_read, .write = my_char_write, }; статический int __init my_char_init (void) { mycdev = kmalloc(sizeof(struct my_char_dev), GFP_KERNEL); если (!mycdev) { printk(KERN_INFO "не удалось выделить место для устройства\n"); возврат -ЭНОМЕМ; } if (!alloc_chrdev_region(&mycdev->cdev.dev, 0, 1, CDEV_NAME)) printk(KERN_INFO "Успешное выделение области %s\n", CDEV_NAME); еще { printk(KERN_INFO "Ошибка выделения региона %s\n", CDEV_NAME); возврат -ЭНОМЕМ; } cdev_init(&mycdev->cdev, &my_char_fops); if (!cdev_add(&mycdev->cdev, mycdev->cdev.dev, 1)) printk(KERN_INFO "%s успешно добавило устройство\n", CDEV_NAME); еще { printk(KERN_INFO "%s не удалось добавить устройство\n", CDEV_NAME); unregister_chrdev_region(mycdev->cdev.dev, 1); возврат -ЭНОМЕМ; } вернуть 0; } void __exit my_char_exit(void) { cdev_del(&mycdev->cdev); unregister_chrdev_region(mycdev->cdev.dev, 1); kfree (mycdev); printk(KERN_INFO "%s\n", __FUNCTION__); } модуль_init (my_char_init); модуль_exit (my_char_exit); MODULE_AUTHOR("xdd"); MODULE_LICENSE("GPL"); Я вставляю модуль в ядро ​​и могу найти mycdev, когда нахожу /proc/devices, я также создал узел устройства в /dev/ mycdev успешно с помощью mknod, но когда я пытаюсь использовать созданный мною /dev/mycdev, я получаю /dev/mycdev0: Нет такого устройство или адрес.

Я понятия не имею, почему это произошло.

Я хочу знать, почему этот процесс завершится неудачно. и что мне следует сделать, чтобы исправить мою программу.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»