Linux内核升级指南

一、升级背景

前段时间公司有个项目用到了短信收发的业务,采购了两台16口的Wavecom USB短信猫设备,服务器操作系统是ReadHat5.4,内核2.6.18,插上设备后,操作系统无法自动识别该设备,原因是没有预装该设备USB转串口的驱动程序,可能是只有这个产品不能识别,因为曾经我用过单口的GSM MODEM短信猫测试,可以自动识别出来。后来从供应商处得到信息,说是他们这个产品比较新,版本低的内核没有预装新的USB转串口驱动程序,但现在2.6.32以上内核都自带了USB转串口的驱动,所以最后通过升级系统内核的方式解决了这个问题。


二、升级测试环境

宿主机:Window xp 

虚拟机:VM8.0.2

OS:CentOS 5.8 Final

内核(升级前):2.6.18

所有操作步聚使用root权限



三、升级步聚

1、下载内核

www.kernel.org下载一个新版本内核源码,当前最新稳定版为3.3.4。这里下载的是:http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.35/linux-2.6.35.13.tar.bz2



2、解压内核文件

linux-2.6.35.13.tar.bz2上传到/usr/local/src目录下,使用tar -jxvf linux-2.6.35.13.tar.bz2命令解压,得到linux-2.6.35.13目录


3、清除文件

cd linux-2.6.35.13(下面所有操作都是在此目录,除非切换了新的目录)

make distclean 

清除以前编译内核生成的所有文件(除了清除可执行文件和目标文件外,configure所产生的Makefile也会清除掉)

如果是第一次编译,这步聚可以省略


4、复制配置文件

将系统默认的内核配置文件复制到linux-2.6.35.13目录下,并命名.config

cp /boot/config-2.6.18-308.el5 .config



5、内核配置(make menuconfig)

内核配置,有三种方式:

a)、make config:基于文本的最为传统的配置界面,不推荐使用

b)、make menuconfig:基于文本选单的配置界面,字符终端下推荐使用。

注意:使用make menuconfig 需要安装ncurses(yum -y install ncurses-devel) ,如果未安装会报如下错误:


解决方式:在联网的情况下,在终端输入yum -y install ncurses-devel,自动安装ncurses-devel包,如下图所示:


c)、make xconfig:基于图形窗口模式的配置界面,Xwindow下推荐使用

注意:如果要用make xconfig,则要先安装QT3开发包,并配置。如果未安装会报如下错误:


解决方案:安装QT3开发包,再执行make xconfig。

1)、以make menuconfig为例配置内核编译环境,在终端输入make menuconfig,进入如下图所示界面:


2)、在上图,用上下键移动到菜单倒数第二项(Load an Alternate Configuration File),再用左右键移动到(Select),按回车进入下图界面:


3)、在上图,移动光标至(OK),按回车键,保存配置文件。回到下图所示界面:


4)、在上图中,用上下键移动到菜单最后一项(Save an Alternate Configuration File),用左右键移动到(Select),按回车键,保存配置文件。


5)、选中(Exit),按回车键,退出配置。


6、修改.config配置文件

在.config文件搜索CONFIG_SYSFS_DEPRECATED_V2,会发现# CONFIG_SYSFS_DEPRECATED_V2 is not set这一行,将该行修改为CONFIG_SYSFS_DEPRECATED_V2=y。假如不修改该行,在升级重新启动后会报如下的错,导致启动失败:

Volume group "VolGroup00" not found
Unalbe to access resume device (/dev/VolGroup00/LogVol00)
mount: could not find filesystem '/dev/root'
setuproot:moving /dev failed: No such file or directory
setuproot:error mounting /proc: No such file or directory
setuproot:error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic - not syncing:Attempted to kill init!

7、编译内核

make all

大概需要30至60分钟左右,具体时间看机子的性能


8、编译模块

make modules_install


9、安装

make install


10、修改initrd文件

假如升级重启后会报“insmod: error inserting ‘/lib/dm-region-hash.ko’: –1 File exits”错误,这是由于initrd里面重复加载dm-region-hash.ko这个模块了,因此需要修改生成的initrd文件(不是所有的机器都会出现这个错),修改的方式如下:

a)、解压initrd文件
#cp /boot/initrd-2.6.35.13.img /tmp
#cd /tmp
#ls
initrd-2.6.35.13.img
#mkdir newinitrd
#cd newinitrd
#zcat ../initrd-2.6.35.13.img | cpio -i
#ls



b)、编辑init文件,删除重复中的其中两行

c)、重新打包内核文件
#find . | cpio -c -o > ../initrd
#cd ..
#gzip -9 < initrd > initrd-2.6.35.13.img 

d)、将内核文件( initrd-2.6.35.13.img)重新复制到/boot目录下

#cp  initrd-2.6.35.13.img /boot


11、修改grub.conf,让引导程序默认从新的内核启动

vi /boot/grub/grub.conf

grub.conf文件如下图所示:

将上图中将的default=1改成default=0


12、重启系统

#uname -r

2.6.35.13


posted @ 2012-04-29 14:48  奋斗+坚持  阅读(649)  评论(0编辑  收藏  举报