|
|
发表于 2006-4-13 14:49:22
|
显示全部楼层
出大问题了!
Tuesday, 4. April 2006, 00:35:01
Linux
这几天不断有FC5的用户向我询问2.6.16内核下无法编译drcom的问题,(注:drcom是宽带登陆客户端,这个drcom-client是 linux下实现的开源版本,本人启动了一个q-drcom项目,做drcom的使用支持和图形界面的开发)。编译的错误很明显,是drcom内核模块中给常量inet_stream_ops赋值的原因,但是我自己不用Fc5,并且身边的机器也没有Fc5.我想吧,也许是fedora社区对内核进行更改了,最近比较忙,也不想管,因为其他的发行版本都没有反馈这个问题的。昨天下下来一个fedora5的rpm包,不过是2.6.15的。我的gentoo 没有办法解rpm包,在linuxsir上fedora论坛里发贴请fc5的用户帮我把头文件发过来,很久都没有人回应。后来从网上找到一个脚本,可以利用gunzip这些普通命令什么的解rpm包。解开之后,查看那些patch,发现没有对那个头文件进行修改的,而2.6.15的原始内核也是没有象我想象的有修改。fc5下2.6.15内核编译错误的原因,是因为应用的patch-2.6.16的补丁。不过不知道为什么,解压内核补丁的bz2压缩包时出错,所以也没有去管了。我开始意识到,是否是2.6.16内核的原因,今天早上更新了portage之后,emerge了最新的2.6.16-r1内核,我去内核源码树里面去看那个头文件,gentoo里面的那两个量也被声明为常量了,那么是否linux的原始内核已经在这个地方做了修改了呢?于是去了 kernel.org下了2.6.16版本的内核下来,一看,果然如我所想,做了修改。那么我的猜想也是对的,fc5中应用的2.6.15的内核发布比较玩,是加了各个补丁的内核,并且这个修改并入了2.6.16;而且inet_common.h这个头文件做修改的就这两行,都被声明了外部常量了。
extern const struct proto_ops inet_stream_ops;
extern const struct proto_ops inet_dgram_ops;
如果向drcom模块现在这样的方法,通过给inet_stream_ops赋值来达到改变发送的数据的方法,肯定是行不通的。而为这个改内核的那个头文件或者发布一个布丁,如果能编译运行的话,这也是为大家所不可接受的。在2.6.16版本中对内核进行的修改肯定是为某个原因,甚至有可能是安全方面的原因。现在我所想的是,好好读读这一部分代码,然后是否能有一个比较完美的方案,改动drcom模块本身,或者说确认不声明为常量对其他部分没有影响,而对内核打补丁。对于在drcom下生存的linux用户,也只有请稍微缓缓再升级内核到2.6.16了。我尽力,这几天把重心移到这个上面来,找到一个可以接受的方案。
http://my.opera.com/alva/archive/monthly/?day=20060404 |
|