vmware6.0 Redhat9.0下面 从内核2.4.20升级到2.6.18 (2.6.24) 常见问题

关于怎么样升级到Linux下面http://www.piaoyang.org/blog 的内容是我升级成功最有帮助的文章。当然不同的人不同的平台什么的还是会有一些不同的。我的实验环境:PC主机系统WindowsXP, 虚拟机软件vmware6.0,客户操作系统Redhat9.0。原装9.0内核为2.4.20-8,想升级到2.6.18。开始我想升级到2.6.24,可总是出现问题,后来干脆老老实实的升级2.6.18. 方法就参照下面引用的博客好了。只讲述一下针对自己电脑上升级的一些心得。

常见问题一:No module BusLogic found for kernel 2.6.18

编译到最后一步时即执行:#make install 时,出现

sh /usr/src/linux-2.6.23/arch/i386/boot/install.sh 2.6.23 arch/i386/boot/bzImage System.map "/boot"
No module BusLogic found for kernel 2.6.18
mkinitrd faild

明明配置文件中选择过了以模块形式加载。buslogic在
->Device Drivers
   ->SCSI device support
    ->SCSI low-level drivers
下,BusLogic 是用来支持SCSI设备的模块
网上提示该问题在虚拟机中经常遇到,并且说2.4的内核的Buslogic模块即使静态编译进内核也是不行的,网上提供的解决方法是直接手动拷贝
cp drivers/scsi/BusLogic.o /lib/modules/2.6.11/kernel/drivers/scsi/
我的是2.6。18,拷贝过去看看效果,后面的博客也是这样建议的。按这种方法是可以继续执行#make install了。但一般你的内核是启动不了的。我的内核就是这样。其实这里的问题可能不在于这个地方。我在和同学相互讨论的时候发现这个问题在我上面介绍的我的环境中,一个重要的问题是因为升级工具时没有成功。

# rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm  (注意,这里一定要加入--nodeps参数,下同)
# rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm

这几个工具你这样选择升级,会出现许多行的conflick.......语句,我的电脑上是这样的。也就是与原有的版本相冲突。这个时候你检查一下你的工具版本发现升级并不成功,还是你更新这些工具以前的版本。检查命令很简单:

# rpm -qa | grep mkinitrd 和 # rpm -qa | grep lvm ,所以这些命令并不能简单的按照论坛里说的方法去写。不是那些方法不对,而是如果你不是特别了解这些东西的话,照猫画虎的方法不一定能达到目的。我开始编译的时候也出现过这些问题,不过发现如果你能保证把这些工具的版本都升级成功,不会出现#mkae install时的这个错误。

常见问题二: kernel panic

   这部分问题主要可能是在ext2和ext3文件系统配置导致的。如果对Ext3、Ext2文件的支持没有直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:注释:飘扬博客里这个地方有笔误,应该是必须编译进内核。
          kernel panic : no init found ,try passing init = option to kernel.....
或者是:
          VFS:Cannot open root device "hdxy" or unknow-block(0,0)
          Please append a correct "root=" boot option
          kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
或者是:
          mount: error 19 mounting ext3
          pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2
          umount /initrd/proc fail: 2
          Freeing unused kernel memory: 244k freed
          Kernel panic – not syncing: No init found. Try passing init = option to kernel

 

Block devices的子选项中有如下选项:[ ]Initial RAMdisk (initrd) support[ ]Per partition statistics in /proc/partitions这两个选项,也会导致出现上述问题。作为补充这里提一下,如果自己在配置2.4.20到主版本相同的升级时,出现这个问题,要检查一下这个地方。

 

常见问题三:init[1]: segfault at 00000021 eip 00000021 esp bfbb7bb8 error 4
出现这个错误,而且系统应该算是崩溃了,一直不停刷屏。。这个是在编译2.6.23和.2.6.24时出现的错误。尚未解决。网上好多朋友也都说碰到这个问题,好多也没有解决。有人解答说虚拟机下不能升级到2.6.20以上的版本。可能这样说还是有些问题,我曾经试过一下内核都是可以的,2.6.19,2.6.20,2.6.21,到2.6.22时没有出现上面的刷屏现象,但2.6.24刷屏前的代码和它相似,估计是从.26.22版本改了一些东西导致的。具体原因不解。

编译2.6.19的时候出现一个错误,这里需要升级binutils到高版本就可以解决了。

=============================
时间:2007-01-08
作者:飘扬
首发:http://www.piaoyang.org/blog
Q Q: 47720194
邮箱:piaoyang168#163.com
=============================


序  言
由于开发环境需要在linux-2.6内核上进行,于是准备对我的虚拟机上的Linux系统升级。没想到这一弄就花了两天时间(反复装系统,辛苦啊~~),总算把Linux系统从2.4.20-8内核成功升级到了2.6.18内核。
网上虽然有很多介绍Linux内核升级的文章,不过要么过时,下载链接失效;要么表达不清,不知所云;更可气的是很多文章在转载过程中命令行都有错误。刚开始我就是在这些“攻略”的指点下来升级的,以致于浪费了很多时间。
现在,费尽周折,升级成功,心情很爽,趁性也来写个“升级攻略”吧!于是特意又在虚拟机上重新安装一个Linux系统,再来一次完美的升级,边升级边记录这些步骤,写成一篇Linux内核升级记实录(可不是回忆录啊!),和大家一起分享~~!


一、准备工作
首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。
启动Linux系统,并用根用户登录,进入终端模式下。


1、查看Linux内核版本
# uname -a
如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是2.4.x,那恭喜你,闯关通过,赶快进行下一步。


2、下载2.6内核源码
下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2


3、下载内核升级工具
(1)下载module-init-tools-3.2.tar.bz2
http://www.kernel.org/pub/linux/ ... t-tools-3.2.tar.bz2
(2)下载mkinitrd-4.1.18-2.i386.rpm
http://ayo.freshrpms.net/fedora/ ... d-4.1.18-2.i386.rpm
(3)下载lvm2-2.00.25-1.01.i386.rpm
http://ayo.freshrpms.net/fedora/ ... 00.25-1.01.i386.rpm
(4)下载device-mapper-1.00.19-2.i386.rpm
http://ayo.freshrpms.net/fedora/ ... -1.00.19-2.i386.rpm
(2.6.18内核和这4个升级工具我都有备份,如果以上下载地址失效,请到http://www.piaoyang.org/guestbook 留下你的邮箱,我给你发过去)


二、配置工作
好啦,2.6内核和4个升级工具都下载完了(少一个也不行,如果没有下载齐全,请不要尝试下面的步骤,升级是不会成功的),下面回到Linux系统中开始配置工作吧。


4、将下载好的内核源码包和4个升级工具都拷贝到/usr/src文件夹下。怎么拷贝就不用我教了吧~~~~不会拷贝的去撞墙吧!~~呵呵!


5、拷贝完毕,开始解压新内核,具体操作请依次执行以下命令:
# cd /usr/src  (进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令)
# rm –rf linux  (删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过)
# tar jvxf linux-2.6.18.tar.bz2  (解压新内核)
# ln -s linux-2.6.18 linux  (重新生成linux文件夹)


6、安装module-init-tools工具
在/usr/src目录下,依次执行下列命令:
# tar jvxf module-init-tools-3.2.tar.bz2  (解压module-init-tools)
# cd module-init-tools-3.2  (由/usr/src目录进入module-init-tools目录下)
#./configure --prefix=/
# make moveold
# make all install
#./generate-modprobe.conf /etc/modprobe.conf


7、安装另外三个升级工具
回到/usr/src目录下,依次执行下列3个命令来安装另外三个升级工具:
# rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm  (注意,这里一定要加入--nodeps参数,下同)
# rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm
# rpm -ivh --nodeps device-mapper-1.00.19-2.i386.rpm
如果不更新以上几个升级包,在后面编译内核时会提示以下错误:
      mkinitrd failed
      make[1]: *** [install] Error 1
      make: *** [install] Error 2


8、配置内核选项。有点繁琐,~~希望一次成功哦~~。
# cd linux-2.6.18  (进入到/usr/src/linux-2.6.18目录下)
# make mrproper  (该命令可确保源代码目录下没有不正确的.o文件)
# make menuconfig (配置内核各选项)
此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):
(1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项;
(2)Device Drivers--->Block Devices中选上“Loopback device support”;
     Device Drivers--->Multi-device support(RAID and LVM)处要选上“device mapper  support”;
     Device Drivers--->Graphics support,一定要选上“ Support for frame buffer devices”;
     Device Drivers  --->USB support  --->选上“USB Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)
     Device Drivers  --->;Network device support  --->Ethernet (10 or 100Mbit)  ---><*>  AMD PCnet32 PCI support
(3)File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)
           Second extended fs support
           Ext2 extended attributes
           Ext2 POSIX Access Control Lists
           Ext2 Security Labels
           Ext3 journalling file system support
           Ext3 extended attributes
           Ext3 POSIX Access Control Lists
           Ext3 Security Labels
           JBB (ext3) debugging support
     File system--->DOS/FAT/NT Filesystems  --->选上“NTFS file system support”;
注意:
       ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:
          kernel panic : no init found ,try passing init = option to kernel.....
或者是:
          VFS:Cannot open root device "hdxy" or unknow-block(0,0)
          Please append a correct "root=" boot option
          kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
或者是:
          mount: error 19 mounting ext3
          pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2
          umount /initrd/proc fail: 2
          Freeing unused kernel memory: 244k freed
          Kernel panic – not syncing: No init found. Try passing init = option to kernel
(我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了~~~如果依照本文做完所有步骤,当你重启Linux系统后,若不幸进不去2.6.18内核,你会发现你的出错信息就是上面三种了~~~哈!)
(4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:
     Device Drivers ---><*>SCSI device support  (此项不选的话,下面两项就选择不上)
     Device Drivers ---><*>SCSI device support ---><*>SCSI disk support
     Device Drivers---><8>SCSI device support--->SCSI low-level drivers---><*>; BusLogic SCSI support


三、编译工作
OK,繁杂的配置工作完成了,至此,编译前的准备工作都做好了!


9、开始编译啦……
在/usr/src/linux-2.6.18目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!
# make dep  (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)
# make clean  (清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过)
# make bzImage  (注意大小写。这一步才是真正编译内核)
    内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make  zImage编译,内核很大的话,系统会提示你使用make   bzImage命令来编译,所以我直接用make bzImage来编译。
# make modules  (编译可加载模块)
# make modules_install  (安装可加载模块)
  安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。
# make install  (安装新内核)
注意:
        make install的时候可能会出现如下错误信息:
        No module BusLogic found for kernel 2.4.12
        mkinitrd failed
此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将BusLogic.o文件复制过去:
# cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o  /lib/modules/2.6.18/kernel/drivers/scsi
不过别忘记,复制过后再执行一下make install。这一步若卡住了,下面的都无法进行,如果看本文档还是没有解决问题,就来我的网上留言本求助吧,进http://www.piaoyang.org ,点“留言本”即可,我会及时看到你的求助信息的。


四、启动新内核
10、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:     
# cp  /usr/src/linux-2.6.18/arch/i386/boot/bzImage   /boot/vmlinuz-2.6.18     
# cp  /usr/src/linux-2.6.18/System.map   /boot/System.map-2.6.18     
# cd  /boot  (进入boot目录)
# rm –rf  System.map  (删除原来的连接)     
# ln –s System.map-2.6.18  System.map   (重新建立连接)     


11、修改Grub启动管理器
如果没有错误的话, 下面开始修改grub配置文件(不要告诉我你用的lilo)
在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.18 (这时候你的/boot下会生成一个initrd-2.4.18.img,并且你的grub.conf文件也作了相应更改)
# df  (查看根目录在那个分区,下一步要用到。注意,这里根分区不时boot的那个50M的分区,而一般是你最大的那个分区,也就是“/”,千万不要搞错哦。我的为 /dev/hda2)
# vi /grub/grub.conf  
进入grub.conf文件,找到如下信息:
default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.1
        root (hd0,0)
        kernel /vmlinuz-2.6.18 ro root= LABEL=/
        initrd /initrd-2.6.18.img
做两处修改:
(1) 将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入2.4内核)
(2) 将kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是)
此步很重要,修改错误将可能导致进不去系统,我把我修改后的grub.conf文件列出来,不明之处,可以对照修改:
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.1
        root (hd0,0)
        kernel /vmlinuz-2.6.18 ro root=/dev/hda2
        initrd /initrd-2.6.18.img
title Red Hat Linux (2.4.20-
        root (hd0,0)
        kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
        initrd /initrd-2.4.20-8.img


12,OK,大功告成!赶快重启,看看升级后的2.6内核吧~~~~

你可能感兴趣的:(linux)