A.2. 建构内核

要建构定制内核,执行以下步骤(以根用户身份执行):

注记注记
 

这个例子使用 2.4.21-1.1931.2.399.ent 作为内核版本(内核版本可能会有所不同)。要判定内核版本,键入 uname -r 命令,然后用返回的内核版本来代替 2.4.21-1.1931.2.399.ent。

  1. 打开一个 shell 提示,改换到目录 /usr/src/linux-2.4 下。从此以后的命令都必须在该目录下执行。

  2. 你应该明确建构内核所使用的源码树的状况,这一点至关重要。因此,建议你从命令 make mrproper 开始着手。它会删除所有的配置文件,以及散落在源码树周围的从前建构的版本遗迹。如果你已有一个存在的配置文件 /usr/src/linux-2.4/.config,在运行这项命令前把它备份到另一个目录中,命令运行后再把它复制回来。

  3. 推荐你从默认红帽企业 Linux 内核的配置着手。其步骤是,把系统体系的配置文件从 /usr/src/linux-2.4/configs/ 目录中复制到 /usr/src/linux-2.4/.config 目录中。如果系统有不止一个处理器,复制带有 smp 关键字的文件。然而,如果系统的内存大于4GB,则复制带有 hugemem 关键字的文件。

  4. 下一步,定制设置。建议使用 make menuconfig 命令来运行 Linux Kernel Configuration。它不要求 X 窗口系统。

    完成了配置后,选择 ExitYes 来保存新的内核配置文件(/usr/src/linux-2.4/.config)。

    即便没有对设置进行任何改变,在继续前你也需要运行 make menuconfig 命令(或其它内核配置方法)。

    其它可用的内核配置方法包括:

    • make config — 互动文本程序。组件以线形格式出现,并被一个一个地回答。这种方法不需要运行 X 窗口系统,而且不允许你改变对前面问题的回答。

    • make xconfig — 这种方法要求 X 窗口系统和 tk 软件包。我们不推荐你使用这种方法,因为它不能可靠地解析配置文件。

    • make oldconfig — 这是一个读取现存配置文件(.config)的非互动脚本,它只提示你回答以前没有的新问题。

    注记注记
     

    要使用 kmod 和内核模块,在配置中对 kmod supportmodule version (CONFIG_MODVERSIONS) support 回答 Yes

  5. 创建了 /usr/src/linux-2.4/.config 文件后,使用 make dep 命令来正确设置依赖关系。

  6. 使用 make clean 命令来准备要建构的源码树。

  7. 推荐你给定制内核添加一个修改版本号码,因此现存内核不会被覆盖。此处描述的方法是从意外事件中恢复的最简易方法。关于其它可能使用的方法,请参阅 http://www.redhat.com/mirrors/LDP/HOWTO/Kernel-HOWTO.html/usr/src/linux-2.4/ 中的 Makefile 的详情。

    按照默认设置,/usr/src/linux-2.4/Makefile 在以 EXTRAVERSION 起首的行尾处包括 custom 这个词。后补这个词会允许系统同时拥有原有的工作内核和新内核(版本为 2.4.21-1.1931.2.399.entcustom)。

    如果系统包含不止一个定制的内核,区别它们的好办法是在后面添加日期(或其它标识符号)。

  8. 对于 x86 和 AMD64 体系,使用 make bzImage 来建构内核。对于 Itanium 体系,使用 make compressed 来建构内核。对于 S/390 和 zSeries 体系,使用 make image 来建构内核。对于 iSeries 和 pSeries 体系,使用 make boot 来建构内核。

  9. 建构使用 make modules 所配置的模块。

  10. 使用 make modules_install 命令来安装内核模块(即便事实上什么也没有建构)。请留心命令中的下划线(_)。这会把内核模块安装入 /lib/modules/<KERNELVERSION>/kernel/drivers 目录(KERNELVERSIONMakefile 中指定的版本)。在这个例子里是 /lib/modules/2.4.21-1.1931.2.399.entcustom/kernel/drivers/

  11. 使用 make install 来把新内核和相关文件复制到正确的目录中。

    除了在 /boot 目录中安装内核文件,这个命令还执行 /sbin/new-kernel-pkg 脚本。该脚本会建构一个新的 initrd 映像,并在引导装载程序的配置文件中添加一个新项目。

    如果系统有一个 SCSI 适配器,而 SCSI 驱动程序被作为模块编译了;或在建构内核模块时把 ext3 支持编译入了(红帽企业 Linux 的默认设置),你就需要 initrd 映像。

  12. 即便 initrd 映像和引导装载程序被修改了,你也应该校验这些修改的正确性,并确定使用定制的内核版本而不是 2.4.21-1.1931.2.399.ent。关于校验这些修改的信息,请参阅第 39.5 节第 39.6 节