zhunxun 发表于 2015-05-13 16:36

内核模块卸载问题

本帖最后由 zhunxun 于 2015-05-13 16:39 编辑

各位老师,我写了一个简单的内核多线程模块,insmod加载时没有问题,第一次rmmod貌似看不出问题,但是lsmod后发现还在,再次rmmod这个模块就会出现模块 in use而无法卸载,求各位老师帮忙解决下啊 !!!


[



nswcfd 发表于 2015-05-13 17:52

如果在加载/卸载模块的过程中发生了oops,那么这个模块就卸不掉了。
注意图片里模块状态是0E-

有些hack的解决方案,需要修改内核里module数据结构的状态。
bbs.csdn.net/topics/390985154 (第一个链接)

zhunxun 发表于 2015-05-13 19:33

回复 2# nswcfd
我想问下,我lsmod后显示的我的那个模块的引用计数是-1啥意思啊


   

镇水铁牛 发表于 2015-05-13 21:57

把你的init函数贴出来,猜测你的线程没有判断stop信号。

zhunxun 发表于 2015-05-14 08:45

回复 4# 镇水铁牛

这是init 和exit函数,加载的时候是没问题的,我觉得问题可能出在exit上,但是擦觉不了问题,您帮忙看看呗!!多谢
请指教!!!


   

nswcfd 发表于 2015-05-14 09:48

方便把dmesg的opps打印贴的更全一些吗?(在时间戳1568附近的)

镇水铁牛 发表于 2015-05-14 19:07

本帖最后由 镇水铁牛 于 2015-05-14 21:05 编辑

zhunxun 发表于 2015-05-14 08:45 static/image/common/back.gif
回复 4# 镇水铁牛

这是init 和exit函数,加载的时候是没问题的,我觉得问题可能出在exit上,但是擦觉不 ...
代码贴全点,估计thread_fun1和thread_fun2异常退出导致的。

zhunxun 发表于 2015-05-15 09:07

老师已经解决了,不过我还对那个thread_should_stop()方法有点疑问,它作用到底是啥,文档我看不大明白啊,能指点下不???是要检查当前线程是否应该退出吗??


回复 7# 镇水铁牛


   

镇水铁牛 发表于 2015-05-15 21:25

你看kthread_stop和kthread_should_stop的实现,就能明白了

zhunxun 发表于 2015-05-17 10:09

唉,我要是能看懂我就不问了大哥啊,初学linux,这个真看不懂


你看就给我讲下呗!

回复 9# 镇水铁牛


   
页: [1]
查看完整版本: 内核模块卸载问题