使用try_module_get后怎么卸载模块

siasjack 2013-02-01 10:13:52
为在代码中加入try_module_get(THIS_MODULE);然后加载上模块就看到使用量为1,卸载时提示模块在使用中,不能卸载!在exit函数中加入module_put(THIS_MODULE);也不行!
求大神详解try_module_get(THIS_MODULE)这句话的作用?在什么情况下能使用到?谢谢!
代码

#include<linux/init.h>//init&exit相关宏
#include<linux/kernel.h>
#include<linux/module.h>//所有模块都需要的头文件
#include<linux/errno.h>
MODULE_LICENSE("GPL");/*声明*/
MODULE_AUTHOR("Jack Chen");/*作者*/
MODULE_DESCRIPTION("hello module,simple module");//描述
MODULE_VERSION("1.0");//版本号
//MODULE_DEVICE_TABLE("usb");//支持的设备
static int initvalue = 0;
static char *initname = NULL;

module_param(initvalue,int, S_IRUGO);
module_param(initname,charp,S_IRUGO);

/*模块初始化函数*/
static int __init hello_init(void)
{
printk(KERN_ALERT"initvalue = %d initname = %s\n",initvalue,initname);
printk(KERN_ALERT "(init)Hello,World!\n");
try_module_get(THIS_MODULE);
return 0;
}

/*模块退出清除函数*/
static void __exit hello_exit(void)
{
printk(KERN_ALERT "(exit)Bye,World!\n");
module_put(THIS_MODULE);

}
int add_intergar(int a,int b)
{
return a+b;
}
module_init(hello_init);/*模块初始化*/
module_exit(hello_exit);/*模块退出*/
...全文
183 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
海耶 2013-11-28
  • 打赏
  • 举报
回复
开始写程序的时候把module_put写在了__eixt中,导致加载了模块使用量一直为1,无法卸载只能重启!后来才知道rmmod是在调用module_exit之前检查模块的引用计数的,所以在exit之前就应该要module_put释放引用计数,这样一来把module_put写在init里面就可以解决了!
nadleeh 2013-02-03
  • 打赏
  • 举报
回复
引用 5 楼 jk110333 的回复:
引用 4 楼 nadleeh123 的回复:我将我的模块加了这2个,然后发现了好玩的东西,try_module_get()加在init的return 0前,module_put()加在exit中第一个,结果发现rmmod给我报No such file or directory 然后重插入居然是成功的,并且初始化信息都打印出来了..扯蛋啊. 报这个错误说明没加上!……
其实是我们开发做了些手脚,我不加那2个,一样出现这样的提示,并且lsmod 模块还在,但是直接插入就可以把之前的替换掉,挺神奇的.
siasjack 2013-02-02
  • 打赏
  • 举报
回复
引用 4 楼 nadleeh123 的回复:
我将我的模块加了这2个,然后发现了好玩的东西,try_module_get()加在init的return 0前,module_put()加在exit中第一个,结果发现rmmod给我报No such file or directory 然后重插入居然是成功的,并且初始化信息都打印出来了..扯蛋啊.
报这个错误说明没加上!lsmod看下是不是有你的模块呢! 需要先插入才能rmmod啊!
nadleeh 2013-02-02
  • 打赏
  • 举报
回复
我将我的模块加了这2个,然后发现了好玩的东西,try_module_get()加在init的return 0前,module_put()加在exit中第一个,结果发现rmmod给我报No such file or directory 然后重插入居然是成功的,并且初始化信息都打印出来了..扯蛋啊.
nadleeh 2013-02-02
  • 打赏
  • 举报
回复
把module_put放到get后面试试?
nadleeh 2013-02-02
  • 打赏
  • 举报
回复
网上找找?我没用过这个东西
siasjack 2013-02-01
  • 打赏
  • 举报
回复
没人回复吗? 自己顶一下!

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧