我是内核驱动程序开发的新手。所以我只是被困在其中。如何从另一个内核模块调用内核模块的功能?这些都是我的.c
文件。
模块1.c:
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
int multiplication(int a, int b)
{
int ans=0;
ans = a * b;
printk(KERN_INFO"Returns the Multiplication to Module2!: %dn", ans);
return ans;
}
模块2.c:
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
void calling()
{
int a=2,b=3;
int ans=0;
ans = multiplication(a,b) // function of module1.c.
printk(KERN_INFO"Multiplication recieved from Module1!: %dn", ans);
}
我想从module1.c
调用module2.c
中的multiplication
函数。我该怎么做?
要调用另一个内核模块中定义的函数,您必须导出该函数。
EXPORT_SYMBOL
EXPORT_SYMBOL(( 可帮助您向其他模块/代码提供 API。
您导出的函数可用于其他模块/代码。
定义函数后,首先在module1.c
中使用EXPORT_SYMBOL()
函数:
EXPORT_SYMBOL(multiplication);
然后,您可以使用module2.c
中的extern
关键字将该函数声明为外部符号:
extern int multiplcation(int, int);
生成模块后,插入导出符号的模块,然后插入导入符号的模块。在这种情况下,您将插入module1.ko
然后module2.ko
上面的"EXPORT_SYMBOL"超链接中提供了一些示例