使用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);
}
由于某种原因,它无法正常工作。
答案 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);