我编写了一个内核模块,创建了/proc/中的一个条目并执行一些其他任务。我想修改现有的内核模块,检查我的模块是否正在运行,并根据情况执行某些语句(或在其未运行时执行其他语句)。
有什么建议吗?
有什么建议吗?
kernel/module.c
提供了一个函数,它很可能可以完成你所需要的功能;首先你需要锁定 module_mutex
,然后使用你的模块名称调用 find_module()
。结果将是指向描述命名模块的 struct module
的指针,如果该模块未加载,则为 NULL
:
/* Search for module by name: must hold module_mutex. */
struct module *find_module(const char *name)
{
struct module *mod;
list_for_each_entry(mod, &modules, list) {
if (strcmp(mod->name, name) == 0)
return mod;
}
return NULL;
}
EXPORT_SYMBOL_GPL(find_module);
make config
中选择了 Y
而不是 M
,我真的希望 find_module()
接口仍然能够正常工作。也许你更适合使用 #if CONFIG_FOO
来决定内置或非内置 CONFIG_FOO
变量吧…… - sarnolddrivers/infiniband/core/addr.c
文件包含以下代码行: #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-- 如果你修改内核源代码以添加你的内置代码,你可以执行相同类型的检查。 - sarnold#if defined()
可以覆盖两种情况(配置为Y或M)吗? - jeanc
lsmod
的实现方式(只是格式化/proc/modules的内容,如果我没记错),还是解析它的输出? - ChristopheDlsmod
... - sarnold