免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3124 | 回复: 7

[内核模块] 如何在内核模块间共享变量和函数? [复制链接]

论坛徽章:
0
发表于 2013-04-12 04:08 |显示全部楼层
1 如何在linux的两个内核模块之前共享变量?比如,在内核模块A中声明变量x,并为x赋值,如何能在内核模块B是使用x。
2 如何在linux的两个内核模块之前共享函数?比如,在内核模块B中调用内核模块A中定义的函数f().
多谢各位啦。

论坛徽章:
0
发表于 2013-04-12 08:36 |显示全部楼层
好早!
一个地方申明导出EXPORT_SYMBOL,一个地方申明外部extern。

论坛徽章:
0
发表于 2013-04-12 09:23 |显示全部楼层
其实明白内核本身就是一个完整的整体就不会有什么“共享”的观念了。

各个子系统,各个LKM,大家各自定义的函数和变量都能为其他子系
统和模块所直接使用,关键就在于看自己这边是否愿意奉献出来让
他人去用.... 你说道理上是不是这样?

论坛徽章:
0
发表于 2013-04-13 03:07 |显示全部楼层
恩,对的。问题是如何能够贡献出来呢?
还有一个问题就是,用make编译出来的ko文件有可能是一个用户层的module吗?谢谢回复 3# juliantec


   

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-04-13 10:03 |显示全部楼层
回复 4# rick_cheung

不可能!
   

论坛徽章:
0
发表于 2013-04-13 14:45 |显示全部楼层
模块间如果有函数依赖需要注意Module.symvers文件信息的共享,比如模块1引用了模块2的函数A、B,模块2在编译时会把函数A、B的信息放在编译时生成的Module.symvers文件里,在编译模块2时需要将这个文件导入到模块1的Module.symvers里编译;或者将模块1、模块2放在同一个编译框架里编译也可以解决依赖的问题

论坛徽章:
0
发表于 2013-04-23 10:54 |显示全部楼层
楼上正解。这貌似是linux2.6版本中的一个bug。
在linux2.6中,仅仅EXPORT_SYMBOL是不够的,还需要在调用模块的Makefile文件中加一句KBUILD_EXTRA_SYMBOLS = /export_symbol_module_dir/Module.symvers回复 6# junnyg


   

论坛徽章:
0
发表于 2013-04-23 13:08 |显示全部楼层
回复 3# juliantec

哈哈  内核是个整体这句话真是一语中的。“共享”的全局量要注意并发控制,这很容易忽略。其他就按内核的规范来就是啦!
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP