A.2. 建构内核

本节的说明应用于建构定制的模块化内核。要建构单一化内核,请参阅第 A.3 节来获得关于建构和安装单一化内核的各方面的解释。

注记注记
 

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

要建构用于 x86 体系的内核,遵循以下步骤(已根用户身份执行):

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

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

  3. 推荐你从默认 Red Hat Linux 内核的配置着手。其步骤是,把系统体系的配置文件从 /usr/src/linux-2.4/configs/ 目录中复制到 /usr/src/linux-2.4/.config 目录中。如果系统的内存大于 4GB,复制包含 bigmem 的文件。

  4. 下一步,定制设置。如果 X 窗口系统可用,建议的方法是使用 make xconfig 命令来运行 Linux Kernel Configuration

    注记注记
     

    要使用 make xconfig 命令所启动的图形化工具,你必须安装提供了 wish 命令的 tk 软件包。 关于安装 RPM 软件包的详情,请参阅第 V 部分

    图 A-1. 配置内核组件的类别

    图 A-1所示,点击一个类别来选择它。在每个类别中包含的是组件。选择组件旁的 y(是)、m(模块)、或 n(否)来把它编译入内核、编译成内核模块、或不编译它。要进一步了解某组件,点击它旁边的help按钮。

    点击Main Menu来返回到类别列表。

    完成了配置后,点击主菜单中的Save and Exit按钮来创建配置文件 /usr/src/linux-2.4/.config 并退出 Linux Kernel Configuration 程序。

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

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

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

    • make menuconfig — 文本模式、菜单驱动的程序。组件以类别菜单的格式被显示; 使用和文本模式 Red Hat Linux 安装程序所用的同样方法来选择想要的组件。双态切换和要包括的项目相对应的标签:[*](内建)、[ ](排除)、<M>(模块)、或 < >(具备模块能力)。这种方法不需要 X 窗口系统。

    • make oldconfig — 这是一个非互动的脚本。它设置配置文件来包含默认的设置。如果系统使用的是默认 Red Hat Linux 内核,它会为用于该体系的 Red Hat Linux 包括的内核创建一个配置文件。这能够帮助你按照已知的工作默认值来设置内核,然后关闭你不想使用的功能。

    注记注记
     

    要使用 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.20-2.47.1custom)。

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

  8. 使用 make bzImage 来建构内核。

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

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

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

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

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

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