Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查Linux内核模块是否正在运行_Linux_Kernel_Kernel Module - Fatal编程技术网

检查Linux内核模块是否正在运行

检查Linux内核模块是否正在运行,linux,kernel,kernel-module,Linux,Kernel,Kernel Module,我编写了一个内核模块,它在/proc/中创建一个条目并执行一些其他任务。 我想修改一个现有的内核模块,以检查我的模块是否正在运行,并根据它执行一些语句(或者在它不运行的情况下执行其他语句) 有什么建议吗?内核/module.c提供了一个可能满足您需要的函数;首先需要锁定module\u互斥锁,然后使用模块名称调用find\u module()。结果将是指向描述命名模块的struct module的指针,如果未加载模块,则为NULL: /* Search for module by name: m

我编写了一个内核模块,它在/proc/中创建一个条目并执行一些其他任务。 我想修改一个现有的内核模块,以检查我的模块是否正在运行,并根据它执行一些语句(或者在它不运行的情况下执行其他语句)


有什么建议吗?

内核/module.c
提供了一个可能满足您需要的函数;首先需要锁定
module\u互斥锁
,然后使用模块名称调用
find\u 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);

看看
lsmod
是如何实现的(只是格式化/proc/modules iirc的内容)或解析它的输出?@ChristopheD:你肯定不想从内核中运行
lsmod
。@sarnold:是的,非常好;-)我也有类似的疑问。@sarnold所说的是有效的。但是假设我们讨论的是一个定制内核,并且程序被配置为内置的而不是模块,那么另一个模块怎么会知道呢?有没有通用的解决方案?问“如果(xxx是内置的或作为一个模块运行),那么就这样做,否则就这样做”@marocamejo:如果你的意思是你在
make config
中选择了
Y
而不是
M
,我真的希望
find_module()
界面仍然有效。也许您更适合使用
#if CONFIG_FOO
来决定内置是否内置的
CONFIG_FOO
变量……是的,我的意思是在make CONFIG中选择Y而不是M。我将尝试查找_module(),以防它被Y选中,希望它能正常工作。我没有得到#if CONFIG#u FOO#的角色,你能再给我解释一下吗?感谢大家举一个例子,
drivers/infiniband/core/addr.c
有以下几行:
#如果定义了(配置IPV6)|定义了(配置IPV6模块)
——如果您修改内核源代码以添加内置代码,您可以进行同样的检查。哦,感谢您对@marocamejo的评论和对@sarnold的回答。使用
#if defined()
可以覆盖这两种情况(配置为Y或M)?