是否可以在不调用其清理例程的情况下卸载内核模块?

时间:2014-03-11 23:47:25

标签: linux-kernel kernel-module

通常,如果我使用rmmod删除内核模块,则运行module_exit指定的函数。如果没有调用此函数,有rmmod 的某种方式吗?

如果您感到好奇,原因是我已经编写了insmod'ed一个模块,其退出方法有问题,我不希望在导致内核运行时手动重启远程机器挂起。

我看过man rmmod,但似乎没有这样的选择。

2 个答案:

答案 0 :(得分:1)

执行rmmod时无法避免卸载模块,因为模块卸载时需要进行一些清理活动,如果没有完成,您将无法通过执行重新加载模块insmod,因为它会再次调用module_init(),您可以在其中注册(alloc_chrdev_region()register_chrdev())您的驱动程序。在不取消注册的情况下重新注册它将导致无法加载模块。

答案 1 :(得分:0)

我不确定这是否符合您的要求,但下次重新编译内核时,您可以启用MODULE_FORCE_UNLOAD选项并尝试rmmod -f

https://lwn.net/Articles/15571/