停止卸载 Linux 内核模块
Stop unloading the Linux kernel module
我有一个Linux基于平台驱动程序的内核模块。
我在那里实现了 probe()
和 remove()
方法。
struct platform_driver {
int (*probe)(struct platform_device *);
int (*remove)(struct platform_device *);
}
现在当用户执行 rmmod <myModule>
then
remove()
方法正在被调用。在这里我执行了一些条件检查并了解到用户不应该在这里执行 rmmod
。在这里我不想执行任何清理并使此 rmmod 失败。
我已经尝试在 remove()
中返回 -1
或 -EBUSY
但在 rmmod <myModule>
之后它仍然被卸载并且没有显示在 lsmod
的输出中.
有什么方法可以停止在 remove()
方法中卸载我的模块?
无法取消(或停止)模块卸载,已由rmmod
(或通过其他方式)启动。但是可以通过调用 try_module_get
来 阻止 模块卸载:
// Before your module enters into the state, when its unloading is not desirable.
// Prevent unloading of the module
if(!try_module_get(THIS_MODULE)) {
<failed to prevent module unloading>
}
<....> // This code will be protected from the module's unloading
// Allow the module to be unloaded again
module_put(THIS_MODULE);
虽然(成功)调用 try_module_get
生效,但 rmmod
立即拒绝模块卸载而不执行任何模块代码。
我不确定从module_init
函数中调用try_module_get
是否会成功,从module_exit
函数中调用它肯定会失败。但在所有其他地方,此调用应该会成功。
至于 module_put
调用,不需要从调用 try_module_get
的同一函数中执行它。您可以根本不调用 module_put
,但应尽可能避免这种情况。
我有一个Linux基于平台驱动程序的内核模块。
我在那里实现了 probe()
和 remove()
方法。
struct platform_driver {
int (*probe)(struct platform_device *);
int (*remove)(struct platform_device *);
}
现在当用户执行 rmmod <myModule>
then
remove()
方法正在被调用。在这里我执行了一些条件检查并了解到用户不应该在这里执行 rmmod
。在这里我不想执行任何清理并使此 rmmod 失败。
我已经尝试在 remove()
中返回 -1
或 -EBUSY
但在 rmmod <myModule>
之后它仍然被卸载并且没有显示在 lsmod
的输出中.
有什么方法可以停止在 remove()
方法中卸载我的模块?
无法取消(或停止)模块卸载,已由rmmod
(或通过其他方式)启动。但是可以通过调用 try_module_get
来 阻止 模块卸载:
// Before your module enters into the state, when its unloading is not desirable.
// Prevent unloading of the module
if(!try_module_get(THIS_MODULE)) {
<failed to prevent module unloading>
}
<....> // This code will be protected from the module's unloading
// Allow the module to be unloaded again
module_put(THIS_MODULE);
虽然(成功)调用 try_module_get
生效,但 rmmod
立即拒绝模块卸载而不执行任何模块代码。
我不确定从module_init
函数中调用try_module_get
是否会成功,从module_exit
函数中调用它肯定会失败。但在所有其他地方,此调用应该会成功。
至于 module_put
调用,不需要从调用 try_module_get
的同一函数中执行它。您可以根本不调用 module_put
,但应尽可能避免这种情况。