LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1801|回复: 5

gcc3.3编译的内核不能加载gcc4编译的模块问题的解决

[复制链接]
发表于 2005-8-3 23:56:00 | 显示全部楼层 |阅读模式
机器上的2.6.9 内核是以前用gcc3.3编译的.前不久了gcc到4.0
今天想用mount -o loop 时实然发现根本就没有编译loop这个内核模块
把内核源代码的树.config 文件改一改只刘有 CONFIG_BLK_DEV_LOOP=m
,然后 make modules
把生成的loop.ko cp 到/lib/modules/2.6.9/kernel/drivers/block
中, 高高兴兴的insmod loop.ko 一把.结果大失所望:
insmod: error inserting 'loop.ko': -1 Invalid module format
dmesg 发现,原来是这样
loop: version magic '2.6.9 preempt PENTIUMII 4KSTACKS gcc-4.0' should be '2.6.9 preempt PENTIUMII 4KSTACKS gcc-3.3'

呵呵呵,看来是gcc版本问题导致的了. 在网上找一通,本想搞个3.3 版的pII loop.ko,
但找起来难度太大了.
突发灵感, strings loop.ko 试下
......
alias=block-major-7-*
vermagic=2.6.9 preempt PENTIUMII 4KSTACKS gcc-4.0
depends=
......
果然有那么一句是描述vermagic的.

下一步不用想也知道了, 找个16进制编辑工具改一改
vim loop.ko
%!xxd
注意看右侧的文本部分.找到以后
g  c    c  -    4  .    0
6763 632d 342e 30
改成
6763 632d 332e 33
:%!xxd -r
:wq
strings loop.ko

vermagic=2.6.9 preempt PENTIUMII 4KSTACKS gcc-3.3

发现这个已经改好了.
再试试 insmod loop.ko , 一切ok , mount -o loop 了一把, 也能用了, 没发现什么异常.
把loop 加到 /etc/modules 中, 一切就搞定了.
发表于 2005-8-4 00:54:08 | 显示全部楼层
牛,不过这样混用总觉得心里有点不踏实..........
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-4 01:34:48 | 显示全部楼层
Post by meteoren
牛,不过这样混用总觉得心里有点不踏实..........

昏.
刚刚发现原来机器上还有gcc-3.3
在编译前 ln -sf /usr/bin/gcc-3.3 /usr/bin/gcc
即可.
刚用这招装了vmware
回复 支持 反对

使用道具 举报

发表于 2005-8-4 12:22:00 | 显示全部楼层
也啧一个,真是牛。
回复 支持 反对

使用道具 举报

发表于 2005-8-5 00:22:35 | 显示全部楼层
真能搞, 牛人啊.
回复 支持 反对

使用道具 举报

发表于 2005-10-20 11:37:10 | 显示全部楼层
九号兄真是天才啊
利害!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表