当前位置:首页 > 技术与方案 > Linux及应用

Linux内核升级

(2012-09-26 15:50:12)

Linux内核承担着Linux操作系统最为核心的任务,支持着其它程序和硬件等的运行,管理所有进程的内存,保证它们都能平等得到CPU的响应时间。另外,提供程序和硬件之间的接口。从技术上而言,Linux就是一个内核,其余我们称之为“Linux”,(例如一个 shell 和编译器)的部分实质上只是整个软件包的一部分。
升级内核的必要性
Linux的内核则是其源代码开放特点的最鲜明的代表。Linux的一个重要特点就是其源代码的公开性,所有的Linux使用者或爱好者都可以将优秀的代码加入到其中,这就使Linux可以迅速的支持先进的软硬件技术和规避旧版本的安全漏洞。
经常性地选择升级系统内核是Linux使用者经常性的工作。更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳定,并且一般会修复老版本中发现的漏洞。
一般,内核的版本序列号使用三个数字表示,如2.2.14,版本号越高表示功能越强。版本号分为两个系列:一种是产品系列,以偶数命名,例如,1.2.x、2.0.x、2.2.x等,运行稳定,已经经过较为周密的测试;另外一种是开发测试系列,以奇数命名,用以进行最新功能的测试,不建议初学者和生产过程中使用。
升级内核的具体步骤
下面以Redhat6.22版本为例介绍一下升级的具体步骤。
在安装与配置过程中,Linux会自动识别的CPU类型包括x86、SUN ,ARM、DEC Alpha、Sparc、MIPS、PowerPC、M68000等。
首先使用的命令是:#cd /usr/src/linux;make mrproper。确保源代码目录下没有不正确的.o文件。
接下来开始比较复杂一些的内核配置过程,配置的适当与否直接关系着之后Linux的运行状况,一些主要的且经常用到的选项的设置如下:
配置内核可以根据需要与爱好使用下面命令中的一个:
#make config  基于文本的最为传统的配置界面
#make menuconfig  基于文本菜单的配置界面
#make xconfig  基于图形窗口模式的配置界面
#make oldconfig  如果只想在原来内核配置的基础上进行微调可使用此方式。
进行配置时,大部分选项可以使用其缺省值,小部分则需要根据用户不同需求进行选择。如不同的文件系统,网卡等。
选择相应的配置时,有三种选择,它们分别代表的含义如下:
“Y”- 将该功能编译进内核
“N”- 不将该功能编译进内核
“M”- 将该功能编译成可以在需要时动态插入到内核中的模块。
将不经常使用且与内核其他部分联系不紧密的功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,降低该功能相应的环境改变时对内核的影响。
内核配置完毕后,接下来需要对内核源代码文件进行检验和编译,此时要保证系统所使用的gcc版本在gcc-2.7.2以上:
如果版本不够的话,需要下载新的版本并安装。
gcc的C和C++编译器是用来编译系统中软件的,尤其重要的是内核,最新版本的gcc可以在linux的FTP地址上找到。在sunsite.unc.edu上,它在目录/pub/linux/GCC(与库在-起),有一个gcc公布的release文件详细说明了需要下载什么文件以及如何安装它们。
#make dep  确保关键文件在正确的位置 
#make clean  确保所有有关文件都处于最新版本状态
#make zImage  编译压缩形式的内核
在需要内核支持较多的外设和功能时,内核可能变得很大,此时需要编译大内核:
#make bzImage
编译后所产生的新内核zImage的位置在/usr/src/linux/arch/i386/boot目录下,当然这里假设用户的CPU是x86型的。
如果选择了可加载模块,编译完内核后,要对选择的模块进行编译:
#make module (编译选择的模块)
#make module-install (将编译后的模块转移到系统标准位置)
模块在系统中的标准目录位于/lib/modules/x.y.z,后面的x.y.z是版本号,从谨慎的角度出发,在运行#make modules-install之前最好对/lib/modules进行备份。
Linux系统的核心代码存放于目录/usr/src/linux,,该目录实际上是一个链接,指向当前所用的核心版本的目录,例如如果当前使用的版本是2.2.14,则该核心的实际目录应该是:/usr/src/linux-2.2.14。而新下载的内核中的目录是linux,稳妥的做法是,首先删除链接linux,然后解包、更名、重新链接。否则,直接在/usr/src下解包会导致原来的内核目录被覆盖。
Linux内核功能在不断增强,支持的外设也越来越多,对所在分区的空间要求也越来越多,例如2.2.14内核压缩包的大小约为14MB,但实际上解压缩及编译等环节,要求/usr/src目录所在的分区的空闲空间大于60MB字节。
启用新内核
将编译好的新内核拷贝到系统目录/boot下,例如
#cp /usr/src/linux/arch/i386/boot/zImage /boot/zImage-2.2.14
然后,编辑系统引导配置文件/etc/lilo.conf,添入新内核选项,
修改前的lilo.conf文件
加入:
image=/boot/zImage
label=noyas lilo启动以“noyas”显示新内核
root=/dev/hda*
保存退出.
此时最好保留原有内核以及相应的选项,如果升级失败导致无法启动,还可以使用旧的内核引导自己的计算机。保存编辑后退出,此时运行命令:#lilo,更新系统引导映象。
重启机器后,在LILO的提示符下按“Tab”键,则应该看到加入的新内核选项noyas,另外还有原有的内核,如果新的内核不能启动,可使用旧有的内核启动。
对于国内进行汉化后的Linux版本的用户,需要等待厂家发行新内核的汉化包,然后到厂家指定的下载站点下载,按照其中的说明进行升级。
升级内核的常见问题和
解决方法
Linux内核升级如果"幸运"的话,是可以一次性成功的。如果在升级完成后,启动计算机或者内核的时候系统有错误信息的提示,那么最有可能出现的是以下5个:1.内核不能启动;2.异常I/O错误;3. 内核不能正确编译;4. 内核反映缓慢。
内核不能启动
当升级Linux内核时,主要是选择用户需要或不需要在系统中使用的设备及服务。从2.0版内核开始,Linux引入了一个全新的设计特征到内核中并提供了折中方案:组件可以动态的、随时的调入和调出内核。如果内核不能启动,并且在屏幕上看到了下面的信息:
Warning: unable to open an initial console Kernel panic: no init found. Try passing init= option to kernel
这个错误最大的可能就是没有给/etc/lilo.conf 中的“root=”提供正确的参数。
异常I/O错误
如果内核能正确启动,但在使用新内核过程中,系统经常出现崩溃、死机等异常现象。那么很可能是I/O出现了问题。
异常I/O错误的原因,通常是用户在编译Linux内核结束的时候没有执行"make dep clean"这一步骤。一般来说,我们在保存Kernel configuration选项中的“menuconfig”或“xconfig”时并不包含“make dep clean”这个步骤。因此,这里建议在保存配置后的Kernel configuration选项时注意确认是否已经进行了"make dep clean"这一步。
内核不能编译
当运行“make bzImage modules”时,如果出现了内核不能编译或者其他的异常现象。此时的方法就是重新启动系统,然后使用“rpm -e”命令删除Kernel configuration tools内核配置工具。接着再重新安装,如果能正确安装,再重新配置内核后应该成功。如果还是不能编译内核,就有可能是硬件设备有问题。
内核反映缓慢
有时候在升级内核后系统显得比之前的反映速度慢很多。这很可能是在修改Kernel configuration options的时候,在"menuconfig"或者"xconfig"选择了过多的选项。这样不仅使得计算机在编译新内核的时候要花费更多的时间,也使得系统在工作的时候占用了太多的内存。解决方法是,尽量选择我们需要的选项,太过于复杂的选项无需修改。

配料:下载内核源码包的常用站点
 http://studio.openunix.org
http://www.clinuxworld.com

作者:祝晓光

 
更多
关闭窗口 打印 
网站首页    -    联系我们    -   收藏本站    -    网站地图                                                               客户服务热线:0571-85023000
本网站所有网页信息已申请知识产权和著作权保护,版权归四海光纤公司所有,未经授权禁止任何人复制或镜像,违者必究。
公司主营:杭州光纤光缆视频会议系统,是专业的通信网络工程、视频会议系统建设专家

中华人民共和国备案号:浙ICP备10018243号