Linux Kernel in a Nutshell - 2

Requirements for Building and Using the Kernel

原文链接

我的博客

本章描述你配置、编译、启动一个内核的流程。查看 Documentation/Changes 来确定本章中使用的各个工具针对某个内核版本所需要的特定工具版本是一个明智选择。本章是基于 2.6.18 内核,使用的工具限定在这个版本。如果你使用不同的内核版本,那么请确定使用的工具版本是正确的,否则出现问题之后,很难确定问题究竟出在哪里。

Tools to Build the Kernel

大部分 Linux 发布版本提供一个安装选项来安装一系列 kernel hacking packages。如果你使用的发布版本提供了这个选项,那么安装就会比较简单,而不是尝试溯源本章中所有需要的单个程序。

成功编译一个内核只需要三个包:一个编译器、一个链接器以及一个 make 工具。本节描述每一个包的详细信息。

Compiler

Linux Kernel 是以 C 外加少量的汇编语言写成。要编译内核,gcc C 编译器是必须的。大部分 Linux 发布版本提供了 gcc,可以直接安装,如果你希望自己下载编译器源码并编译成工具,可以在 http://gcc.gnu.org 中找到。

针对 2.6.18 内核,gcc 3.2 版本是最老的支持这个内核版本的编译器版本。需要注意的是,获取到最新的 gcc 版本并不总是一个好的想法。最新的 gcc 可能不能够完成编译内核这个工作,因此,你如果不希望帮忙确定新编译器的bug,那么不建议使用最新的编译器版本。

使用下面的命令确定使用的 gcc 版本:

$ gcc --version

Linker

C 编译器 gcc 并不能单独完成所有工作。需要称作 binutils 的工具箱来做汇编以及连接的工作。binutils 工具包包含一些其他的操作目标文件的工具集,比如查看库中内容的工具。

binutils 通常可以以 binutils 工具包的形式查找到。如果你希望自己下载源码编译并安装工具,可以在 http://www.gnu.org/software/binutils 中找到。

针对 2.6.8 内核,binutils2.12 版本是最老的支持这个内核版本的二进制工具集。

使用下面的命令来查看自己的 binutils 版本:

$ ld -v

make

make 可以遍历内核源码树,确定哪些文件需要编译,之后调用编译器以及其他工具来完成内核编译。内核需要的 GNU make 的版本通常可以在你的版本分支的 make 中发现。

如果你希望自己下载源码编译并安装 make,可以在 http://www.gnu.org/software/make 找到。

对于 2.6.8 内核,make3.79.1 版本是最老的支持这个内核版本的工具版本。推荐安装最新版本的 make,因为最新版本的 make 能够更快完成这个工作。

使用下面的命令确定自己的 make 版本:

$ make --version

Tools to Use the Kernel

虽然运行的内核版本一般不会影响任何用户应用,但是也存在少量应用程序依赖于内核版本。本节描述一些可能已经安装在你的系统上的程序。如果你更新的内核到其他的版本,这些程序可能也要更新,以保证它能过够正常工作。

util-linux

util-linux 包是做一系列不同工作的小工具集。这个工具集的大部分工具用来处理挂载、创建盘分区、操纵系统中的硬件时钟。

如果你希望自己下载安装这个工具集,可以在 http://www.kernel.org/pub/linux/utils/util-linux 中找到。

针对 2.6.18 内核,2.10 版本是能够正常工作的最老版本。推荐安装最新版本,因为新版本支持内核的新特性。绑定挂载是一个新内核支持特性的例子,新的 util-linux 包能够支持使用这个特性。

使用下面的命令确定自己的 util-linux 包版本:

$ fdformat --version

module-init-tools

如果你需要使用 Linux 内核模块,那么 module-init-tools 是必要的。一个内核模块是能够在内核运行过程中添加到或从内核中移除的可加载代码块。有时候我们将设备驱动编译成模块只在对应的硬件存在时才将驱动加载到内核。所有的 Linux 发布版本使用模块来只在硬件存在时加载对应的驱动以及系统选项,而不是将所有内容都维持在内核中。模块化可以节省内核运行时所需的内存。

内核模块载入进程在 2.6 内核中发生了根本的转变。模块的链接器现在处于内核中,这令用户空间工具很小。老的发布版本具有成为 modutils 的包,在 2.6 内核中不能正常工作。module-init-tools 包则是在 2.6 内核版本之后需要的了。

如果你希望自己下载并安装这个包,可以在 http://www.kernel.org/pub/linux/utils/kernel/module-init-tools 中找到。

针对 2.6.18 内核,0.9.10 版本是能够正常工作的最老版本。推荐使用最新版本,因为新版本支持内核的新特性。其中的黑名单能够避免加载一些有问题的模块。

使用下面的命令来确定自己的 module-init-tools 包版本:

$ depmod -V

Filesystem-Specific Tools

为完成对某个文件系统创建、格式化、配置、修复盘分区等工作,需要一系列工具。util-linux 包中具有一些工具集,但是对一些流行的文件系统,则被放在单独的包中。

ext2/ext3/ext4

ext3 以及 ext4 文件系统是 ext2 的升级,可以使用相同的工具进行管理;任何基于 ext2 的工具的最新版本,也可以对另外两个文件系统进行处理。

如果希望能够使用这些文件系统,你必须具有 e2fsprogs 包。

如果你希望自己下载并安装这个包,可以在 http://e2fsprogs.sourceforge.net 中找到。

针对 2.6.18 内核,1.29 版本是能够正常工作的最老版本。推荐使用最新版本,因为新版本可以完全使用 ext2 以及 ext3 文件系统中具有的新特性。

使用下面的命令来确定自己的 e2fsprogs 包版本:

$ tune2fs

JFS

如果使用 IBMJFS 文件系统,你必须具有 jfsutils 包。

如果你希望自己下载并安装这个包,可以在 http://jfs.sourceforge.net 中找到。

针对 2.6.18 内核,1.1.3 版本是能过够正常工作的最老版本。

使用下面的命令来确定自己的 jfsutils 包版本:

$ fsck.jfs -V

ReiserFS

为了使用 ReiserFS 文件系统,你必须具有 reiserfsprogs 包。

如果你希望自己下载并安装这个包,可以在 http://www.namesys.com/download.html 中找到。

针对 2.6.18 内核,3.6.3 版本是能够正常工作的最老版本。

使用下面的命令确定自己的 reiserfsprogs 包版本:

$ reiserfsck -V

XFS

为了使用 SGIXFS 文件系统,你不许具有 xfsprogs 包。

如果你希望自己下载并安装这个包,可以在 http://oss.sgi.com/projects/xfs 中找到(这个链接好像打不开呢)。

针对 2.6.18 内核,2.6.0 版本是能够正常工作的最老版本。

使用下面的命令确定自己的 xfsprogs 包版本:

$ xfs_db -V

Quotas

为了使用内核提供的磁盘配额功能,你必须具有 quota-tools 包。这个包包含的程序可以令你为用户分配磁盘配额,为不同的用户提供静态的配额。并在用户使用的空间快要超出他具有的配额时做出警告。

如果你希望自己下载并安装这个包,可以在 http://sourceforge.net/projects/linuxquota 中找到。

针对 2.6.18 内核,3.09 版本是能够正常工作的最老版本。

使用下面的命令确定自己的 quota-tools 包版本:

$ quota -V

NFS

为了使用 NFS 文件系统,你必须具有 nfs-utils 包。这个包包含的程序可以令你挂载 NFS 分区作为一个客户端,并运行一个 NFS 服务器。

如果你希望自己下载并安装这个包,可以在 http://nfs.sf.net 中找到。

针对 2.6.18 内核,1.0.5 版本是能够正常工作的最老版本。

使用下面的命令确定自己的 nfs-utils 包版本:

$ showmount --version

Other Tools

还有一些十分重要的程序与内核版本紧紧绑定。这些程序在内核正常工作时并不是必要的,但是它们可以用来访问不同类型的硬件与功能。

udev

udev 程序可以令 Linux/dev 目录中提供一个持续存在的设备名系统。它也提供了一个动态的 /dev,就像 devfs 文件系统提供的功能一样。基本上所有的 Linux 发布版本都使用 udev 来管理 /dev 目录,因此需要使用它来正常地启动设备。

udev 依赖于 /sys 目录,而 /sys 这个目录对在不同的内核版本中是不同的。内核的一些修改会打断 udev,因此设备可能不能够正常启动。如果你最新版本的 udev 不能够正常启动你的内核,请联系 udev 的开发者。linux-hotplug-devel@lists.sourceforge.net。

推荐你使用在你的 Linux 发布版本中具有的 udev

如果你希望自己下载并安装这个包,可以在 http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html 中找到 (不能访问)。

针对 2.6.18 内核,081 版本是能够正常工作的最老版本。推荐使用最新版本的 udev,因为它能更好的为新内核服务。

使用下面的命令确定自己的 udev 包版本:

$ udevinfo -V

已经被 udevadm 替代

Process tools

procps 包包含常用的工具比如 ps 以及 top,以及一些其他的用来管理操作进程的工具。

如果你希望自己下载并安装这个包,可以在 http://procps.sourceforge.net 中找到。

针对 2.6.18 内核,3.2.0 版本是能够正常工作的最老版本。

使用下面的命令确定自己的 procps 包版本:

$ ps --version

PCMCIA tools

为了能够在 Linux 中正常使用 PCMCIA 设备,必须使用一个用户空间帮助程序来设置设备。对于较老的内核版本,这个程序曾经称为 pcmcia-cs,现在已经被更简单的系统替代 pcmciautils

如果你希望自己下载并安装这个包,可以在 ftp://ftp.kernel.org/pub/linux/utils/kernel/pcmcia 中找到(存在问题)。

针对 2.6.18 内核,004 版本是能够正常工作的最老版本。推荐使用最新版本,以使用 PCMCIA 子系统中的新特性,比如新设备查找到后自动加载驱动。

使用下面的命令确定自己的 pcmciautils 包版本:

$ pccardctl -V
posted @ 2022-07-14 21:08  ArvinDu  阅读(187)  评论(0编辑  收藏  举报