当前位置: 首页 > backend >正文

EXPORT_SYMBOL

EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。
2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不导出所有的符号)。 

 

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

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

另外,在编译调用某导出函数的模块时,往往会有WARNING: "****" [************] undefined!
使用dmesg命令后会看到相同的信息。这主要是因为在编译连接的时候还没有和内核打交道,当然找不到symbol了,但是由于你生成的是一个内核模块,所以LD不提示error,而是给出一个warning,寄希望于在insmod的时候,内核能够把这个symbol连接上。

转载于:https://www.cnblogs.com/fengdeyingzi/p/5459476.html

http://www.xdnf.cn/news/11497.html

相关文章:

  • 3CX的具体介绍
  • (转)如何应用MTCNN和FaceNet模型实现人脸检测及识别
  • 线程同步之ManualResetEvent 和AutoResetEvent
  • 易语言入门知识点
  • Android基础教程(非常详细)从零基础入门到精通,看完这一篇就够了
  • Amazon S3简介
  • Sniffer Pro使用详解
  • WINDOWS API ——CREATEMUTEX——创建互斥对象(转)
  • 易语言_酷Q机器人插件_01
  • 离线浏览器Teleport Pro完全教程
  • XML 简介
  • 分享130个ASP整站程序源码,总有一款适合您
  • 【C语言进阶剖析】22.C语言中的条件编译使用分析
  • Windows Server安装SQL Server 2008 R2
  • euphoria游戏资源_游戏资源合集(一)——乙女游戏篇
  • 有关一级域名二级域名三级域名
  • Broadcast(广播)和BroadcastReceiver(广播接收器)
  • Web 四种常见的POST提交数据方式
  • texttospeech的使用
  • objectArx ---反应器
  • JAVA开发环境配置(保姆式教程)
  • 代码的两种命名方法:驼峰命名、匈牙利命名(优缺点)
  • ADB安装及使用详解(非常详细)从零基础入门到精通,看完这一篇就够了_adb是什么
  • 关于qt缺少xcb问题终极解决办法
  • android 使用SQLite数据库详解
  • HIS系统门急诊医保实时结算接口测试
  • 倍投计算机器在线,2021看图开特马50研究计算倍投【欢迎你】
  • css设置滚动条样式
  • 网络管理与维护基本知识
  • android x86怎么样,Android x86 4.4安装体验(转载)