删除由device_create(),class_create()和alloc_chrdev_region()创建的文件

时间:2018-10-30 07:05:38

标签: c linux-kernel linux-device-driver

使用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 :(得分:0)

我可以看到您尝试破坏/删除类,设备和cdev的顺序存在问题。

我使用示例代码在系统上进行了尝试。快照附在下面:

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

/ dev / sample_cdev0

/ sys / devices / virtual / sample / sample_cdev0

/ sys / class / sample / 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);