2024年4月30日发(作者:)
内核为2.6.32。
卸载模块target时,不管是否为强制卸载,都输出:
ERROR:Module target is in use.
用lsmod查看target,发现Used by计数为1,而据我所知,没有其它模块依赖target。
编写模块检查target的module结构,发现:
target->state == 0 // 模块存活
module_refcount(target) == 1 // 模块引用计数为1
list_empty(target->modules_which_use_me) == 1 // 模块依赖列表为空
这个就很奇怪,模块的引用计数为1,却没有引用者。
这可能是模块插入内核时出错而引起的,这里先不研究,先关注怎么把它强制卸载掉,
虽然
insmod加载是临时的,所以通过重启电脑可以解决一些问题,但是不能总是依靠重
启啊。
解决方法:编写模块mymod中把问题模块target的引用计数置为0,就可以顺利卸
载掉target了!
代码
[java] view plaincopy
1. #include
2. #include
3. #include
4. #include
5. #include
6. static int __init mymod_init(void)
7. {
8. struct module *mod,*relate;
9. int cpu;
10. // 打印本模块的模块名和模块状态
11. printk(KERN_ALERT"[insmod mymod] name:%s state:%dn",THIS_MO
DULE->name,THIS_MODULE->state);
发布者:admin,转转请注明出处:http://www.yc00.com/news/1714451460a2449041.html
评论列表(0条)