07-导出符号
4.6 导出符号
Linux 2.6的“/proc/kallsyms”文件对应着内核符号表,它记录了符号以及符号所在的内存地址。
模块可以使用如下宏导出符号到内核符号表:
EXPORT_SYMBOL(符号名);
EXPORT_SYMBOL_GPL(符号名);
导出的符号将可以被其他模块使用,使用前声明一下即可。EXPORT_SYMBOL_GPL()只适用于包含GPL许可权的模块。代码清单4.5给出了一个导出整数加、减运算函数符号的内核模块的例子(这些导出符号毫无实际意义,仅仅是为了演示)。
代码清单4.5 内核模块中的符号导出
1 #include <linux/init.h>
2 #include <linux/module.h>
3 MODULE_LICENSE("Dual BSD/GPL");
4
5 int add_integar(int a,int b)
6 {
7 return a+b;
8 }
9
10 int sub_integar(int a,int b)
11 {
12 return a-b;
13 }
14
15 EXPORT_SYMBOL(add_integar);
16 EXPORT_SYMBOL(sub_integar);
从“/proc/kallsyms”文件中找出add_integar、sub_integar相关信息:
[root@localhost driver_study]# cat /proc/kallsyms | grep integar
c886f050 r __kcrctab_add_integar [export]
c886f058 r __kstrtab_add_integar [export]
c886f070 r __ksymtab_add_integar [export]
c886f054 r __kcrctab_sub_integar [export]
c886f064 r __kstrtab_sub_integar [export]
c886f078 r __ksymtab_sub_integar [export]
c886f000 T add_integar [export]
c886f00b T sub_integar [export]
13db98c9 a __crc_sub_integar [export]
e1626dee a __crc_add_integar [export]