8.3. Linux-2.6.27.4

Linux 内核软件包包含内核源代码及其头文件。

预计编译时间: 1.5 - 5.0 SBU
所需磁盘空间: 350 - 500 MB

8.3.1. 安装 kernel

编译内核包含几个步骤——配置、编译和安装。阅读内核源码树里的 README 文件可选择不同于本书的配置内核的其他方法。

运行下面的命令准备编译:

make mrproper

这样可确保内核树绝对干净。内核开放团队推荐每次编译内核之前都运行这个命令。不要指望解压后的源码树都是干净的。

配置内核通过一个菜单来驱动界面。BLFS 在 LFS 包之外有一些详细的有关内核配置要求的软件包,在 http://www.linuxfromscratch.org/blfs/view/svn/longindex.html#kernel-config-index:

make LANG=<host_LANG_value> LC_ALL= menuconfig

编译参数的含义:

LANG=<host_LANG_value> LC_ALL=

这建立了在主机上使用的本地设置。这需要一个适当的内核界面接口线来动用 UTF-8 的 linux 文本控制台。

确保用你主机上变量 $LANG 的值来替换 <host_LANG_value>。如果未设置,你可以用主机上 $LC_ALL 或者 $LC_CTYPE 的值来替代它。

在同样的情况下选择 make oldconfig 可能更合适。阅读 README 以获取更多信息。

如果愿意,可以跳过内核配置,直接从主机系统(假定可用)复制内核配置文件 .config,解压到 linux-2.6.27.4 目录下。然而,我们不推荐这种选择。通常探究所有配置菜单项并且从头创建内核配置更好。

编译内核镜像和模块:

make

如果使用内核模块,可能需要 /etc/modprobe.conf 文件。有关模块和内核的配置信息可在 第 7.4 节 “LFS 系统的设备和模块处理”linux-2.6.27.4/Documentation 目录中的内核文档中找到。同样,modprobe.conf(5) 可能也很重要。

如果内核配置使用模块,安装它们:

make modules_install

内核编译完成后,为完成安装还需要额外的步凑。一些文件需要拷贝副本到 /boot 目录。

内核镜像的路径,根据平台的不同可能会改变。下面的命令假定架构在 x86 上:

cp -v arch/x86/boot/bzImage /boot/lfskernel-2.6.27.4

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

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

内核配置文件 .config 产生于步凑 make menuconfig,包含所有被编译的内核配置选项。保留这个文件以备将来参考是个好主意:

cp -v .config /boot/config-2.6.27.4

安装Linux内核文档:

install -d /usr/share/doc/linux-2.6.27.4
cp -r Documentation/* /usr/share/doc/linux-2.6.27.4

有一点重要提示,内核源码目录的所有者不是 root。只要是用 root(类似我们在 chroot 环境下做的)解压,无论他们在什么打包者的计算机上解压后的文件都有用户和组的 ID。对于其他安装包这通常不是问题因为源码树在安装后被移除了。但是,Linux 源码树通常保留很长时间。为此,无论包装者使用什么 ID,用户的 ID 仍然有可能被分配给机器上的某人。此人将拥有改写内核源码的权限。

如果要保留内核源码,在 linux-2.6.27.4 目录下运行 chown -R 0:0,确保所有文件都属于 root

[警告]

警告

推荐一些内核文档创立一个指向内核源码目录的 /usr/src/linux 链接,特别对 2.6 版本的内核。而在 LFS 系统上 不允许,它会导致你在完成 LFS 系统构建后,安装其它软件包时出现错误。

[警告]

警告

系统 include 目录下的头文件应该 始终 基于 Glibc 编译后的版本。也就是和 Linux-Libc-Headers 相同。因此, 决不要 替换内核头文件。

8.3.2. Linux 的内容

安装的文件: config-2.6.27.4,lfskernel-2.6.27.4 和 System.map-2.6.27.4

简要描述

config-2.6.27.4

包含所有内核配置选项

lfskernel-2.6.27.4

Linux 系统的引擎。当打开计算机时,内核是操作系统装载的第一部分。它检测并初始化所有的电脑硬件组件,然后将这些设备以文件树的形式存放使得其它软件可以访问,并且让 CPU 能够同时运行多个程序。

System.map-2.6.27.4

显示地址和符号的文件;它映射内核里所有函数和数据结构的入口和地址。


Host by Alair