这个升级过程不局限于从2.4.20-8升级到2.6.20版本,可供将内核从2.4.x升级到2.6.x的用户使用。
首先,要做好准备工作,你的手中至少要有以下四套软件包:
1、Linux的2.6.20版本内核包(linux-2.6.20.tar.gz):作用就不多说了,自然是内核的源码包;
2、Modutils 3.2 工具包(module-init-tools-3.2.tar.gz):原2.4.x下的工具包不适用于2.6.x,必须升级;
3、Mkinitrd 4.1.18-2 工具包(mkinitrd-4.1.18-2.i386.rpm):在make install时需要使用该工具;
4、Device Mapper 开发包(device-mapper-1.00.19-2.i386.rpm):Mkinitrd工具包依赖该包;
5、LVM 开发包(lvm2-2.00.25-1.01.i386.rpm):Device Mapper依赖该包;
6、Binutils 开发包(binutils-2.17.tar.gz):如升级安装于虚拟机上的Red Hat Linux,则必需该包。
呵呵,准备就绪了吗?在这里我都没有给出下载地址,是因为不同的机器在不同的地域,不同的网络上,可能会有下载速度的较大差异。以前我用别人提供的下载地址,下载的都十分缓慢。所以,我在这里告诉大家如何快速的去获得这些工具包:一定要到Google(推荐)或BAIDU上搜索,搜索的时候要用文件名全名进行搜索,假如要搜索LVM 开发包,那么填写关键字时要写lvm2-2.00.25-1.01.i386.rpm,然后在找到的结果中选择以“Index of ……”为标题的网页。这样的网页会有很多,选择的时候要根据每一条记录最后一行给出的域名,选出离自己地理位置最近的网页。比如说“*.ch.kernel.org”之类的域名下的网页。这样可以有效保证下载速度,不会让你一边玩着游戏,一边升级内核,等软件包都下载完了,心思也就全跑到游戏上了。:)
现在开始安装工具包吧!
首先安装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内核的新配置文件)
下面安装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
在虚拟机上运行Red Hat Linux 9.0或安装内核到最后出现bzImage编译错误的情况,则必须安装Binutils 开发包,虚拟机上该类型的错误消息一般为:
OBJCOPY arch/i386/boot/compressed/vmlinux.bin
BFD: Warning: Writing section `.bss' to huge (ie negative) file offset 0xc025d000.
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: *** [bzImage] Error 2
将当前目录切换到binutils-2.17.tar.gz下载目录,依次执行如下命令:
tar zxf binutils-2.17.tar.gz
cd binutils-2.17
./configure
make
make install
好了,所有安装包均已齐备,现在开始编译新内核吧!
将当前目录切换到linux-2.6.20.tar.gz下载目录,依次执行如下命令:
cp ./linux-2.6.20.tar.gz /usr/src
tar zxf linux-2.6.20.tar.gz
cd linux-2.6.20
make mrproper
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;
“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”;
对于要求系统提供比较多样的网络协议的开发人员,还应在“Network Support”中进行相应设置。
设置完成!开始进行真正的内核编译工作。依次执行如下命令:
make
make modules
make modules_install
make install
如果是VMware虚拟机+SCSI硬盘的用户,在make install之前,还要执行以下命令:
cp /usr/src/linux-2.6.20/drivers/scsi/BusLogic.o /lib/modules/2.6.20/kernel/drivers/scsi
内核编译到此就完全结束了,若想要成功启动内核,还要做一些后续的工作。依次执行如下命令:
cp /usr/src/linux-2.6.20/arch/i386/boot/bzImage /boot/vmlinuz-2.6.20(使用VMware的用户必需)
cp /usr/src/linux-2.6.20/System.map /boot/System.map-2.6.20
cd /boot
rm -rf System.map(删除原有的内核启动连接)
ln -s System.map-2.6.20 System.map(设置新的内核启动连接)
若你的Linux为GRUB启动,则还要修改相应的启动文件:
cd /boot
new-kernel-pkg --mkinitrd --depmod --install 2.6.20
df(该命令查看根分区,即标识为“/”的分区,看好后要记住它的名字,假设为/dev/sda2)
gedit /boot/grub/grub.conf
在弹出的编辑窗口中,将“default=1”改为“default=0”,并将“kernel”行的“LABEL=/”改为上一步所查看的分区,按我们上一步的假设,改完以后的“kernel”行应该是下面的样子:
kernel /vmlinuz-2.6.20 ro root=/dev/sda2
由于本人使用虚拟机安装,所以上面的内容可能会与实环境有些出入,但蓝色粗体部分一定是这样的。