linux驱动中使用其它模块导出的符号

============================================
作者:yuanlulu
http://blog.csdn.net/yuanlulu


版权没有,但是转载请保留此段声明
============================================


我写了一个驱动,由于要依赖另一个模块导出的符号,搞了很久才弄好。现在总结一下我的做法。

为了方便表述,我把被依赖的模块称为模块B, 我自己的模块称为模块A。

 

步骤一:

在被依赖的模块B中导出要用的符号,如:

int cat9555_state_get_inp(void)

{

................

}

EXPORT_SYMBOL(cat9555_state_get_inp);

 

步骤二:

编译模块B,当前目录下生成Module.symvers文件,将其复制到模块A的目录下。

打开Module.symvers可以看到他的内容如下

0x3c1007e5 cat9555_add_opt_addr /home/project/MeterRead/gpio/gpio EXPORT_SYMBOL
0x20473c2b cat9555_state_get_inp /home/project/MeterRead/gpio/gpio EXPORT_SYMBOL
0x3cc81287 cat9555_del_opt_addr /home/project/MeterRead/gpio/gpio EXPORT_SYMBOL
0x68be5229 cat9555_release_addr /home/project/MeterRead/gpio/gpio EXPORT_SYMBOL
0x743cae4d cat9555_state_as_gpo /home/project/MeterRead/gpio/gpio EXPORT_SYMBOL
0x9c89640e cat9555_state_as_gpi /home/project/MeterRead/gpio/gpio EXPORT_SYMBOL
0x977f0740 cat9555_open_addr /home/project/MeterRead/gpio/gpio EXPORT_SYMBOL
0xf9713bbb cat9555_state_get_outp /home/project/MeterRead/gpio/gpio EXPORT_SYMBOL
0x28d7d46f cat9555_state_set_outp /home/project/MeterRead/gpio/gpio EXPORT_SYMBOL
原来这是记录导出符号的文件。

步骤三:

在模块A的文件中引用导出的符号。

extern cat9555_state_get_inp(void);      //声明引用的符号是外部变量。

int f(){

................

cat9555_state_get_inp();                        //在这里引用导出的符号

................

}

编译A模块。

我如果没有步骤二的话,插入A模块时会出现以下错误(找不到符号 ):

gprsiodrv: no symbol version for cat9555_state_get_inp
gprsiodrv: Unknown symbol cat9555_state_get_inp
gprsiodrv: no symbol version for cat9555_state_as_gpi
gprsiodrv: Unknown symbol cat9555_state_as_gpi
insmod: cannot insert 'gprsiodrv.ko': unknown symbol in module

 

但是有人不用步骤二也可以,猜测与编译器有关。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值