微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法“模仿”模块

我正在使用一个大型embedded式软件(ARM处理器,embedded式Linux 2.6.31,busyBox),涉及内核和用户空间代码。 有一个正常加载的内核模块,守护进程和模块build立netlink套接字。

这里的问题是,杀死守护进程后,我不能再从内存中卸载模块:

% rmmod _module.ko % rmmod: _module.ko: Resource temporarily unavailable

分析显示error(返回值是-11 ,即EAGAIN ?)由kernel/module.c中的syscall delete_module()定义中调用的delete_module() kernel/module.c 。 函数try_stop_module()依次调用stop_machine(),这是我坚持的地方,因为

我不确定那里发生了什么事。 我认为根本原因是守护进程中的某个地方,打开连接到模块,显然是别的东西,并没有正确closures/清理退出(显然有些引用/locking不释放?)

在可执行内存中运行代码

使用proc文件打印mem_map的虚拟地址

只有当它们出现在insmoded Linux Kernel模块中时,如何使用导出的符号?

现有的Linux模块符号

内核模块的安全卸载

有没有人知道还有什么要看和探讨?

如何find编译的内核模块的版本?

ENFILE,当使用内核iterate_dir时,文件表溢出

是否可以通过LKM添加系统调用

如何使一个Linux内核模块依赖于与depmod的另一个外部模块?

警告构build使用导出符号的内核模块

首先你应该是一个超级用户来做这件事。 你也可以使用rmmod -f但是这个选项可能是非常危险的:除非编译内核时CONfig_MODULE_FORCE_UNLOAD被设置,否则它不起作用。 使用此选项,可以删除正在使用的模块,也可以删除不能删除的模块,或者标记为不安全的模块。

还读man rmmod 。

检查是否所有与您的模块相关的接口不是'up'。

如果任何与你的模块相关的接口是“up”,那么rmmod将会失败,并返回-11。

所以在调用rmmod之前,使用'netcfg'命令检查活动接口。 然后使用ifconfig,使您的接口关闭为'ifconfig <interface_name> down'

然后尝试运行rmmod <module_name> 。 它会工作!

1.netcfg <lists out all interfaces> 2.ifconfig <interface_name> down 3.rmmod <module_name>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐