RedHat AS4.2(内核2.6.9-22)升级到 (2.6.18)
一、编译环境
内核:原版本(RedHat AS4.2) (内核2.6.9-22)目标版本:2.6.18
我这里的所有环境都是as4.2的版本没有做过任何升级。我也尝试过升级gcc到4.5来升级内核到2.6.33但是gcc4.5没有升级成功。只好老老实实的升级到2.6.18
二、编译过程
1.到www.kernel.org下载内核linux-2.6.18.tar.gz
2.cp linux-2.6.18.tar.gz /usr/src //将下载好的内核拷贝到/usr/src目录下
3.tar zvxf linux-2.6.18.tar.gz //解压该文件
4.cd linux-2.6.18 //到该文件的目录
5.ln -s linux-2.6.18 linux //建立符号连接,不这样做,也可以,目的是使目录更好记,方便拼写
6.cd linux //到该文件的目录,也就是到linux-2.6.18目录下
7.make mrproper //配置前的准备,第一次升级内核可以不执行该命令
8.make menuconfig //可以更改,默认也可以,但是必须选择保存
9.make
10.make modules_install //模块安装
11.make install //安装
12、将2.9.18内核的启动启设置为默认启动。
以下是我的启动文件内容:vi /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/hda
default=0 //这里默认是1 修改为0后就可以使用2.6.18内核了。
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux AS (2.6.18)
root (hd0,0)
kernel /vmlinuz-2.6.18 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18.img
title Red Hat Enterprise Linux AS (2.6.9-22.EL)
root (hd0,0)
kernel /vmlinuz-2.6.9-22.EL ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.9-22.EL.img
然后就reboot吧。
OK!!
以下错误本人在安装过程中没有遇到。但如果遇到可以借鉴一下。
四、内核编译中遇到的错误以及解决之道
错误一:
错误提示:Kernel panic—not syncing :vfs:unable to mount root fs on unkown—block (0,0)
错误分析:initrd-*.*.img文件有问题;未能成功挂载真正的根文件系统。
解决方法:请你确认执行了make install 命令,我就因为没有执行这条命令而浪费了一周时间(后面专门详细说明)
错误二:
错误提示:Create root device
mkrootdev: label / not found
Mounting root filesystem
mount :error 2 mounting ext3
mount :error 2 mounting none
switchroot mount failed:22
umount /initrd/dev failed :2
kernel panic-not synicncing :Attempted to kill init .
(错误提示是不是有点长,貌似错误很多哦,其实可能就一个原因导致)
错误分析:1、根文件系统找不到挂载点 ,修改grub.conf文件为 root=/dev/ *
2、硬盘驱动未能找到,请看看你机器的硬盘是都是 SATA盘,是的话同样恭喜你本文对你有帮助。
解决方法:
1.、修改grub.conf文件试试,具体修改点 root=/dev/* * 指的是原系统中/分区的挂载点。修改后,重启进入新内核系统,估计十有八九又会遇到如下错误提示:
Mounting root filesystem
mount :error 6 mounting ext3
mount :error 2 mounting none
switchroot mount failed:22
umount /initrd/dev failed :2
kernel panic-not synicncing :Attempted to kill init .
如果不幸被我言中,请接着往下看。
2、硬盘驱动未能成功找到,SCSI驱动有问题。我在内核编译升级中遇到这个问题,对内核选项选了又选,方法试了很多种,总经理都亲自来做了几次,错误依旧。最终让我无意中选正确选项,成功升级内核。
具体选项是:Device Drivers--------SCSI device support------SCSI low-level drivers----Serial ATA(SATA)support 选为 M,然后再选择相应的子选项,我选择了Intel PIIX/ICH SATA support (new)后机器就成功启动了。
错误三:
错误提示:Enforcing mode requested but no policy loaded. Halting now.
kernel panic - not syncing: Attenpted to kill init!
错误分析:原内核中启用了selinux,新内核未选择selinux的选项,不能成功启动。
解决方法:修改grub.conf文件,在root=LABEL=/ 后加入 enforcing=0