lsmod 显示是[permanent],无法remove的问题解决

发布时间:2016-12-6 18:15:08 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"lsmod 显示是[permanent],无法remove的问题解决",主要涉及到lsmod 显示是[permanent],无法remove的问题解决方面的内容,对于lsmod 显示是[permanent],无法remove的问题解决感兴趣的同学可以参考一下。

前段时间开发了一个基于usb接口的DVB设备的内核驱动,本来是在ubuntu10.04(内核版本2.6.32)平台上进行开发的,后来由于种种原因,将所有内核空间驱动和用户空间程序都搬到乐ubuntu12.04上面,12.04用的内核版本是3.5.0.37,按照新内核版本中各接口的新变化,把内核驱动移植完之后,modprobe成功,但当我在修改内核代码后,想rmmod以更新驱动时出现了 cannot unload 'XXX': device or resource busy的错误提示, 于是lsmod检查内核驱动的状态,发现该驱动后面多了一个[permanent]的字样,按照以往的经验,这种情况可能是驱动没有exit函数导致的,但是驱动明明是有exit函数的,而且在ubunut10.04中模块能够正常加载卸载,排除这种可能性。 遍寻网络,从下面的网页中得到启发http://stackoverflow.com/questions/7482469/why-is-this-kernel-module-marked-at-permanent-on-2-6-39 I've been hunting the issue because it was affecting a code that I'm taking care of. First I tried to build the module using kbuild and it worked. Then I shifted more and more stuff to the external build system, until I found that it is the compilation of the modpost generated C file. Then I took C compiler options one by one.  原来是我在把我一个基于c++写的用户空间的app在ubuntu12.04上无法编译通过时,将ubuntu12.04的gcc版本改成了gcc-4.4,后来忘记改回去了,于是我的内核驱动也用gcc-4.4版本进行编译,编译出来的内核模块与内核不是很兼容,造成永久驻留内核的结果,后来将gcc链接重新指向gcc-4.6,编译--》重启--》安装驱动--》卸载驱动,问题解决。 顺便搜集了下别人在无法卸载模块的解决方法,以备以后遇到问题时查找。 http://mazhengdong.blog.163.com/blog/static/205529005201251801115387/ 以下为引用文章全文:  开发板内核的不支持卸载,得重新做一个内核下载进去,看如何。device or resourse busy lsmod 后面标记了 permament,网上说是没有找到退出函数,所以认为是永久的。 在国外网站找到了方法:http://ns3.spinics.net/lists/newbies/msg43106.html 就是在源文件中要宏定义 USE_IMMEDIATE 然后就可以卸载了。 否则,就算你的内核已经允许了 enable_unloading,照样不起作用。 这里不起作用是因为:permanent。就说是你只要加载了一个模块,那么,它就是“永久的”,没法卸载的。

上一篇:SQL Server索引中的碎片和填充因子
下一篇:如何做微博营销 你知道吗?

相关文章

相关评论