如何重新生成Linux的内核

本文按步骤介绍如何重新生成、发布新的Linux内核,此操作步骤仅供参考,更详细的操作
方法请参考Linux的操作手册。
1) 获取Linux的内核源码
Linux内核源码的获得,可以从Linux发布光盘中得到,不同Linux的提供商其内核文件的格
式也不同,Red Hat的内核源码格式为kernel-source-2.2.14-5.rpm,SuSe Linux的格式为
lx_source-2.2.1-SuSe-12.i386.rpm。如果选择标准的安装方式,内核源码会安装在/usr/src/linux-2.2.x,
也可以直接从发布的光盘中安装。
注意,大多数Linux的发布光盘中内核源码并不是最新的,可以从kernel.org下载最新的内核源码。
2) 解开源码包,源码一般会解压到/usr/src目录下,可使用命令如下:
tar.gz文件:tar zxvf linux.2.2.16.tar.gz,或者
gzip -dc linux-2.2.16.tar.gz | tar xvf -
bzip’ed的文件: tar xlvf linux-2.2.16.tar.bz2,或者
bzip2 -dc linux-2.2.16.tar.bz2 | tar xvf -
解开后会产生目录名为linux的新目录,并包含新的内核,可以将此目录转移到相对应的目录,
以区分不同的内核版本,如下:
mv linux linux-2.2.16
ln -s linux-2.2.16 linux
3) 编译生成新的内核
a) 创建内核配置文件
首先进入到以上新建立的内核目录,并创建内核编译的配置文件,如下:
make menuconfig
以上命令将调一配置菜单项,注意这需要安装ncurses,如下图:

在X 界面下,也可以使用命令
make xconfig
调用图形界面,与make menuconfig功能相同,使用此命令,需要tcl的支持,如下图:

不管使用那种方式,都会看到不同内容格式的列表,在每一个不同的列表项中都有三个不
同的选项:Y(yes),N(no)和M(module),分别代表不同的内容:
Yes:选择特定的选项,并编译到内核中
No:不选择特定的选项
Module:支持特定的选项,并编译成模块的方式,此模块支持选定的功能项,而不是将功
能模块编译到内核,系统会创建单独的文件,在需要时在调入到内存。此选项的优点在于
可以尽量减少内核的大小,避免随着系统硬件支持的增多,内核相应的加大。使用模块方
式使用硬件,应当注意硬件的类型,比如,类似于声卡、网卡、打印机等可以使用模块方
式,对一些必需的硬件,应当编译连接到系统内核中。

b) 依赖性检查
生成内核配置文件后,需要检查编译过程中的依赖的文件和头文件的一致性,使用命令
make dep,这将花费一些时间
c) 清除旧的目标文件
使用命令make clean,这一步不是必需的
d) 编译模块
使用make modules,根据生成的配置文件,编译不同的模块
e) 安装编译好的模块
使用make modules_install,此命令将使用最新编译好的模块,并存放到/lib/modules目录
下。如果编译的内核和运行的系统版本一致,需要将旧的模块移走,不然下次系统启动
时系统会产生模块依赖性的错误,操作如下:
mv /lib/modules/2.2.16 /lib/modules/2.2.16.old
f) 编译内核
使用命令make bzImage编译Linux内核,使用时间取决于处理器的处理速度和选择编译的
配置文件。注意,bzImage不是bzimage,此命令将生成一个压缩的内核文件,可以减少
内核文件的大小,系统在引导时自动解压内核介质,不需要做特殊的配置。

对以上的操作,也可以使用如下命令顺序完成:
make dep clean modules modules_install bzImage
在编译模块和内核的过程中,可以使用Control-C中止编译过程,如果继续进行可以运
行make modules或者make bzImage,编译将从上次的断点开始。但是,如果修改了配
置,则需要重新运行make dep,所有的编译从开始进行。
新编译生成的内核文件存放为usr/src/linux/arch/i386/boot的bzImage,在不同架构的机器
上编译生成内核,i386会被相应的架构名称代替。

4) 使用新生成的内核
对新创建的内核,首先应当测试是否可以使用,而不是简单的替换掉旧的内核。可以使
用lilo测试新的内核:
编辑/etc/lilo.conf配置文件,增加新的引导介质选项,格式如下
image = /vmlinuz
label = linux
root = /dev/hda1
增加新的引导项,替换image = /vmlinuz如下:
image = /usr/src/linux/arch/i386/boot/bzImage
修改标示项为:
label = new
保存/etc/lilo.conf文件,重新启动机器,选择新增加的引导项,检查新生成的内核是否正确,
如果系统引导、系统驱动操作正常,可以安装使用新的内核。
5) 使用新生成的内核
进入/usr/src/linux目录下,运行命令make install,此命令将安装新的/vmlinuz,并安装新的系
统映射。以上操作完成后,可以修改/etc/lilo.conf文件,删除新增加的测试项。


posted @ 2007-06-20 09:58  远方  阅读(1681)  评论(0)    收藏  举报