发新话题
打印

如何卸载这个模块(调用了try_module_get函数)?

如何卸载这个模块(调用了try_module_get函数)?

模块为chrdev.ko,内核为2.6.22.6
模块的init_module和cleanup_module:
int init_module(void){
        Major=register_chrdev(0,"hello",&fops);
        if(Major<0){
                printk(KERN_ALERT"failure\n");
        }else{
                printk(KERN_ALERT"success\n");
                printk(KERN_ALERT"The major number is %d\n",Major);
        }
        try_module_get(THIS_MODULE);
        return 0;
}

void cleanup_module(void){
        int ret=unregister_chrdev(Major,"hello");
        if(ret<0) printk(KERN_ALERT"failure\n");
        else printk(KERN_ALERT"success\n");
}
编译之后,然后insmod chrdev.ko
然后lsmod|grep chrdev
输出为:chrdev         6148    1
接着rmmod -f chrdev
输出为:resource temporarily unavailable

谁能告诉我如何卸载这个模块?谢谢!      

TOP

卸载模块函数应该减少引用计数。      
1,本人乃Linux伊甸园“Linux内核学习”,“红旗等发行版”版主,请大家捧场。
2,红旗Linux在设备驱动,系统设置,中文美化,易用性方面做得非常好,建议大家使用。
3,本人是红旗Linux的粉丝,不是枪手。

TOP

谢谢!
减少引用计数是写在模块里(try_module_put(THIS_MODULE))还是使用命令(不知道)?      

TOP

当然是写在模块里,至于是不是try_module_put(THIS_MODULE)我不知道,去看看书。      
1,本人乃Linux伊甸园“Linux内核学习”,“红旗等发行版”版主,请大家捧场。
2,红旗Linux在设备驱动,系统设置,中文美化,易用性方面做得非常好,建议大家使用。
3,本人是红旗Linux的粉丝,不是枪手。

TOP

谢谢版主!
感激不尽!      

TOP

发新话题