redhat内核2.4-2.6重编译升级
- 格式:doc
- 大小:348.00 KB
- 文档页数:12
虚拟机中Redhat9下的内核升级详解从linux-2.4.20-8到linux-2.6.8编译之前,必须知道为什么要编译内核以及内核是一个什么样的东西。
Linux 操作系统包括四个部分:实用工具集;shell;系统程序和运行期库;内核内核所起的作用——可以为其他所有的程序以及服务提供运行环境,分配各种软硬件资源。
在操作系统中,内核的作用类似于人的大脑。
由于LInux操作系统,是一个开源软件,开放所有的源代码,这为我们定制内核提供了便利条件;在Windows操作系统中,我们常常被很多问题困扰,比如说我们的操作系统在使用一段时间之后,会发现运行速度越来越慢,操作系统所在的磁盘分区容量越来越多,但是由于windows系统不开源,我们不知道为什么会出现这种情况。
不过在linux中,由于所有的内核代码都是开放的,所以只要我们有足够的能力,就可以对这个内核进行定制,以满足我们自己的需求。
这种定制包括:我们的硬件功能很强,包括很多附加设备。
但是使用的linux操作系统目前没有打开对这些功能和设备的支持,因此可以通过内核编译去获取这些功能。
反过来,如果我们的硬件功能很弱,而linux系统中自带的很多功能和硬件的支持我们都不需要,也可以通过内核定制和编译去掉这些功能以加强我们的系统性能。
或者杜绝一些错误和漏洞的存在。
总之,因为linux系统中给我们提供了定制内核的条件(开源),我们就应该和有能力使用这个条件去打造适合我们自己需要的操作系统。
前期准备工作:虚拟机中安装好系统(redhat9),下载好要你所想升级到的目标版本,(/download/0007000/6156.shtml)可以找到2.4版本及其以后的一系列内核源代码,本文主要针对的是linux-2.6.8。
提醒读者,如果用windows主机下载的话想要加载到虚拟机中就必须正确安装vmwaretools设置好文件共享,从而保证在linux下/mnt/ngfs文件中可以看到共享的内核源码文件(vmwaretools安装本文不做介绍,请查阅相关材料)下图是内核截图废话不多说,进入正题一,将下载的新内核解包刚开始的压缩包存放目录为/mnt/hgfs/share/linux-2.6.8.tar.bz2 (提醒读者share文件是自己设置的主机和虚拟机中的共享文件夹) ,现在cd /usr/src切换到目录下cp新内核文件到当前目录/usr/src下二,解压新内核在/usr/src下直接解压源码包,因为压缩包的不同有两种解压方法:(1)解压bzip2格式使用命令tar –xjvf linux-2.6.8.tar.bz2(2)解压gzip2格式使用命令tar –xzvf linux-2.6.8.tar.bz2解压完如图,在/usr/src下多出来以linux-2.6.8为文件名的文件夹,这就是新内核文件里面包含了建立内核时包含的大部分包含文件,初始化代码文件,设备驱动程序,文件系统,内核管理代码,进程通讯代码和主内核代码…它们就主要包含在drivers init lib arch include net kenel 这些文件中,具体每个代表什么,读者下去自己查找….至此内核解压完成三,编译内核1.在编译之前,我们要了解当前计算机的软硬件信息。
由于/proc目录下存储的是当前内存的运行值,其实这个文件夹不是硬盘中的数据,而是内存中的数据,因此我们可以通过这个目录下的文件来获得当前系统的硬件环境信息。
比如说cpu、内存、文件系统、pci设备、版本等相关信息。
一下简单例举了几个查询的命令,具体详细更多的查询命令可以参考操作手册Cpu信息中断查询usb查询pci信息内存查询2, gcc ncurses make dev86 glibc-kernheader cpp binutils 内核的安装需要一些底层环境的支持,必须保证这些软件工具都安装上,否则新的内核安装不会成功。
可以使用rpm -qa | grep packagename 命令查询是否安装3,正式开始编译:cd/usr./src/linux-2.6.8第一步:配置策略Linux中提供了多种内核配置命令(1)make configmake config是最基础的配置命令,以文本提示方式配置编译选项,工作时打开字符模式对话框,在终端上提出问题,并要求用户回答所有问题。
对于每个问题有三种可能的选择:yes no 和module。
Module告知内核配置在内核配置时候使用动态可装载模块,而不是静态地将功能连接到内核中。
这里配置时候有几个重要的配置选型:Loadable module support(对模块的支持)Processor type and features:选择支持的cpu类型General setup :设置通用属性(一般选择默认)如用户不熟悉配置选项,可以按照默认配置内核#make defconfig //按默认选项配置内核#make allnoconfig// 除了必须的选项外,其他的一概不选(2)make menuconfigmake menuconfig是主流的配置命令,它需要ncurses命令,在ubuntu系统中默认是不支持的。
工作时打开文本图像对话框,其功能和make config基本相同,但可以配置所需部分,使用必make config方便得多。
(3)make xconfigmake xconfig也是主流的命令,它是基于X11的,使用qt库,另外还得安装GCC否则会出错第二步:#make mrproper--清理内核源代码树(清理垃圾信息)如下图第三步:#make menuconfig进入配置界面这里我们只简单演示修改loadable module support 选中后enter进入下面界面第一个一般选上,第二个可以不选,第三个自己可以看懂什么意思,看不懂的话自己查字典去,第四个是让内核在启动时候有自己加载必须模块的能力选上选好后exit对于其他的选项自己可以安排,根据自己需要选择,这里不做过多解释第四步:设置完成后exit提示是否保存Yes 配置完成刚才的配置被保存为一个名称为.config的配置文件,不管我们使用make menuconfig还是make config make xconfig 最终都是为了生成这个.config文件,以后的操作都是根据这个文件中的内容进行操作的,它存的就是我们对内核文件做的配置改动,可以用less .config命令查看第五步:make编译内核(由于2.4的内核和2.6的内核的编译方法不是完全一样的,所以我们分开两种情况讨论)1 本文编译的是2,6版本的内核,配置完成后,通过make命令编译#make执行完make后的提示#make modules :它对内核模块进行编译make modules结果,warning提示自己分析只要没没error就Ok在编译过程中,会出现许多编译信息,如果不想看到这些信息可以重定向忽略编译信息#make>/dev/null另外在编译时候还可以加速内核的编译速度,方法2种如下(1)命令make –j<n> n一般等于cpu数量的2倍该命令可以提高cpu的编译效率例如对于单cpu make –j2>/dev/null(2)使用ccache来提高编译速度debian/ubuntu系统中默认没有安装,可采用$ sudo apt-get install ccache 然后更改内核目录的makefile,将CC和HOSTCC变量定义前添加ccache:将CC=$(CROSS_COMPILE)gccHOSTCC=gcc更改为:CC=ccache$(CROSS_COMPILE)gccHOSTCC=ccache gcc2对于2.4版本内核可采取步骤1>make dep –生成依赖性关系2>make bzImage –生成新内核3>make modules –编译内核模块加速编译过程操作方法和2.6的一致第六步在经过漫长的等待后,编译成功完成(如果中间显示任何包含的error字样就得重新从第一步开始),开始安装内核了(善意提醒:所有的编译编译步骤最好在字符界面下进行,否则在图形界面下速度会超级慢)make modules_install –安装内核模块make install –安装内核大家可以看到出现了错误提示信息no module BusLogic found for kernel 2.6.8具体原因就是安装vmware时候默认选择的是scsi做硬盘驱动,而内核配置时候没做修改,所以找不到BusLogic.解决方法:将下载的 2.6.8内核中即/usr/src/linux-2.6.8/drivers/scsi/BusLogi拷贝到/lib/modules/2.6.8/kernel/drivers/scsi 下(只是本例,其它的可以参考对应的目录,活学活用)make modules_install会将相应的内核模块安装到/lib/录下,make install将内核的映像复制到/boot目录下此时用户还需要为内核创建一个initrd.img文件,该文件用来存储挂载根文件系统所需的模块#cd /boot#mkinitrd –o intrid.img-2.6.8 or图示:在/root/下多出了initrd-2.6.8.img文件解决错误信息后,重新make install只是2个警告,可以不理会进行下来的工作…第七步也是最后一步,是对用户的grub配置文件进行修改,以便系统在进入时候能够选择新的内核#vim /boot/grub/menu.lst进入编辑界面Vim编辑器在不做修改的情况下,开机启动时候有两种内核方式选择,在此例中效果如下:如果只想用新的内核,只需把关于老版本的信息那三行删除即可,即最后三行,在此不做演示。
(推荐保留原内核,原因见附录)附录:置之前先介绍一下2.6的I/O调度器2.6包含的四个I/O调度器分别是No-op I/O scheduler、Anticipatory I/O scheduler、Deadline I/O scheduler与CFQ I/O scheduler。
在后文中分别简称为ns、as、ds与cfq。
ns是一个简化的调度程序它只作最基本的合并与排序。
与桌面系统的关系不是很大,主要用在一些特殊的软件与硬件环境下,这些软件与硬件一般都拥有自己的调度机制对内核支持的要求很小,这很适合一些嵌入式系统环境。
作为桌面用户我们一般不会选择它。
as是当前内核中默认的I/O调度器。
它拥有非常好的性能,在2.5中它就相当引人注意。