免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3107 | 回复: 7
打印 上一主题 下一主题

如何编译一个跨版本运行的内核模块? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-30 12:04 |只看该作者 |倒序浏览
进行过内核模块编程的朋友一定知道insmod时会检查版本号,如果版本号不符就会报一个格式不符的错误。
那么,有没有一个办法可以让一个内核模块跨各内核版本运行而不需要重新编译呢?
比如我在我的内核上2.6.15-26-386编译一个内核模块hello.ko,copy到其它主机上不管内核版本是多少,能直接insmod? 有这样的解决办法吗?

论坛徽章:
0
2 [报告]
发表于 2006-08-30 13:16 |只看该作者
原帖由 zhoulifa 于 2006-8-30 12:04 发表
进行过内核模块编程的朋友一定知道insmod时会检查版本号,如果版本号不符就会报一个格式不符的错误。
那么,有没有一个办法可以让一个内核模块跨各内核版本运行而不需要重新编译呢?
比如我在我的内核上2.6.15- ...


这样该 kernel module 运作不起来吧 ?

不同版本的 kernel symbolic table 都不一样, 就算是你编译核心时加上不补上 kernel version checking 功能, 这样的 kernel module 也无法在其他 kernel 版本上运作使用.

当然啦, 单纯的 hello world 的 kernel module 可能没差, 但是要 hook/bonding 相关 kernel 函数的 kernel module 就挂了.

==

论坛徽章:
0
3 [报告]
发表于 2006-08-30 13:46 |只看该作者
应该是没有。 特别是gcc的版本也很重要, 如果你的hello,ko是为2.6.0(gcc 3.2编译 )写的,那么拿到gcc 4.0编的2.6.0上也不行。

论坛徽章:
0
4 [报告]
发表于 2006-08-30 14:42 |只看该作者
我试了一些也确实是不行
但这样的状况对于Linux推广就是个障碍了,比如某厂家写了一个程序,可能需要作为内核模块去运行,但他又不想把代码公布,那就没办法做成一个Linux下都能用的模块了,遗憾

看来可能比较多想赚钱的厂家一时半会儿都不会加入Linux的行列来做软件产品

论坛徽章:
0
5 [报告]
发表于 2006-08-30 14:54 |只看该作者
这是linux kernel 的 设计上的硬伤,
linux更新太快,模组划分不合理,为了让驱动稳定,只能使用这个限制。
不过, 有时只要你的 kernel 配置差别不大, 版本差别不大, 强制 加载也可以运行, 我在 arm-linux 上试过, 2.4.x 上也试过, 2.6.x 就不知道了。

论坛徽章:
0
6 [报告]
发表于 2006-08-30 15:06 |只看该作者
原帖由 connet 于 2006-8-30 14:54 发表
这是linux kernel 的 设计上的硬伤,
linux更新太快,模组划分不合理,为了让驱动稳定,只能使用这个限制。
不过, 有时只要你的 kernel 配置差别不大, 版本差别不大, 强制 加载也可以运行, 我在 arm-linux  ...


kernel 本身底层的 api 与 kernel structure 没变化太多的话,也许可以强制挂入,不过离太多版本可能很难。

另外其实一般厂商愿意给 source 的话,通常就可以当场编译安装使用。不过另外有些厂商则是只有提供 LINUX 企业版本的 binary kernel module,所以一般可以看到许多厂商放出来的 binary driver 都是给 RHEL 与 SLES 这类企业版本居多。

也许 linux kernel 的一些 ABI 项目需要固定,这样厂商发展撰写 driver 才可以更单纯。

题外话最近使用 fuse,可以扩展很多 linux 能够存取使用的 filesystem。如果相关硬体设备装置的驱动也有这类机制就更好了。

==

[ 本帖最后由 kenduest 于 2006-8-30 15:08 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-08-30 15:26 |只看该作者
原帖由 zhoulifa 于 2006-8-30 14:42 发表
我试了一些也确实是不行
但这样的状况对于Linux推广就是个障碍了,比如某厂家写了一个程序,可能需要作为内核模块去运行,但他又不想把代码公布,那就没办法做成一个Linux下都能用的模块了,遗憾

看来可能比较 ...



第一,尽可能不选择这样的厂家和产品

第二,对于流行的发行版,要求厂家提供定制版本,或跟踪RH AS、Fedora的核心updates, 及时在网站上发布对应的版本

第三:厂家如果既要当婊子还要立牌坊,可以把一些见不得人的不直接调用核心功能的部分独立出来做成.o或者.a 文件,把与核心接口的那些部分用源代码提供,编译连接在一起。一些软Modem就是这样干的。

论坛徽章:
0
8 [报告]
发表于 2006-08-31 10:42 |只看该作者
安装时编译。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP