dqs_linux-1

EXPORT_SYMBOL只出如今2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 作标记的。
2.6就必须用EXPORT_SYMBOL() 来导出来(由于2.6默认不处处全部的符号)。 

一、EXPORT_SYMBOL的做用是什么?
EXPORT_SYMBOL标签内定义的函数或者符号对所有内核代码公开,不用修改内核代码就能够在您的内核模块中直接调用,即便用EXPORT_SYMBOL能够将一个函数以符号的方式导出给其余模块使用
这里要和System.map作一下对比:
System.map 中的是链接时的函数地址。链接完成之后,在2.6内核运行过程当中,是不知道哪一个符号在哪一个地址的。
EXPORT_SYMBOL 的符号, 是把这些符号和对应的地址保存起来,在内核运行的过程当中,能够找到这些符号对应的地址。而模块在加载过程当中,其本质就是能动态链接到内核,若是在模块中引用了内核或其它模块的符号,就要EXPORT_SYMBOL这些符号,这样才能找到对应的地址链接。

二、使用方法
   第1、在模块函数定义以后使用EXPORT_SYMBOL(函数名)
   第2、在调用该函数的模块中使用extern对之声明
   第3、首先加载定义该函数的模块,再加载调用该函数的模块

函数

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息