Chinaunix

标题: 什么情况下不种版本号的内核模块可能通用 [打印本页]

作者: ruomu    时间: 2009-07-03 08:47
标题: 什么情况下不种版本号的内核模块可能通用
请问一下版本号第四位代表什么意思,一个是-8,另一个是-92。
2.6.18-8.el5  
2.6.18-92.el5
我在2.6.18-92.el5环境下编译的内核模块可以在2.6.18-8.el5下成功加载,但是有些时候内核版本号不一样的话,内核模块是不通通用的。
什么情况下不种版本号的内核模块可能通用呢?
谢谢!
作者: Godbach    时间: 2009-07-03 09:46
主要还是内核版本变化不大的吧。另外,可以将你的程序调整一下,在insmod的时候不检查内核版本
作者: liying_gg    时间: 2009-07-03 10:04
标题: 回复 #2 Godbach 的帖子
如何不检查版本?
作者: Godbach    时间: 2009-07-03 10:16
原帖由 liying_gg 于 2009-7-3 10:04 发表
如何不检查版本?


我记得之前看到这样的介绍,但我自己也没有实践过。你Google一把看看有没相关信息。
作者: wvyeahnm    时间: 2009-07-03 15:39
这个我不注意的知道,我是3月的新手,本想请教人未果便自己看,大概知道如下:
总的来说版本不能相差太远,否则就行不通。要求版本相差不远的原因是要求modpost要差不多,因为在编译模块是调用了这个程序,如果modpost一样,那就能修改几个头文件,然后跨版本编译了。
首先,UTS_RELEASE定义要一样,就是uname -r能看到的那个,一般会在version.h或utsrelease.h中。
然后,auto.conf和autoconf.h要一样,这样以后A编译的模块B差不多可以加载了。
其实主要是vermagic.h中的一个校验的一个字符串要一样(上述dd一起),模块格式要一样(modpost一样)就好了。如果不想修改上面的文件,就直接修改/linux/vermagic.h中的VERMAGIC_STRING,修改成目标机上的(关键你得知道目标机上的),在模块不能加载时查看内核打印信息就能看到这个字符串。上述要求的config和UTS一起定义了这个字符串。至于不重编译,应该通不过加载时的验证的。

[ 本帖最后由 wvyeahnm 于 2009-7-3 15:55 编辑 ]
作者: snoopy3810    时间: 2009-07-03 16:23
原帖由 wvyeahnm 于 2009-7-3 15:39 发表
这个我不注意的知道,我是3月的新手,本想请教人未果便自己看,大概知道如下:
总的来说版本不能相差太远,否则就行不通。要求版本相差不远的原因是要求modpost要差不多,因为在编译模块是调用了这个程序,如果 ...

模块内部调用的数据结构、文件系统,也很有可能发生了变化




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2