http://blog.csdn.net/xyang81/article/details/7522032
前段时间公司有个项目用到了短信收发的业务,采购了两台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.下载一个新版本内核源码,当前最新稳定版为3.3.4。这里下载的是:http://www./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),按回车进入下图界面: 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。假如不修改该行,在升级重新启动后会报如下的错,导致启动失败:
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 L inux2.6.9.42内核升级 在这里且不说版本的不同与区别,它所支持的功能。相信用过LINUX的人都希望自己所用的系统,内核是最新的了。接下来就来就给大家介绍linux2.6.9-42升级linux2.6.26-42的方法。首先来看下当前系统的版本吧: 接下来就开始吧,把所需文件 “ linux-2.6.26.2.tar.bz2 .” 拷贝进 /usr/src目录下来,先进行bzip2 –d linux-2.6.26 tar.bz2解压,然后tar一下。看我操作步骤: 按下回车键,解压完毕就可以进行配置了。现在看看目录下是不是多了个linux-2.6.26.2的目录,那么就#cd linux-2.6.26.2命令进到它下面了。执行#make mrproper命令,为的是清除掉以前升级留下的一些不正确文件。 好了,下面要做的就是拷贝/boot/config- 2.6.26.2.EL里的文件到/usr/src/ linux-2.6.26.2/.config下生成.config文件 确认.config文件存在,那么就来配置内核各个选项吧,键入make menuconfig命令: 出现内核配置工具拦,如图; 选择倒数第二项,加载一个已经存在的配置文件,按下select键。弹出保存文件名为.condig选择OK。 进到主菜单下,看到配置比较多就选择“File sysyems”下。 来做个NTFS格式的加载吧。点住这项选select键。 出现下面这个对话框后,点到末尾按下 ” M ” 键。 出现前面带有<>的两行,按空格键加*号退出并保存。 配置结束了,该是进行编译了,进到下图所示目录,make dep来建立编译时所需要的从属文件,但是以前没进行过升级的话可以省略。 “ make clean ” 来清除下内核编译的目标文件,看到成功,继续输入 ” make bzImage ” ,注意 ” I ”大写,这时候真正的编译才算是开始了。(时间比较长,耐心等待吧) 好了,编译终于算是完成了,功夫不负有心人啊。 下面就进行编译可加载模块了,键入“make modules”命令执行,时间相对也要长些。 看到编译完成。 下面就开始安装可加载模块,输入“make_install”命令。 过段时间后,完成了。进行下一步吧,从图中看到输入的是“make install”,这是加载新内核的命令。 在安装过程中,发出个警告,不要去理会它。是scsi盘加载失败,我们用的是虚拟机吗,所以会报错,但这并不影响内核的升级。 好了,经过编译、安装后终于完成了。但如果认为真正意义上的完成那就错了。重启下系统就会发现,起不来。这是因为刚升级完内核,在启动加载配置文件上还是第一个,这时需要做的就是让系统能找到升级完后的新文件。 那就是“ cd /boot/grub ”命令,查看下“menu.last”就是它了。 V i 编辑器打开,在下图所示红色标记处添加“enforcing=0”然后保存退出,目的是使其强制加载。 重启下系统,选择“Red Hat Enterprise linux AS (2.6.26.2)”看能否启动得了。 经过段时间,系统正常启动。来查看下内核版本。 已经成功升级为2.6.26.2了,实验成功完成了。回过头来总结一下实验也就是配置内核选项和编译两项比较麻烦一点,其它也没什么。 Linux的内核是系统的核心,所以升级内核是Linux系统管理员的一项基本技能,所以我就分享了系统运维实务上的一篇文章,当然我对源文件稍做了一些内容的增加,就是把遇到的问题及解决方案也加上了,希望对各位Linux系统管理员有所帮助! 1.下载内核 cd /usr/src wget linux/kernel/v2.6/linux-2.6.38.tar.gz">http://www./pub/linux/kernel/v2.6/linux-2.6.38.tar.gz tar zxvf linux-2.6.38.tar.gz cd linux-2.6.38 2.下载热点内核标准配置文件 wget http://vbets./files/config mv config .config 3.编译内核 make menuconfig 选中Load an Alternate Configuration File ,然后选择刚下载的。config 另外,要特别选中: 1)、通过make menuconfig选中以下对应的选项 General setup –> [*] enable deprecated sysfs features to support old userspace tools 2)、修改。config文件 修改。config文件中CONFIG_SYSFS_DEPRECATED_V2,将原本被注释掉的 CONFIG_SYSFS_DEPRECATED_V2 改成CONFIG_SYSFS_DEPRECATED_V2=y 注: 修改这项是因为旧版的mkinitrd及其nash在内核没有CONFIG_SYSFS_DEPRECATED_V2参数时默认使用旧版sysfs路径格式,从而在新内核下无法正确访问/sys内的硬盘信息节点。 主要是解决"mount:could not find filesystem '/dev/root'"这样的错误 make bzImage make modules make modules_install make install 4.解压修改内核 cp /boot/initrd-2.6.38.img /tmp cd /tmp/ mkdir newinitrd cd newinitrd/ zcat /initrd-2.6.38.img |cpio -i rm -rf /tmp/initrd-2.6.38.img vi init 找到这2行一样的,去掉1行 echo "Loading dm-region-hash.ko module" insmod /lib/dm-region-hash.ko echo "Loading dm-region-hash.ko module" insmod /lib/dm-region-hash.ko 这主要是解决:"insmod: error inserting '/lib/dm-region-hash.ko': -1 File exists"这样的错误 5.从新打包内核 find .|cpio -c -o > /initrd cd / gzip -9 < initrd > initrd-2.6.38img rm -rf /boot/initrd-2.6.38.img cp initrd-2.6.38.img /boot rm -rf /cd /usr/src/linux-2.6.38.tar.gz rm -rf /cd /usr/src/linux-2.6.38 6.设置从新内核启动 vi /boot/grub/grub.conf 把default=1改为default=0 7.重新启动系统 reboot |
|
来自: raymoon_sure > 《内核移植》