当前位置:嗨网首页>书籍在线阅读

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]