序言
由于开发环境需要在linux-2.6内核上进行,于是准备对我的虚拟机上的Linux系统升级。没想到这一弄就花了两天时间(反复装系统,辛苦啊~~),总算把Linux系统从2.4.20-8内核成功升级到了2.6.24内核。
网上虽然有很多介绍Linux内核升级的文章,不过要么过时,下载链接失效;要么表达不清,不知所云;更可气的是很多文章在转载过程中命令行都有错误。刚开始我就是在这些“攻略”的指点下来升级的,以致于浪费了很多时间。
现在,费尽周折,升级成功,心情很爽,趁性也来写个“升级攻略”吧!于是特意又在虚拟机上重新安装一个Linux系统,再来一次完美的升级,边升级边记录这些步骤,写成一篇Linux内核升级记实录(可不是回忆录啊!),和大家一起分享~~!
一、准备工作
首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。
启动Linux系统,并用根用户登录,进入终端模式下。
1、查看Linux内核版本
#uname-a
如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是2.4.x,那恭喜你,闯关通过,赶快进行下一步。
2、下载2.6内核源码
下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2
3、下载内核升级工具
(1)下载module-init-tools-3.2.tar.bz2
http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2
(2)下载mkinitrd-4.1.18-2.i386.rpm
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm
(3)下载lvm2-2.00.25-1.01.i386.rpm
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm
(4)下载device-mapper-1.00.19-2.i386.rpm
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm
(2.6.18内核和这4个升级工具我都有备份,如果以上下载地址失效,请到http://www.piaoyang.org/guestbook留下你的邮箱,我给你发过去)
二、配置工作
好啦,2.6内核和4个升级工具都下载完了(少一个也不行,如果没有下载齐全,请不要尝试下面的步骤,升级是不会成功的),下面回到Linux系统中开始配置工作吧。
4、将下载好的内核源码包和4个升级工具都拷贝到/usr/src文件夹下。怎么拷贝就不用我教了吧~~~~不会拷贝的去撞墙吧!~~呵呵!
5、拷贝完毕,开始解压新内核,具体操作请依次执行以下命令:
#cd/usr/src(进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令)
#rm–rflinux(删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过)
#tarjvxflinux-2.6.24.tar.bz2(解压新内核)
#ln-slinux-2.6.24 linux(重新生成linux文件夹)
6、安装module-init-tools工具
在/usr/src目录下,依次执行下列命令:
#tarjvxfmodule-init-tools-3.2.tar.bz2(解压module-init-tools)
#cdmodule-init-tools-3.2(由/usr/src目录进入module-init-tools目录下)
#./configure--prefix=/
#makemoveold
#makeallinstall
#./generate-modprobe.conf/etc/modprobe.conf
7、安装另外三个升级工具
回到/usr/src目录下,依次执行下列3个命令来安装另外三个升级工具:
#rpm-ivh--nodepsmkinitrd-4.1.18-2.i386.rpm(注意,这里一定要加入--nodeps参数,下同)
#rpm-ivh--nodepslvm2-2.00.25-1.01.i386.rpm
#rpm-ivh--nodepsdevice-mapper-1.00.19-2.i386.rpm
如果不更新以上几个升级包,在后面编译内核时会提示以下错误:
mkinitrdfailed
make[1]:***[install]Error1
make:***[install]Error2
8、配置内核选项。有点繁琐,~~希望一次成功哦~~。
#cdlinux-2.6.24 (进入到/usr/src/linux-2.6.18目录下)
#makemrproper(该命令可确保源代码目录下没有不正确的.o文件)
#makemenuconfig(配置内核各选项)
此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):
(1)LoadableModulesupport选项中,选上“Moduleunloading”和“Automatickernelmoduleloading”这两项;
(2)DeviceDrivers--->BlockDevices中选上“Loopbackdevicesupport”;
DeviceDrivers--->Multi-devicesupport(RAIDandLVM)处要选上“devicemappersupport”;
DeviceDrivers--->Graphicssupport,一定要选上“Supportforframebufferdevices”;
DeviceDrivers--->USBsupport--->选上“USBMassStoragesupport”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)
DeviceDrivers--->;Networkdevicesupport--->Ethernet(10or100Mbit)---><*>AMDPCnet32PCIsupport
(3)Filesystem--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)
Secondextendedfssupport
Ext2extendedattributes
Ext2POSIXAccessControlLists
Ext2SecurityLabels
Ext3journallingfilesystemsupport
Ext3extendedattributes
Ext3POSIXAccessControlLists
Ext3SecurityLabels
JBB(ext3)debuggingsupport
Filesystem--->DOS/FAT/NTFilesystems--->选上“NTFSfilesystemsupport”;
注意:
ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:
kernelpanic:noinitfound,trypassinginit=optiontokernel.....
或者是:
VFS:Cannotopenrootdevice"hdxy"orunknow-block(0,0)
Pleaseappendacorrect"root="bootoption
kernelpanic:VFS:Unabletomountrootfsonunknown-block(0,0)
或者是:
mount:error19mountingext3
pivotroot:pivot_root(/sysroot,/sysroot/initrd)failed:2
umount/initrd/procfail:2
Freeingunusedkernelmemory:244kfreed
Kernelpanic–notsyncing:Noinitfound.Trypassinginit=optiontokernel
(我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了~~~如果依照本文做完所有步骤,当你重启Linux系统后,若不幸进不去2.6.18内核,你会发现你的出错信息就是上面三种了~~~哈!)
(4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:
DeviceDrivers---><*>SCSIdevicesupport(此项不选的话,下面两项就选择不上)
DeviceDrivers---><*>SCSIdevicesupport---><*>SCSIdisksupport
DeviceDrivers---><8>SCSIdevicesupport--->SCSIlow-leveldrivers---><*>;BusLogicSCSIsupport
三、编译工作
OK,繁杂的配置工作完成了,至此,编译前的准备工作都做好了!
9、开始编译啦……
在/usr/src/linux-2.6.24目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!
#makedep(建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)
#makeclean(清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过)
#makebzImage(注意大小写。这一步才是真正编译内核)
内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用 makezImage编译,内核很大的话,系统会提示你使用makebzImage命令来编译,所以我直接用makebzImage来编译。
#makemodules(编译可加载模块)
#makemodules_install(安装可加载模块)
安装成功后,系统会在/lib/modules目录下生成一个2.6.24子目录,里面存放着新内核的所有可加载模块。
#makeinstall(安装新内核)
注意:
makeinstall的时候可能会出现如下错误信息:
NomoduleBusLogicfoundforkernel2.4.12
mkinitrdfailed
此问题一般只出现在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
不过别忘记,复制过后再执行一下makeinstall。这一步若卡住了,下面的都无法进行,如果看本文档还是没有解决问题,就来我的网上留言本求助吧,进http://www.piaoyang.org,点“留言本”即可,我会及时看到你的求助信息的。
四、启动新内核
10、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:
#cp/usr/src/linux-2.6.24/arch/i386/boot/bzImage/boot/vmlinuz-2.6.24
#cp/usr/src/linux-2.6.24/System.map/boot/System.map-2.6.24
#cd/boot(进入boot目录)
#rm–rfSystem.map(删除原来的连接)
#ln–sSystem.map-2.6.24 System.map(重新建立连接)
11、修改Grub启动管理器
如果没有错误的话,下面开始修改grub配置文件(不要告诉我你用的lilo)
在/boot目录下,执行以下命令:
#new-kernel-pkg--mkinitrd--depmod--install2.6.24 (这时候你的/boot下会生成一个initrd-2.4.24.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
titleRedHatLinux(2.6.24)
root(hd0,0)
kernel/vmlinuz-2.6.24 roroot=LABEL=/
initrd/initrd-2.6.24.img
做两处修改:
(1)将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入2.4内核)
(2)将kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是)
此步很重要,修改错误将可能导致进不去系统,我把我修改后的grub.conf文件列出来,不明之处,可以对照修改:
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
titleRedHatLinux(2.6.24)
root(hd0,0)
kernel/vmlinuz-2.6.24 roroot=/dev/hda2
initrd/initrd-2.6.24.img
titleRedHatLinux(2.4.20-8)
root(hd0,0)
kernel/vmlinuz-2.4.20-8roroot=LABEL=/
initrd/initrd-2.4.20-8.img
12,OK,大功告成!赶快重启,看看升级后的2.6内核吧~~~~
后记:
Linux 内核升级和编译,老掉牙的话题了,网上相关的文章不计其数。然后,这么多的文章,却没有一篇让我顺利的升级成功。经过两天的体验,我深切的感受到,对于像 我这样的新手来说,第一次升级和编译Linux内核,真是一项艰巨的任务。好在没有失去耐心,经过多篇文章的比对和自己的琢磨,一次次的修正,终于正确升 级、编译成功。总结这两天的感受,那就是“痛,并快乐着”!如果你照着这些步骤一路下来的话,仍然没有成功;那么我可以告诉你两点:一是,不要怀疑我的步 骤有问题,因为不光是我,我的同事照我的这篇文档也一次成功;二是,你可以到我的留言本http://www.piaoyang.org/guestbook给我留言,我会尽力解答你的问题。以此拙作,希望能给大家带去些微的帮助。