强力卸载内核模块(一).doc

强力卸载内核模块(一).doc

ID:50839390

大小:54.00 KB

页数:5页

时间:2020-03-15

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

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

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  

3、4.#include  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

4、",THIS_MODULE->name,THIS_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的模

5、块名、模块状态、引用计数  12.                        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

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

7、                printk(KERN_ALERT"used by NULL");  20.  21.                        // 把target的引用计数置为0  22.                        for_each_possible_cpu(cpu)  23.                                local_set(__module_ref_addr(mod,cpu),0);  24.  25.          

8、              // 再看看target的名称、状态、引用计数  26.                        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. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。