这篇文章记录了我在VMWare下将Linux内核从2.4.20-8升级到2.6.13-4的整个过程。其实网上早有这样的文章,只是针对性不是太强,升级内核之后出现不能挂载CDROM和RPM不能使用等问题。如果你也有类似的问题,兴许你可以从这篇文章中找到答案。
环境:
硬件平台:VMWare 4.5
操作系统:Red Hat Linux
内核版本:2.4.20-8
目标版本:2.6.13-4
废话少说,让我们开始。
1.安装module-init-tools-3.0
下载地址:http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/
我不知道我为什么不能使用module-init-tools-3.1,总之在多次失败的打击之后,我只能选择module-init-tools-3.0。安装命令如下:
tar -jxvf module-init-tools-3.0.tar.bz2
cd module-init-tools-3.0
./configure --prefix=/
make moveold
make all install
./generate-modprobe.conf /etc/modprobe.conf
2.下载并安装device-mapper-1.00.19-2.i386.rpm,lvm2-2.00.25-1.01.i386.rpm以及mkinitrd-4.1.18-2.i386.rpm
rpm -ivh device-mapper-1.00.19-2.i386.rpm --nodeps
rpm -e lvm-1.0.3-12 --nodeps
rpm -e mkinitrd-3.4.42-1 --nodeps
rpm -ivh lvm2-2.00.25-1.01.i386.rpm --nodeps
rpm -ivh mkinitrd-4.1.18-2.i386.rpm --nodeps
记得删除前用rpm -q查一下你操作系统上的已安装版本。如果不更新以上几个包在make install时会提示以下错误:
mkinitrd failed
make[1]: *** [install] Error 1
make: *** [install] Error 2
3.编译内核
下载内核:到http://www.kernel.org/pub/linux/kernel/v2.6/上下载linux-2.6.13.4.tar.bz2,然后运行如下命令:
tar -jxvf linux-2.6.13.4.tar.bz2
mv linux-2.6.13.4 /usr/src
cd /usr/src/linux-2.6.13.4
make menuconfig
这一步你可以选择你需要将哪些功能编译成模块,哪些是需要直接编译进内核的。一般来说,下面几个步骤是必须的:
A.Device Drivers->SCSI device support-><*>SCSI device support
B.Device Drivers->SCSI device support-><*>SCSI disk support
C.Device Drivers->SCSI device support->SCSI low-level drivers-><*>BusLogic SCSI support
如果这几项不选,等编译完成后重启后会发现系统会提示:No module BusLogic found for kernel的错误,然后死掉
D.File systems-><*>Ext3 journalling file system support
E.File systems->[*]Ext3 Security Labels
F.File systems->[*]JBD (ext3) debugging support
如果这几项不选则重启系统后会提示:Mount: error 19 mounting ext3
G.Device Drivers->Network device support->Ethernet (10 or 100Mbit)-><*>AMD PCnet32 PCI support
如果这一项不选网卡不能正常工作
H.Device Drivers->ATA/ATAPI/MFM/RLL support-><*>Include IDE/ATAPI CDROM support
如果这一项不选则升级内核后无法挂载CDROM(根据你的CDROM类型自行选择)
终于可以编译了!运行:
make modules_install
make install
即完成整个内核的编译过程。
4.善后工作
内核编译完成后重启系统,发现你有两个内核可以选择了,选择刚才编译好的内核进去,发现rpm命令不能用了,这个可以通过export LD_ASSUME_KERNEL=2.2.5来解决。我一般是将其放到/etc/profile中。另外,IPTables,USB等模块在系统Load的时候失败,你可以按照你的需求再去仔细定制内核。