2009-03-01 21:43
PS:我自己也在网上找了好久,才一步步搞过来,搞了6次,最后一次终于可以了。之前是因为按照网上的做法没有成功,后来百度了很久才发现软件包没有全。(http://topic.csdn.net/u/20080515/22/89cb144a-e871-4891-af91-ea5c7c6e8c73.html)其中我所用的软件包和本文的版本不一样,为了方便就直接复制了。
软件包:
1、Linux的2.6.18版本内核包(linux-2.6.18.tar.bz2)
2、Modutils 3.2 工具包(module-init-tools-3.2.tar.gz
3、Mkinitrd 4.1.18-2 工具包(mkinitrd-4.1.18-2.i386.rpm)
4、Device Mapper 开发包(device-mapper-1.00.19-2.i386.rpm)
5、LVM 开发包(lvm2-2.00.25-1.01.i386.rpm):Device Mapper依赖该包;
6、Binutils 开发包(binutils-2.17.tar.gz):如升级安装于虚拟机上的Red Hat Linux,则必需该包。
网上很多人都没有装Binutils 开发包因此都会出现错误(之前我也不知道后来在网上百度了很久才找到原因)。如下类似:
Loading BusLogic.o module
No module found in object
insmod:error inserting '/lib/BusLogic.o':-1 Invalid module format
ERROR:/bin/insomd exited abnormally!
Mounting /proc filesystem
Creating block devices
VFS:Cannot open root device "LABEL=/dev/sda2" or unknown-block(0,0)
Please append a correct "root=" boot option
Kernel panic - not syncing:VFS:Unable to mount root fs on unknown-block(0,0)
升级步骤:
1、先安装Modutils 3.2 工具包,将当前目录切换到module-init-tools-3.2.tar.gz的下载目录下,依次执行如下命令:
tar zxf module-init-tools-3.2.tar.gz
cd module-init-tools-3.2
./configure --prefix=/
make moveold(将原来的工具程序改名,这样还可继续使用原来的2.4.x内核)
make all install
./generate-modprobe.conf /etc/modprobe.conf(生成2.6.x内核的新配置文件)
2、安装Mkinitrd 4.1.18-2 工具包,将当前目录切换到mkinitrd-4.1.18-2.i386.rpm、device-mapper-1.00.19-2.i386.rpm和lvm2-2.00.25-1.01.i386.rpm的下载目录(三个文件在同一目录)下,依次执行如下命令:
rpm -ivh --nodeps --force lvm2-2.00.25-1.01.i386.rpm
rpm -ivh --nodeps --force device-mapper-1.00.19-2.i386.rpm
rpm -ivh --nodeps --force mkinitrd-4.1.18-2.i386.rpm
3、将当前目录切换到binutils-2.17.tar.gz下载目录,依次执行如下命令:
tar zxf binutils-2.17.tar.gz
cd binutils-2.17
./configure
make
make install
4、开始编译新内核
将当前目录切换到linux-2.6.18.tar.bz2下载目录,依次执行如下命令:
cp ./linux-2.6.18.tar.bz2/usr/src
tar zjvf linux-2.6.18.tar.bz2
cd linux-2.6.18
make mrproper
make menuconfig
4.1、配置内核
此时时会出现一个图形界面,列出了所有的内核配置选项,选中:
“Loadable Module support”中,选“Module unloading”和“Automatic kernel module loading”;
“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;
“Device Drivers”→“Network device support ”→“Ethernet (10 or 100Mbit)”中,选“AMD PCnet32 PCI support”;
由于Red Hat 9.0使用ext3作为文件系统,故“File System”中的所有关于ext2、ext3的选项必选;
由于在VMware虚拟机下编译内核,SCSI硬盘,因此以下三个选项必选:
“Device Drivers”→“SCSI device support”;
“Device Drivers”→“SCSI device support”→“SCSI disk support”;
“Device Drivers”→“SCSI device support”→“SCSI low-level drivers”→“BusLogic SCSI support”;
4.2、设置完成!开始进行真正的内核编译工作。依次执行如下命令:
make
make modules
make modules_install
cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi
make install
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
rm -rf System.map(删除原有的内核启动连接)
ln -s System.map-2.6.18 System.map(设置新的内核启动连接)
设置GRUB启动,修改相应的启动文件:
如果没有错误的话, 下面开始修改grub配置文件(不要告诉我你用的lilo)
在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.18 (这时候你的/boot下生成一个initrd-2.6.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.18)
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.18)
root (hd0,0)
kernel /vmlinuz-2.6.18 ro root=/dev/sda3
initrd /initrd-2.6.18.img
title Red Hat Linux (2.4.20-8)
root (hd0,0)
kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
initrd /initrd-2.4.20-8.img
最后就大功告成!赶快重启,看看升级后的2.6内核吧!
blog.csdn.net/xqt8888/archive/2007/09/21/1795234.aspx博客中这个说明很好:
# 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。
(如果make menuconfig时,把BusLogic模块选成M--Module模式--就不会出现这个提示。)
四、启动新内核
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.12.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.18)
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.18)
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-8)
root (hd0,0)
kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
initrd /initrd-2.4.20-8.img
12,OK,大功告成!赶快重启,看看升级后的2.6内核吧~~~~