Linux内核升级出现错误!!

空白是我 2007-06-21 08:39:10
各位大哥
小弟在Vmware虚拟机下想把redhat9.0下
内核版本为2.4升级到2.6.20.2
在编译内核时不幸出现错误
具体见下描述!!


初始内核为:2.4.18.2

升级如下几个程序:

device-mapper version 1.01.04
LVM2 version 2.01.14
mkinitrd version 2.4.27
modutils version 2.4.27
module-init-tools version 3.2-pre9

下载内核

make mrproper
make menuconfig

#make dep

出现如下错误:

[root@localhost linux-2.6.20.2]#make dep
*** Warning: make dep is unnecessary now.

#make zImage
出现如下错误:
BFD: Warning: Writing section '.bss' to huge ( ie nega:ive ) file offset 0xco28f000.
objcopy: arch/i386/boot/compressed/vmlinux.bin: File truncated

make[2]: *** [arch/i386/boot/compressed/vmlinux.bin] Error 1
make[1]: *** [arch/i386/boot/compressed/vmlinux] Error 2
make: *** [zImage] Error 2

make
make install

*** Missing file: arch/i386/boot/bzImage
*** You need to run "make" before "make install"

make[1]: *** [install] Error 1
make: *** [install] Error 2

从网上也找过相关的资料,都没有提到解决的方法!!
小弟很迷茫!!望各位高人能指点一下!!谢谢!!!
...全文
487 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
DanXer 2007-06-22
  • 打赏
  • 举报
回复
重新仔细看了一下2.6的源码,发现之前自己的理解有错误,一个寄存器读错引起后面全盘错误,现在奉上正确版本。来自2.6.17.3内核.下面的过程都是指i386体系,不包括arm.

bzImage和zImage的区别来自于保护模式代码的放置位置:
1.众所周知,内核映像包括两部分代码:实模式代码和保护模式代码,当引导装载器装载内核映像到代码段内存时,分别放置实模式代码和保护模式代码到不同的位置,然后进入实模式代码执行,实模式代码执行中转入CPU保护模式,开始执行32位保护模式代码。

2.不管是zImage还是bzImage,他们的实模式代码部分都被装入0x9000:0000(物理地址0x90000)-0x9A00:0000(物理地址0x9A000),其中0x9000:0000-0x9020:0000是内核引导扇区,现在只是些假代码,无用。0x9020:0000-0x9800:0000是内核实模式代码。内核从这里开始执行。

3.bzImage的内核映像中的保护模式代码,由引导装载器直接装载入高位内存(物理地址0x100000),就是1M以上。内核实模式代码在完成检查引导装载器兼容性(旧loader可能把实模式代码放在不是0x90000的其他地方,这是需要移到这里),A20(不明白:-(),初始化gdt,idt(全局描述表,和中断描述表)之后,就将CPU初始化为保护模式,然后跳转到0x100000。至此内核活了起来,他进入了强大的32位线性地址空间执行。由于bzImage是在1M以上,所以它的大小理论上是没有限制的。

4.zImage的的内核映像中的保护模式代码由引导装载器装载入低位内存区0x1000:0000-0x9000:0000(物理地址0x10000-0x90000),然后实模式代码在把它移到从64K=0x10000位置移到4K位置0x1000,然后做和bzImage实模式代码一样的事情,如:检查引导装载器兼容性,A20,初始化gdt,idt(全局描述表,和中断描述表),最后进入保护模式代码执行,0x100:0000(物理地址0x1000)位置。所以我们看到保护模式代码范围必须是0x10000-0x90000,大小是512K字节,再大就会覆盖实模式安装代码。所以zImage的内核最大只能512K.

对于arm可以生成800多K的zImage的事情,我不是很清楚,但因为它是arm,不是x86,它不必要有保护模式和实模式的问题,所以当然就不存在保护模式代码的位置和大小问题。
wind_tuxr 2007-06-22
  • 打赏
  • 举报
回复
linux设备驱动开发群42013154
空白是我 2007-06-21
  • 打赏
  • 举报
回复
能有高手帮我解决一下吗?
空白是我 2007-06-21
  • 打赏
  • 举报
回复
我用make bzImage也没有办法生成
DanXer 2007-06-21
  • 打赏
  • 举报
回复
make dep只是个只是个警告,没关系。
是make zImage的问题,你应该用make bzImage, 2.6内核根本就没有申明有zImage的目标,估计仅仅是为了向后兼容。

他们之间的区别是:kernel-2.4之前的版本,使用,make zImage可以引导内核源树生成不超过4K大小的内核,使它可以直接写入前八个引导扇区,而不需要引导装载器来引导系统,比如可以用软盘来引导系统。另外zImage的内核启动时首先会把自己放在0x1000:0000高端内存,然后再移动到0x0200:0000位置的低端内存,然后启动CPU。不幸的是2.4之后的内核已不再支持没有引导装载器的引导过程。
make bzImage的内核是4K-1M大小的内核,它把自己放到0x1000:0000位置的高端内存,然后引导CPU。当直接编入内核的模块很多时,就会使内核增大,从而不可能生成zImage(4K),这时就必须使用引导装载器了。

据我所知,2.6的内核不管你怎么配置已经很难生成zImage了。
lansesijin 2007-06-21
  • 打赏
  • 举报
回复
to:Ropyn(剑心) ( )

我用的2.6.18的内核,make zImage 生成的内核800多k,已经可以在arm板上跑了
不过我不了解内核版本之间的联系,不知道为什么……看来有好多东西要学咯
lansesijin 2007-06-21
  • 打赏
  • 举报
回复
http://hi.baidu.com/wangy0919/blog/item/d946751f0fc03ec9a7866971.html

你看看这个文章吧,写的挺全的,按步骤下来应该就没问题了

不过有几个rpm包不太好找哦……
多用google和baidu吧,好多问题都有答案的
lansesijin 2007-06-21
  • 打赏
  • 举报
回复
make clean不清除config文件
而且2.6的内核 不用make dep
空白是我 2007-06-21
  • 打赏
  • 举报
回复
没有人回答吗
空白是我 2007-06-21
  • 打赏
  • 举报
回复
没有人顶吗?
另外再问一下问题
make clean清除config文件吗?
空白是我 2007-06-21
  • 打赏
  • 举报
回复
刚才看到说是binutils太旧了
也不知道是不是这个原因
空白是我 2007-06-21
  • 打赏
  • 举报
回复
走过路过的都看一下呀 !!
帮帮小弟呀

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧