报错形式如下所示:其中test为函数名
WARNING: "test"[*******.ko] undefined!
解决办法为:将函数test导出符号到内核符号表。
可以使用如下两种方式
EXPORT_SYMBOL(符号名);//函数名 = 符号名
EXPORT_SYMBOL_GPL(符号名);
导出的符号将可以被其他模块使用,使用前声明一下即可。EXPORT_SYMBOL_GPL()只适用于包含GPL 许可权的模块。
例:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
int add_integar(int a,int b)
{
return a+b;
}
int sub_integar(int a,int b)
{
return a-b;
}
EXPORT_SYMBOL(add_integar);
EXPORT_SYMBOL(sub_integar);
将驱动加载之后,可以从符号表中找到该函数
root@ubuntu:/home/zhangtao/share/globalmem# cat /proc/kallsyms | grep integar
ffffffffc0381060 r __kstrtab_sub_integar [test]
ffffffffc0381058 r __kcrctab_sub_integar [test]
ffffffffc038106c r __kstrtab_add_integar [test]
ffffffffc0381050 r __kcrctab_add_integar [test]
ffffffffc0380000 T add_integar [test]
ffffffffc0381030 r __ksymtab_add_integar [test]
ffffffffc0380010 T sub_integar [test]
ffffffffc0381040 r __ksymtab_sub_integar [test]