【发布时间】:2012-12-12 19:33:28
【问题描述】:
我正在使用涉及内核和用户空间代码的大型嵌入式软件(ARM 处理器、嵌入式 linux 2.6.31、busybox)。通常首先加载一个内核模块,并且守护进程与该模块建立netlink套接字。
这里的问题是杀死守护进程后,我不再能够从内存中卸载模块:
% rmmod _module.ko
% rmmod: _module.ko: Resource temporarily unavailable
分析表明错误(返回值为-11,即EAGAIN?)由try_stop_module()在系统调用delete_module()定义中调用kernel/module.c返回。函数 try_stop_module() 依次调用 stop_machine() ,这就是我卡住的地方,因为
我不确定那里到底发生了什么。我认为根本原因在守护进程中的某个地方,它打开了与模块的连接,显然还有其他东西,并且在退出时没有正确关闭/清理(显然一些引用/锁没有释放?)
有人知道还有什么要查看和探索的吗?
【问题讨论】:
-
只是个愚蠢的想法... rmmod -f ... 强制卸载?
标签: linux linux-kernel kernel-module