RedHat9.0内核从2.4.20-8升级到2.6.18总结
第一次做内核升级,网上查了不少资料。但都有些许错误,经过整合总结,最终在自己的电脑上成功实现内核升级(Vmware6.0下
RedHat9.0内核从2.4.20-8升级到2.6.18),先将具体步骤晒出来供大家参考
一、准备工作
打开虚拟机,启动linux系统,并用根用户(root)登陆。
1、查看linux内核版本
若系统自动进入命令行模式,可通过输入#uname -a查看现有内核版本
若系统自动进入图形化界面,可通过Ctrl+Alt+Backspace进入命令行模式,或者直接在系统工具中选择终端,然后输入
#uname -a
若屏幕显示的是2.6x,说明说明你的已经是2.6的内核,也用不着看我的下文了;如果显示的是2.4.x,那恭喜你,赶快进行下一
步。
2、下载内核源码及升级工具
这里注意要从虚拟机的linux系统下登录该网页,并将下载目录设为/usr/src,如果不是该目录也可以,但后面要将源码及下载
工具拷贝到此目录下,不如现在就设好吧~
升级工具和内核源码也可以在我的网盘里下 地址如下:
1。内核源码: linux-2.6.18.tar.bz2.zip #
2。升级工具
(1)下载module-init-tools-3.2.tar.bz2 #
(2)下载mkinitrd-4.1.18-2.i386.rpm #
(3)下载lvm2-2.00.25-1.01.i386.rpm #
(4)下载device-mapper-1.00.19-2.i386.rpm #
2.1 下载2.6内核源码
下载地址:
2.2 下载内核升级工具(必须安装否则将不成功虚拟机下共5个工具安装包)
(1)下载module-init-tools-3.2.tar.bz2
(2)下载mkinitrd-4.1.18-2.i386.rpm
(3)下载lvm2-2.00.25-1.01.i386.rpm
(4)下载device-mapper-1.00.19-2.i386.rpm
以上工具包可到上搜索下载(截图如下)
Please enter searched expression_r
Advanced RPM Search
--------------------------------------------------------------------------------
Search for rpms which contain given file name (1) e.g. libhistory.so
New look for FTP search.
Search for rpms by name.
Search for rpms by name in FTP world resources (2) e.g. rpm-4*i386.rpm
(5)Binutils 开发包(binutils-2.17.tar.gz):如升级安装于虚拟机上的Red Hat Linux,则必需该包。下载地址:
二、配置工作
将2.6.18内核及5个升级工具全部下载完毕后,就可以进入Linux系统配置工作了。
1、若2.6.18内核及5个升级工具不在/usr/src文件夹下,应将其拷贝到该目录下。
2、拷贝完毕后,开始解压新内核,具体操作请依次执行以下命令:
# cd /usr/src (进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令)
# rm –rf linux (删除linux文件夹。如果内核先前从未编译过,则没有这个文件夹,此命令行可略过 保险起见,可通过 # ls
命令查看是否有linux该文件夹)
# tar jvxf linux-2.6.18.tar.bz2 (解压新内核)
# ln -s linux-2.6.18 linux (重新生成linux文件夹)
3、安装module-init-tools工具包
在/usr/src目录下,依次执行下列命令:
# tar jvxf module-init-tools-3.2.tar.bz2 (解压module-init-tools)
# cd module-init-tools-3.2 (由/usr/src目录进入module-init-tools目录下)
#./configure --prefix=/
# make moveold(将原来的工具程序改名,这样还可继续使用原来的2.4.x内核)
# make all install
#./generate-modprobe.conf /etc/modprobe.conf
4、安装另外三个升级工具
回到/usr/src目录下,依次执行下列3个命令来安装另外三个升级工具:
# rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm (注意,这里一定要加入--nodeps参数,下同)
# rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm
# rpm -ivh --nodeps device-mapper-1.00.19-2.i386.rpm
如果不更新以上几个升级包,在后面编译内核时会提示以下错误:
mkinitrd failed
make[1]: *** [install] Error 1
make: *** [install] Error 2
5、安装binutils-2.17.tar.gz工具包,依次执行如下命令:
# tar zxf binutils-2.17.tar.gz
# cd binutils-2.17
# ./configure
# make
# make install
网上很多人没有装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)
6、配置内核选项。
# cd linux-2.6.18 (进入到/usr/src/linux-2.6.18目录下)
# make mrproper (该命令可确保源代码目录下没有不正确的.o文件)
# make menuconfig (配置内核各选项)
此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。大多数选
项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):(注意:前面的符号可能不用
有M等等,这里提及的要全部宣称*,除非无法转化成*,则保留原来的格式,但是一定要选中)
(1)Loadable Module support选项中,选“Module unloading”和“Automatic kernel module loading”这两项;
(2)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 Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选
吧。我的是在虚拟机中,用不着了,但是可能我选的比较乱,在后来linux2.6.18启动时有一些关于usb的启动项failed,但不影响我
使用)
Device Drivers --->; Network device support --->;Ethernet (10 or 100Mbit) --->; <*>; AMD PCnet32 PCI support
(3) File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)
Second extended fs support
Ext2 extended attributes
Ext2 POSIX Access Control Lists
Ext2 Security Labels
Ext3 journalling file system support
Ext3 extended attributes
Ext3 POSIX Access Control Lists
Ext3 Security Labels
JBB (ext3) debugging support
File system--->DOS/FAT/NT Filesystems --->选上“ NTFS file system support”;
File Systems --> Miscellaneous filesystems ---><*> Compressed ROM file system support (cramfs)
注意:
由于Red Hat 9.0使用ext3作为文件系统,ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译
进内核,在你 reboot时机器就会当掉,出现如下错误信息:
kernel panic : no init found ,try passing init = option to kernel.....
或者是:
VFS:Cannot open root device "hdxy" or unknow-block(0,0)
Please append a correct "root=" boot option
kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
或者是:
mount: error 19 mounting ext3
pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2
umount /initrd/proc fail: 2
Freeing unused kernel memory: 244k freed
Kernel panic – not syncing: No init found. Try passing init = option to kernel
(4) 由于在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”;
三、编译工作
设置完成!开始进行真正的内核编译工作。依次执行如下命令:
在/usr/src/linux-2.6.18目录下,执行以下命令即可编译。编译需要一段时间,我的电脑很慢。。。
# make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)
# make clean (清除内核编译的目标文件)
# make bzImage (注意大小写。这一步才真正编译内核)
内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,
内核很大的话,系统会提示你使用make bzImage命令来编译,所以我直接用make bzImage来编译。
然后将目录切换到/usr/src/linux下执行以下命令(我在/usr/src/linux-2.6.18目录下执行出现错误)
# make modules (编译可加载模块)
# make modules_install (安装可加载模块)
安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。
cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi
如果不执行上一步复制操作,在make install时会出现如下错误信息:
No module BusLogic found for kernel 2.4.12
mkinitrd failed
此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的
Buslogic模块即使静态编译进内核也不行)。其解决方式就是直接将BusLogic.o文件复制过去。
# make install (安装新内核)
四、启动新内核
1、将新内核和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 (重新建立连接)
2、修改Grub启动管理器
如果没有错误的话, 下面开始修改grub配置文件
在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.18 (这时候你的/boot下生成一个initrd-2.6.18.img,并且你的grub.conf
也作了相应更改)
# df (查看根目录在那个分区,下一步要用到。注意,这里根分区不是boot的那个50M的分区,而一般是你最大的那个分区,也就
是”/”,千万不要搞错。我的为 /dev/sda2)
# vi /grub/grub.conf
进入grub.conf文件,做两处修改:
(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/sda2
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
3、OK,大功告成!重启后即可看到升级后的2.6内核了。
阅读(2626) | 评论(2) | 转发(0) |