最近两天又忙活了一下将虚拟机里的RedHat9的内核从2.4.20-8升级到2.6.20.1,经过各种收集资料,各种命令学习(之前的图形界面让我弄坏了,只能输命令)和不懈的努力,最终升级成功了。现在将搜集到的一些重要资料以及我在这过程中的一些操作写下来,以备以后再用。
一、 软件配置
虚拟机:7.1.2 build-301548
操作系统:RedHat9
内核版本:linux-2.4.20-8
二、 升级内核
前期准备:
1.去linux的官方网站上下一个linux 2.6的内核!http://www.kernel.org;
2.安装一个modules-init-tools-3.0.tar.gz工具包,因为2.4.x的modutils工具包已经不适合新的2.6.x内核,必须将它升级到modele-init-tools工具包。可以到
http://www.kernel.org/pub/linux/utils/kernel/modele-init-tools-3.0.tar.gz下载
3.安装modele-init-tools工具包
#configure –prefix=/
#make moveold (将原来的工具程序改名,这样还可继续使用原来的2.4.x内核)
#make all install
#./generate-modprobe.conf /etc/modprobe.conf(生成2.6.x内核的新配置文件)
4.安装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 device-mapper-1.00.19-2.i386.rpm
#rpm -ivh –nodeps –force lvm2-2.00.25-1.01.i386.rpm
#rpm -ivh –nodeps –force mkinitrd-4.1.18-2.i386.rpm
以上文件在Linux公社的1号FTP服务器里,下载地址:
FTP地址:ftp://www.linuxidc.com
用户名:www.linuxidc.com
密码:www.muu.cc
在 2011年LinuxIDC.com\3月\SCSI+VMware+RedHat内核升级总结
下载方法见 http://www.linuxidc.net/thread-1187-1-1.html
5.安装binutils-2.17.tar.gz,(这个是升级虚拟机中的LINUX所必备的),依次执行如下命令:
#tar zxf binutils-2.17.tar.gz
#cd binutils-2.17
#./configure
#make
#make install
该文件的下载地址在Linux公社的1号FTP服务器里。
6.在升级之前,还要确定以下一些软件不低于以下的版本:
Name: Minimum version: How to find version:
Gnu C Compiler 2.95.3 #gcc –version
Gnu Make 3.78 #make –version
binutils 2.12 #ld -v
util-linux 2.10o #fdformat –version
module-init-tools 0.9.9 #depmod -V
procps 2.0.9 #ps –version
(参见“Documentation/Change”中的最新更新)
接下来正式开始升级:
1.配置内核
解压内核文件
#tar xzvf linux-2.6.20.tar.gz /usr/src/
清除冗余文件
#cd linux-2.6.20.1
#make mrproper
#make clean
生成Makefile文件,如果已经有Makefile文件了,就可以不做此条命令。
#./configure
开始配置内核
#make menuconfig
关于menuconfig中的配置,详细参考说明在后面日志,以下是几点值得注意:
#make menuconfig后会出现一个图形界面,列出了所有的内核配置选项,其中有几项是必需的,用“Y”键选中:
①“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;
注意,在Vmware下以下选项必须选上,否则编译要出问题:
⑥Device Drivers —>SCSI device support —><*> SCSI disk support
⑦Device Drivers —>SCSI device support —>SCSI low-level drivers —> <*> BusLogic SCSI support
⑧Device Drivers —> Fusion MPT device support —> Fusion MPT (base + ScsiHost) drivers和Fusion MPT misc device (ioctl) driver(这个不确定)。
⑨Device Drivers —> USB support —><*> USB Mass Storage support (*suppor for host-side Usb选上)
⑩Device Drivers —> Networking support —>Ethernet (10 or 100Mbit) —> <*> AMD PCnet32 PCI support
最好把ext3文件系统支持也编译进内核
<*>Ext3 journalling file system support
<*>Ext3 extended attributes
<*>Ext3 POSIX Access Control Lists
<*>Ext3 Security Labels
<*>JBB (ext3) debugging support
注意1: “make dep”这一步在2.6已经不需要了.
2.开始编译内核文件
将终端控制台当前目录置为/usr/src/linux-2.6.20.1(即内核文件夹目录),打入以下命令#make
#make modules
#make modules_install
注意2:#make命令快要结束的时候可能会出现以下错误提示
OBJCOPY arch/i386/boot/compressed/vmlinux.bin
BFD: Warning: Writing section `.bss’ to huge (ie negative) file offset 0xc0277000.
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: *** Error 2
解决办法:
在arch/i386/Makefile里面做一些修改:
将OBJCOPYFLAGS改成如下的:
OBJCOPYFLAGS := -O binary –change-section-lma .bss-0xc0000000 -R .note -R .comment –S
然后保存退出,重新键入命令make就可以了。
但是,请千万注意,如果没有出现这个错误,就不要更改文件,即先make,看有无错误,如果有,则修改,没有就不修改。
以上三个命令均成功后,要复制一个文件。
#cp/usr/src/linux-2.6.18/drivers/scsi/BusLogic.o一个空格 /lib/modules/2.6.18/kernel/drivers/scsi
这是用于解决SCSI硬盘+VMWARE+RedHat架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将BusLogic.o文件复制过去.(如果不是SCSI硬盘+VMWARE+REDHAT架构中上面的拷贝可以省略)
然后键入命令
#make install
出现以下类似的信息表示正确,如下图:
3.接下来就是做一些相关周边工作了
#cp /usr/src/linux-2.6.20.1/arch/i386/boot/bzImage /boot/vmlinuz-2.6.20.1
#cp /usr/src/linux-2.6.20.1/System.map /boot/System.map-2.6.20.1
#cd /boot
#mkdir backup(备份)
#cp System.map backup
#cp vmlinux backup
#rm -rf System.map(删除原有的内核启动连接)
#rm -rf vmlinux
#ln -s System.map-2.6.20.1 System.map(设置新的内核启动连接)
#ln -s vmlinuz-2.6.20.1 vmlinuz
若你的Linux为GRUB启动,则还要修改相应的启动文件:
#cd /boot
#new-kernel-pkg –mkinitrd –depmod –install 2.6.20
#df(该命令查看根分区,即标识为“/”的分区,看好后要记住它的名字,假设为/dev/sda1)
#vi /boot/grub/grub.conf
在弹出的编辑窗口中,将“default=1”改为“default=0”,并将2.6.20.1那一项里的“kernel”行的“LABEL=/”改为上一步所查看的分区,按我们上一步的假设,改完以后的“kernel”行应该是下面的样子:
kernel /vmlinuz-2.6.20 ro root=/dev/sda1
好了,整个内核升级大功告成!重新启动之后,在操作系统选择栏中会看到如下两项:
Red Hat Linux(2.6.20.1)
Red Hat Linux(2.4.20-8)