如何访问内核模块的导出符号?

blueemotion 2005-03-10 10:32:07
假设内核模块A使用EXPORT_SYMBOL(X)导出两个函数,EXPORT_SYMBOL(fun_a),EXPORT_SYMBOL(fun_b).
模块使用insmod加载后,内核模块B想调用模块A导出的这两个函数fun_a和fun_b,该如何做?
又如果用户空间(root用户)想使用普通的应用程序(test)访问模块A导出的函数fun_a和fun_b,该如何写test?他们之间如何传递参数?
请高手指教!能有例子最好.谢谢!
...全文
330 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueemotion 2005-03-10
  • 打赏
  • 举报
回复
这样编译是可以通过,可是不能连接,连接的时候说有一个unresolved symbol.
这个可不是模块编程,不需要连接成elf文件。模块在insmod时,由系统调用ld来连接

现在正在看linux device driver ,只能建一个chrdev,然后操作该设备,
达到调用模块导出符号的问题。
keysea 2005-03-10
  • 打赏
  • 举报
回复
内核公用符合表中包含了所有的全局内核符号即函数和变量的地址实现驱动程序模块时在很多情况下都需要使用这些全局符号公用符号表能够从文件/proc/ksyms 中以文本格式读取前提是内核支持/proc 文件系统当模块被装入内核后它所导出的任何符号都变成公用符号表的一部分在/proc/ksyms 或者
ksyms 命令的输出中我们能够看到这些新增加的符号
Linux 内核头文件提供了一个方便的方法来管理符号对模块外部的可见性从而减少了可能造成
的名字空间污染并且适当隐藏信息本节中描述的这种方法适用于2.1.18 及其后的内核版本


我认为 只要module被insmod了 就可以直接调用了 ,最差 把源文件include了不就可以了?
具体的 好好看看《linux设备驱动程序》(linux device driver) 那本书好了
blueemotion 2005-03-10
  • 打赏
  • 举报
回复
模块之间的访问已经搞定,只需要包含相应的定义即可
如包含头文件,或者使用extern即可

对于从root的用户空间访问内核模块导出符号,还是没有找到办法
难道只能写一个设备驱动,由驱动调用吗?
tengulre 2005-03-10
  • 打赏
  • 举报
回复
学习.

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧