一、升级背景
前段时间公司有个项目用到了短信收发的业务,采购了两台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