8.3. Linux-2.6.11.12

Linux 软件包包含 Linux 内核。

预计编译时间: 4.20 SBU
所需磁盘空间: 181 MB
安装取决于: Bash、Binutils、Coreutils、Findutils、GCC、Glibc、Grep、Gzip、Make、Modutils、Perl 和 Sed

8.3.1. 内核的安装

构建内核涉及几个步骤——配置、编译和安装。阅读README内核源代码树中的文件,了解本书配置内核的替代方法。

通过运行以下命令准备编译

make mrproper

这确保内核树是绝对干净的。内核团队建议在每次内核编译之前发出此命令。不要依赖于解压后源代码树是干净的。

如果在 第 7.6 节,“配置 Linux 控制台” 中,决定将键盘映射编译到内核中,请发出以下命令

loadkeys -m /usr/share/kbd/keymaps/[path to  keymap] > \
    drivers/char/defkeymap.c

例如,如果使用荷兰语键盘,请使用/usr/share/kbd/keymaps/i386/qwerty/nl.map.gz.

通过菜单驱动的界面配置内核。BLFS 包含有关 LFS 之外软件包的特定内核配置要求的信息,网址为 http://www.linuxfromscratch.org/blfs/view/svn/longindex.html#kernel-config-index

make menuconfig

或者,在某些情况下,make oldconfig 可能更合适。请参阅README文件以获取更多信息。

如果需要,可以通过复制内核配置文件来跳过内核配置,.config,从宿主系统(假设可用)复制到解压后的linux-2.6.11.12目录。但是,我们不建议使用此选项。通常最好浏览所有配置菜单并从头开始创建内核配置。

[Note]

注意

NPTL 要求内核使用 GCC-3.x 或更高版本编译,在本例中为 3.4.3。不建议使用 GCC-2.95.x 编译内核,因为这会导致 Glibc 测试套件失败。通常,由于 LFS 不构建 GCC-2.95.x,因此不会提及这一点。不幸的是,内核文档已过时,仍然声称 GCC-2.95.3 是推荐的编译器。

编译内核镜像和模块

make

如果使用内核模块,则可能需要/etc/modprobe.conf文件。有关模块和内核配置的信息位于linux-2.6.11.12/Documentation目录中的内核文档中。此外,modprobe.conf(5)可能也很有用。

在阅读有关内核模块的其他文档时要非常小心,因为它通常仅适用于 2.4.x 内核。据我们所知,尚未记录特定于 Hotplug 和 Udev 的内核配置问题。问题在于,只有当 Hotplug 或用户编写的脚本将相应的模块插入内核时,Udev 才会创建设备节点,并非所有模块都可以被 Hotplug 检测到。请注意,

文件中的如下语句不适用于 Udev/etc/modprobe.conffile do not work with Udev

alias char-major-XXX some-module

由于 Hotplug、Udev 和模块的复杂性,我们强烈建议从完全非模块化的内核配置开始,特别是如果这是第一次使用 Udev。

安装模块(如果内核配置使用它们)

make modules_install

内核编译完成后,需要额外的步骤才能完成安装。一些文件需要复制到/boot目录。

内核镜像的路径可能因使用的平台而异。以下命令假定为 x86 架构

cp -v arch/i386/boot/bzImage /boot/lfskernel-2.6.11.12

System.map是内核的符号文件。它映射内核 API 中每个函数的函数入口点,以及正在运行的内核的内核数据结构的地址。发出以下命令以安装映射文件

cp -v System.map /boot/System.map-2.6.11.12

内核配置文件.config由上面 make menuconfig 步骤生成的文件包含刚刚编译的内核的所有配置选择。最好保留此文件以供将来参考

cp -v .config /boot/config-2.6.11.12

重要的是要注意,内核源代码目录中的文件不归 root 所有。每当软件包以用户 root 身份解压时(就像我们在 chroot 内部所做的那样),文件都具有打包者计算机上的用户和组 ID。对于要安装的任何其他软件包,这通常不是问题,因为源代码树在安装后被删除。但是,Linux 源代码树通常会保留很长时间。因此,打包者使用的任何用户 ID 都有可能分配给机器上的某个人。然后,该人将拥有内核源代码的写入权限。

如果要保留内核源代码树,请在linux-2.6.11.12目录上运行 chown -R 0:0,以确保所有文件都归用户 root 所有。

[Warning]

警告

一些内核文档建议从/usr/src/linux创建一个指向内核源代码目录的符号链接。这特定于 2.6 系列之前的内核,并且 绝不能 在 LFS 系统上创建,因为它可能会给您在基本 LFS 系统完成后可能希望构建的软件包带来问题。

此外,系统include目录中的头文件应始终是编译 Glibc 所针对的头文件,即来自 Linux-Libc-Headers 软件包的头文件,因此绝不应被内核头文件替换。

8.3.2. Linux 的内容

已安装文件: config-2.6.11.12、lfskernel-2.6.11.12 和 System.map-2.6.11.12

简短描述

config-2.6.11.12

包含内核的所有配置选择

lfskernel-2.6.11.12

Linux 系统的引擎。当打开计算机时,内核是操作系统加载的第一部分。它检测并初始化计算机硬件的所有组件,然后使这些组件作为文件树提供给软件,并将单个 CPU 变成能够同时运行大量程序的多任务机器

System.map-2.6.11.12

地址和符号列表;它映射内核中所有函数和数据结构的入口点和地址