驱动模块的符号导出(一个驱动模块调用另一个驱动模块)
查看elf文件的信息 :
readelf xxx.ko -a
UND标识的函数在内核符号表里都是“T”,表示是全局函数,也就是说只有全局函数,内核才会帮我们把相应的函数地址转换好
驱动模块里默认情况下不管是函数还是全局变量都是作局部使用(相当于在函数或者变量名前加了“static”)
如果需要作为全局使用,需要使用导出符号“EXPORT_SYMBOL(函数名或者变量)”,来声明函数或者变量为全局使用,提供给其它驱动模块调用
实现一个内核里的全局函数“funca”,在其它驱动模块里调用(myfunc.c):
#include <linux/init.h>
#include <linux/module.h>
void funca(char *str)
{
printk("In funca : %s\n", str);
}
EXPORT_SYMBOL(funca);