导出符号 --- EXPORT_SYMBOL()

linux2.6的 /proc/kallsyms 文件对应着内核符号表,它记录了符号及符号的内存地址。

模块可以使用如下宏 导出符号到内核符号表

EXPORT_SYMBOL(name);
EXPORT_SYMBOL_GPL(name); //只适用于包含GPL许可权的模块。


示例:export_symb.c
导出整数加,减运算函数符号的内核模块。
xxha@xxha-OptiPlex-780:~/share/learning/songbaohua/4_char_device_driver/export_symbol$vim export_symb.c

1 /*======================================================================
  2 A simple kernel module to introduce export symbol
  3 
  4 The initial developer of the original code is Baohua Song
  5 <author@linuxdriver.cn>. All Rights Reserved.
  6 ======================================================================*/
  7 #include <linux/init.h>
  8 #include <linux/module.h>
  9 MODULE_LICENSE("Dual BSD/GPL");
 10 
 11 int add_integar(int a,int b)
 12 {
 13 return a+b;
 14 }
 15 
 16 int sub_integar(int a,int b)
 17 {
 18 return a-b;
 19 }
 20 
 21 EXPORT_SYMBOL(add_integar);
 22 EXPORT_SYMBOL(sub_integar);

xxha@xxha-OptiPlex-780:~/share/learning/songbaohua/4_char_device_driver/export_symbol$vim Makefile

1 obj-m := export_symb.o
  2 
  3 clean: 
  4 rm -rf *.ko *.mod.c *.o *.order *.symvers



xxha@xxha-OptiPlex-780:~/share/learning/songbaohua/4_char_device_driver/export_symbol$ make -C /usr/src/linux-headers-2.6.35-22-generic/ M=$(pwd) modules
make:进入目录'/usr/src/linux-headers-2.6.35-22-generic'
  CC [M]  /home/xxha/share/learning/songbaohua/4_char_device_driver/export_symbol/export_symb.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/xxha/share/learning/songbaohua/4_char_device_driver/export_symbol/export_symb.mod.o
  LD [M]  /home/xxha/share/learning/songbaohua/4_char_device_driver/export_symbol/export_symb.ko
make:离开目录“/usr/src/linux-headers-2.6.35-22-generic”


可以使用make clean删除多余的编译结果。
xxha@xxha-OptiPlex-780:~/share/learning/songbaohua/4_char_device_driver/export_symbol$make clean
rm -rf *.ko *.mod.c *.o *.order *.symvers

xxha@xxha-OptiPlex-780:~/share/learning/songbaohua/4_char_device_driver/export_symbol$sudo insmod export_symb.ko

xxha@xxha-OptiPlex-780:~/share/learning/songbaohua/4_char_device_driver/export_symbol$cat /proc/kallsyms | grep integar
ffffffffa004a050 r __ksymtab_sub_integar    [export_symb]
ffffffffa004a080 r __kstrtab_sub_integar    [export_symb]
ffffffffa004a070 r __kcrctab_sub_integar    [export_symb]
ffffffffa004a060 r __ksymtab_add_integar    [export_symb]
ffffffffa004a08c r __kstrtab_add_integar    [export_symb]
ffffffffa004a078 r __kcrctab_add_integar    [export_symb]
ffffffffa004a000 T add_integar    [export_symb]
ffffffffa004a010 T sub_integar    [export_symb]

上面就是导出到内核的符号表,但是怎么使用他们呢,还不知道。
应该是别的程序中,可以调用 add_integar 和 sub_integar 吧。

这就是导出符号的示例export_symb.ko, 很简单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值