удаление файлов, созданных в device_create (), class_create () и alloc_chrdev_region () - PullRequest
0 голосов
/ 30 октября 2018

После создания драйвера символьного устройства с использованием alloc_chrdev_region(), cdev_init(), cdev_add(), class_create() и device_create() Я не могу успешно очистить все записи, сделанные функциями, указанными выше в module_exit(). Когда я использую rmmod, он просто говорит "убит". Когда я проверяю каталоги / proc / devices / , / sys / class / и / dev / , мои созданные файлы все еще присутствуют. Как я могу сделать чистый выход из моего модуля? Код, который я использую для выхода:

static void char_exit(void)
{
    printk(KERN_ALERT "leaving the kernel.");
    cdev_del(my_chardev);

    device_destroy(myclass,first);

    class_destroy(myclass);

    unregister_chrdev_region(first,1);
}

Почему-то не работает.

1 Ответ

0 голосов
/ 28 марта 2019

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

Я попытался в моей системе с примером кода. Снимок прилагается ниже:

[root @ dhcp-10-123-181-110 own_char] # find / -name sample_cdev0

/ DEV / sample_cdev0

/ SYS / устройства / виртуальный / образец / sample_cdev0

/ SYS / класс / образец / sample_cdev0

[root @ dhcp-10-123-181-110 own_char] #

[root @ dhcp-10-123-181-110 own_char] #

[root @ dhcp-10-123-181-110 own_char] # rmmod himschar

[root @ dhcp-10-123-181-110 own_char] # find / -name sample_cdev0

[root @ dhcp-10-123-181-110 own_char] # cat / proc / devices | grep -i образец

[root @ dhcp-10-123-181-110 own_char] #

=============================================== =========================

Порядок, которому вы должны следовать:

    device_destroy(sample_class, sample_dev_t);
    class_destroy(sample_class);
    cdev_del(sample_cdev);
    unregister_chrdev_region(sample_dev_t, 1);
...