模块与变量导出

今天折腾红外模块发现个奇怪的现象,当以模块的方式编译红外源码时,不能通过说hkvs_root_dir undefined,但是以build-in方式编译没有任何问题,起初想不通,正好买了本新书ILDD,第一章就是讲内核模块加载的原理,看了看,明白了,原来内核的build-in可以看成整个一个大模块,如果红外模块用build-in方式编译的话当然没有问题,他可以访问本模块内的所有全局变量,但是当红外以模块编译时,由于hkvs_root_dir仅仅是内核内建模块的全局变量,这个全局变量并没有export,不能供其他模块使用所以出现了以上问题,如果上述结论正确的话,build-in模块的函数也是同理,不需要export,只需要定义时不用static,需要时用extern声明一下即可,以前一直没弄清楚内核是个大模块,认为不同驱动程序之间是不同的模块,ILDD上面有一副图是模块加载时find_symbol查找符号时的搜索路径,才知道内核是一个模块,它的导出符号全部放在同一个section内,看到这里突然想到system.map的内容,确实是这样,导出符号的地址是相连的,以前看system.map时根本没往这方面想
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值