Linux kernel 如何在代码中进行检查以确保内核间模块依赖性-Linux内核?
我有两个模块。我希望模块在执行insmod或rmmod时相互依赖。目前,我的模块2依赖于模块1。如果我先插入module1,然后插入module2,就可以了。另一方面,它的反面不起作用。这是合乎逻辑的解释。但是,我需要一个简洁的代码来避免这种依赖关系。如果我使用mod2的insmod,那么mod1应该自动成为insmod,或者其他解决这个问题的好方法。这是我的两个模块Linux kernel 如何在代码中进行检查以确保内核间模块依赖性-Linux内核?,linux-kernel,kernel,linux-device-driver,kernel-module,Linux Kernel,Kernel,Linux Device Driver,Kernel Module,我有两个模块。我希望模块在执行insmod或rmmod时相互依赖。目前,我的模块2依赖于模块1。如果我先插入module1,然后插入module2,就可以了。另一方面,它的反面不起作用。这是合乎逻辑的解释。但是,我需要一个简洁的代码来避免这种依赖关系。如果我使用mod2的insmod,那么mod1应该自动成为insmod,或者其他解决这个问题的好方法。这是我的两个模块 static int multiplyMod1(int a, int b); /** Once the symbol is ex
static int multiplyMod1(int a, int b);
/** Once the symbol is exported, check in /proc/kallsyms **/
/** Call multiplyMod1 from other module **/
/** Ensure that this symbol doesn't exist somewhere **/
EXPORT_SYMBOL(multiplyMod1);
static int multiplyMod1(int a, int b)
{
return a*b;
}
static int mod1_init(void)
{
printk(KERN_ALERT "Hello mod1..Init\n");
return 0;
}
static void mod1_exit(void)
{
printk(KERN_ALERT "Goodbye..mod1\n");
}
module_init(mod1_init);
module_exit(mod1_exit);
生成文件-
obj-m += mod1.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules modules_install
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
这是我的第二个模块。这取决于模块1
/**确保mod1为insmod,以便multiplyMod1符号可用**/
extern int multiplyMod1(int,int);
static int mod2_init(void)
{
printk(KERN_ALERT "Hello mod2..Init\r\n");
printk(KERN_ALERT "The Multiplication result from Mod2 is..%d\r\n",multiplyMod1(49,7));
return 0;
}
static void mod2_exit(void)
{
printk(KERN_ALERT "Goodbye..mod2\r\n");
}
module_init(mod2_init);
module_exit(mod2_exit);
您可以在modulemod2
中使用API,在该模块中您希望使用导出的符号,如果以前未加载,则会按需加载所需的模块
在模块mod2
中
static int __init module_two_init_module(void)
{
int ret;
const char *name;
struct module * fmodule;
pr_info("Module two started");
name = "module_one";
/* This will find module is loaded or not */
fmodule = find_module(name);
if (fmodule == NULL) {
ret = request_module(name);
if (ret == 0) {
pr_info("Module one loaded");
}
}
/* Do rest of code here */
不要忘记使用增加模块引用计数,您需要modprobe来完成此操作。安装您的模块;德普莫德;modprobe这个try\u模块是什么?您能详细说明一下吗?在模块
mod2
中,您将使用模块mod1
导出的符号,因此您需要增加模块mod1
的引用计数。这将防止在使用mod2
时意外/故意移除mod1
。