2024年4月28日发(作者:)

内核为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);