四、导出符号表
vim ./include/linux/export.h +50
在一个内核模块中调用另外一个内核模块中的函数,需要提供者将函数的符号表(地址)导出,调用者直接使用这个地址即可
1、导出符号表的意义:
1)可以解决内核代码冗余的问题,同种问题,一次实现,多次调用。
2)可以减小驱动开发的难度,在编写Linux内核驱动的时候,一些内核机制实现的过程,驱动工程师不需要太过关心,内核工程师将这些接口直接供给驱动工程师使用,从而减小开发的难度。
2、操作过程:
1)在第一个模块的函数实现后,使用导出函数符号表的宏(即:EXPORT_SYMBOL_GPL(func)宏);
如:
int add(int a,int b)
{
return (a+b);
}
EXPORT_SYMBOL_GPL(add);
2)编译第一个模块,生成一个Module.symvers的文件,文件中记录着add函数的地址
3)将这个Module.symvers文件复制到第二个模块目录下,
4)在第二个模块中使用函数前,先进行声明,
如:
extern int add(int,int);
int c = add(7,8);
浙公网安备 33010602011771号