一、软件下载
启动Linux系统,并用根用户登录,进入终端模式下。
①、查看Linux内核版本
# uname -a
如果显示的是低于你要升级的版本,则可以继续下面的工作。
②、下载Linux2.6内核源代码
download website:http://www.kernel.org/pub/linux/kernel/v2.6/
③、下载软件
下载源码中Document/Changes中要求的版本或更高级的版本,可以通过Document/Changes中个版本要求之后的命令进行查看现有系统的软件版本是否符合。(注:这一点是必须的,否则在编译内核过程中会出现很多的问题!这些软件包很难找的,但是多花点时间是没有问题的)
二、软件升级
①、安装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 # make all install #./generate-modprobe.conf /etc/modprobe.conf
②、安装xxx.rpm包,使用如下命令:
#rpm -ivh xxx.rpm
③、安装xxx.tar.bz2包,使用如下命令:(一般情况)
# tar -zxvf xxx.tar.bz2 # cd xxx # ./configure --prefix=/ (如果目录中有configue文件的话,就先运行这个,否则跳过) # make (编译软件包) # make install(安装软件包)
④、安装e2fsprogs-xxx.tar.bz2包,使用如下命令:(特别注意其和③不一样)
# tar -zxvf e2fsprogs-xxx.tar.bz2 # cd e2fsprogs-xxx # ./congfigure --prefix=/ # make(编译软件包) # make check(本软件包自带测试套件,以确定它是否编译正确。如果你想运行测试套件,执行该命令) # make install(安装本软件包的大部份内容) # make install-libs(安装共享库)
⑤、将内核源码进行解压
将内核源码拷贝到/usr/src下:
# cd /usr/src # rm -fr linux(删除原有的链接文件) # tar -zxvf linux-2.6.xxx.tar.bz2(解压内核源码) # ln -s linux-2.6.x linux(将linux设置为linux-2.6.xxx的链接)
三、配置过程
①、配置内核。
# cd linux-2.6.xxx (进入到/usr/src/linux-2.6.xxx目录下) # make mrproper (该命令可确保源代码目录下没有不正确的.o文件) # make menuconfig (配置内核各选项)
此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):
1)配置Loadable Module support[2.6内核: Enable loadable module support]
--> Module unloading
--> Automatic kernel module loading[2.6内核:可能无此选项]
2)配置Device Drivers
--> Block Devices --> Loopback device support
--> Multi-device support(RAID and LVM) --> device mapper support
--> Graphics support --> Support for frame. buffer devices
--> USB support --> USB Mass Storage support[如果是在实环境中,想要更多USB支持,就全选;在虚拟机中,用不着了]
--> 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
--> Ext3 journalling file system support
--> Ext3 extended attributes
--> Ext2 Security Labels
--> Ext3 POSIX Access Control Lists
--> JBB (ext3) debugging support[2.6内核:可能不存在]
--> DOS/FAT/NT Filesystems --> NTFS file system support
注意:
ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会DOWN掉,出现如下错误信息:
情况一:
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
[我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了。如果依照本文做完所有步骤,当重启Linux系统后,若不幸进不去2.6.xxx内核,将会出现以上三种错误信息]
4)如果在vmware下编译内核,硬盘模式是SCSI,以下选项必选:
Device Drivers
--> SCSI device support --> SCSI disk support
--> SCSI low-level drivers --> BusLogic SCSI support
四、编译过程
①、编译内核
在/usr/src/linux-2.6.xxx目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!
# make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过) # make clean (清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过) # make bzImage (注意大小写。这一步才是真正编译内核) 内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以我直接用make bzImage来编译。 # make modules (编译可加载模块) # make modules_install (安装可加载模块) 安装成功后,系统会在/lib/modules目录下生成一个2.6.xxx子目录,里面存放着新内核的所有可加载模块。 # make install (安装新内核) 注意: make install的时候可能会出现如下错误信息: No module BusLogic found for kernel 2.4.12 mkinitrd failed 此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将BusLogic.o文件复制过去: # cp /usr/src/linux-2.6.xxx/drivers/scsi/BusLogic.o /lib/modules/2.6.xxx/kernel/drivers/scsi
不过别忘记,复制过后再执行一下make install。这一步若卡住了,下面的都无法进行。
五、启动新内核
①、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:
# cp /usr/src/linux-2.6.xxx/arch/i386/boot/bzImage /boot/vmlinuz-2.6.xxx # cp /usr/src/linux-2.6.xxx/System.map /boot/System.map-2.6.xxx # cd /boot (进入boot目录) # rm –rf System.map (删除原来的连接) # ln –s System.map-2.6.xxx System.map (重新建立连接)
②、修改Grub启动管理器
如果没有错误的话, 下面开始修改grub配置文件(不要告诉我你用的lilo)
在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.xxx (这时候你的/boot下会生成一个initrd-2.4.xxx.img,并且你的grub.conf文件也作了相应更改) 注意: # df (查看根目录在那个分区,下一步要用到。注意,这里根分区不是boot的那个50M的分区,而一般是你最大的那个分区,也就是“/”,千万不要搞错。我的为 /dev/hda2) # vi /boot/grub/grub.conf 将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入2.4内核)