2

我正在编写一个基于 ldd 的简单字符驱动程序 scull。对于我的示例字符驱动程序,即使模块是卸载的设备,主编号存在于 /proc/devices 中。如何删除它?

我的模块退出功能有

void scull_exit(void)
{
    unregister_chrdev(Major, "scull1");
    cdev_del(my_cdev);  
    printk(KERN_ALERT "Good Bye\n");

}

当我在卸载新模块后加载新模块时,我可以看到旧设备及其主设备号。

4

2 回答 2

3
  1. cdev_del接受一个指针,确保你的 my_cdev 是一个指针。

    void cdev_del(struct cdev *);

  2. 它是cdev_del, first and unregister_chrdev later, 看来你是用另一种方式做的,cdev_del先用再用 unregister_chrdev_region

  3. 您混淆了 unregister_chrdev 的旧表示法和 cdev_del 的新表示法。

    • 用于注册unregister_chrdev时应使用其中之一register_chrdev

      或者

    • cdev_init/ cdev_addafter ”应与“ before ”register_chrdev_region连用cdev_delunregister_chrdev_region

于 2013-10-19T12:03:48.273 回答
0

struct cdev 具有应设置为 THIS_MODULE 的所有者字段。确保已设置

于 2015-04-14T06:16:13.280 回答