强力卸载内核模块(一)

强力卸载内核模块(一)

ID:14927854

大小:72.00 KB

页数:5页

时间:2018-07-31

强力卸载内核模块(一)_第1页
强力卸载内核模块(一)_第2页
强力卸载内核模块(一)_第3页
强力卸载内核模块(一)_第4页
强力卸载内核模块(一)_第5页
资源描述:

《强力卸载内核模块(一)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、内核为2.6.32。卸载模块target时,不管是否为强制卸载,都输出:ERROR:Module targetisinuse.用lsmod查看target,发现Usedby计数为1,而据我所知,没有其它模块依赖target。编写模块检查target的module结构,发现:target->state==0//模块存活module_refcount(target)==1//模块引用计数为1list_empty(target->modules_which_use_me)==1//模块依赖列表为空这个就很奇怪,模块的引用计数

2、为1,却没有引用者。这可能是模块插入内核时出错而引起的,这里先不研究,先关注怎么把它强制卸载掉,虽然insmod加载是临时的,所以通过重启电脑可以解决一些问题,但是不能总是依靠重启啊。解决方法:编写模块mymod中把问题模块target的引用计数置为0,就可以顺利卸载掉target了! 代码 [java]viewplaincopy1.#include  2.#include  3.#include  4.#include

3、ux/list.h>  5.#include  6.  7.static int __init mymod_init(void)  8.{  9.        struct module *mod,*relate;  1.        int cpu;  2.  3.        // 打印本模块的模块名和模块状态  4.        printk(KERN_ALERT"[insmod mymod] name:%s state:%d",THIS_MODULE->name,T

4、HIS_MODULE->state);  5.  6.       // 遍历模块列表,查找target模块  7.        list_for_each_entry(mod,THIS_MODULE->list.prev,list)  8.        {  9.                if(strcmp(mod->name,"target")==0) {   10.  11.                        // 打印target的模块名、模块状态、引用计数  12.           

5、             printk(KERN_ALERT"name:%s state:%d refcnt:%u ",mod->name,mod->state,module_refcount(mod));  13.  14.                        // 打印出所有依赖target的模块名  15.                        if(!list_empty(&mod->modules_which_use_me)) {   16.                         

6、       list_for_each_entry(relate,&mod->modules_which_use_me,modules_which_use_me)  17.                                        printk(KERN_ALERT"%s ",relate->name);  18.                        } else  19.                                printk(KERN_ALERT"used by 

7、NULL");  20.  21.                        // 把target的引用计数置为0  22.                        for_each_possible_cpu(cpu)  23.                                local_set(__module_ref_addr(mod,cpu),0);  24.  25.                        // 再看看target的名称、状态、引用计数  26.       

8、                 printk(KERN_ALERT"name:%s state:%d refcnt:%u",mod->name,mod->state,module_refcount(mod));  1.                }  2.        }  3.        return 0;  4

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。