英文

编译内核的最低要求

简介

本文档旨在提供运行当前内核版本所需的最低软件列表。

本文档最初基于我的 2.0.x 内核的“变更”文件,因此归功于该文件中的相同人员(Jared Mauch、Axel Boldt、Alessandro Sigala 以及互联网上无数其他用户)。

当前最低要求

在认为您遇到 Bug 之前,请将软件升级到**至少**这些版本!如果您不确定当前运行的是哪个版本,建议的命令应该会告诉您。

再次强调,请记住此列表假设您已经能够正常运行 Linux 内核。此外,并非所有工具都在所有系统上都必需;例如,如果您没有任何 PC 卡硬件,那么您可能不需要关注 pcmciautils。

程序

最低版本

检查版本的命令

GNU C

8.1

gcc --version

Clang/LLVM (可选)

13.0.1

clang --version

Rust (可选)

1.78.0

rustc --version

bindgen (可选)

0.65.1

bindgen --version

GNU make

4.0

make --version

bash

4.2

bash --version

binutils

2.30

ld -v

flex

2.5.35

flex --version

bison

2.0

bison --version

pahole

1.16

pahole --version

util-linux

2.10o

mount --version

kmod

13

depmod -V

e2fsprogs

1.41.4

e2fsck -V

jfsutils

1.1.3

fsck.jfs -V

reiserfsprogs

3.6.3

reiserfsck -V

xfsprogs

2.6.0

xfs_db -V

squashfs-tools

4.0

mksquashfs -version

btrfs-progs

0.18

btrfs --version

pcmciautils

004

pccardctl -V

quota-tools

3.09

quota -V

PPP

2.4.0

pppd --version

nfs-utils

1.0.5

showmount --version

procps

3.2.0

ps --version

udev

081

udevd --version

grub

0.93

grub --version || grub-install --version

mcelog

0.6

mcelog --version

iptables

1.4.2

iptables -V

openssl & libcrypto

1.0.0

openssl version

bc

1.06.95

bc --version

Sphinx[1]

3.4.3

sphinx-build --version

GNU tar

1.28

tar --version

gtags (可选)

6.6.5

gtags --version

mkimage (可选)

2017.01

mkimage --version

Python (可选)

3.9.x

python3 --version

GNU AWK (可选)

5.1.0

gawk --version

内核编译

GCC

gcc 版本要求可能因您计算机中的 CPU 类型而异。

Clang/LLVM (可选)

最新正式发布的 clang 和 LLVM 工具(根据 releases.llvm.org)支持构建内核。不保证旧版本能正常工作,我们可能会从内核中移除用于支持旧版本的变通方案。有关更多信息,请参阅 使用 Clang/LLVM 构建 Linux 的其他文档。

Rust (可选)

需要最新版本的 Rust 编译器。

有关如何满足 Rust 支持的构建要求,请参阅 快速入门。特别是,Makefile 目标 rustavailable 对于检查 Rust 工具链为何可能未被检测到很有用。

bindgen (可选)

bindgen 用于生成内核 C 端的 Rust 绑定。它依赖于 libclang

Make

您需要 GNU make 4.0 或更高版本来构建内核。

Bash

内核构建使用了一些 bash 脚本。需要 Bash 4.2 或更高版本。

Binutils

构建内核需要 Binutils 2.30 或更高版本。

pkg-config

自 4.18 版本起,构建系统要求 pkg-config 检查已安装的 kconfig 工具并确定用于“make {g,x}config”的标志设置。之前 pkg-config 已在使用但未经过验证或记录。

Flex

自 Linux 4.16 起,构建系统在构建过程中生成词法分析器。这需要 flex 2.5.35 或更高版本。

Bison

自 Linux 4.16 起,构建系统在构建过程中生成解析器。这需要 bison 2.0 或更高版本。

pahole

自 Linux 5.2 起,如果选择 CONFIG_DEBUG_INFO_BTF,构建系统将从 vmlinux 中的 DWARF 生成 BTF (BPF Type Format),稍后也会从内核模块中生成。这需要 pahole v1.16 或更高版本。

它可以在“dwarves”或“pahole”发行版软件包中找到,或者从 https://fedorapeople.org/~acme/dwarves/ 获取。

Perl

您需要 perl 5 以及以下模块来构建内核:Getopt::LongGetopt::StdFile::BasenameFile::Find

BC

构建 3.10 及更高版本的内核需要 bc。

OpenSSL

模块签名和外部证书处理使用 OpenSSL 程序和加密库来执行密钥创建和签名生成。

如果启用了模块签名,构建 3.7 及更高版本的内核需要 openssl。构建 4.3 及更高版本的内核还需要 openssl 开发包。

Tar

如果您想通过 sysfs 启用对内核头文件的访问 (CONFIG_IKHEADERS),则需要 GNU tar。

gtags / GNU GLOBAL (可选)

内核构建需要 GNU GLOBAL 6.6.5 或更高版本,才能通过 make gtags 生成标签文件。这是因为它使用了 gtags 的 -C (--directory) 标志。

mkimage

此工具用于构建平面镜像树 (Flat Image Tree, FIT),这在 ARM 平台上很常用。该工具可通过 u-boot-tools 软件包获取,也可以从 U-Boot 源代码构建。请参阅 https://docs.u-boot.org/en/latest/build/tools.html#building-tools-for-linux 上的说明。

GNU AWK

如果您希望内核构建为内置模块生成地址范围数据 (CONFIG_BUILTIN_MODULE_RANGES),则需要 GNU AWK。

系统工具

架构变更

DevFS 已被 udev 取代(https://linuxkernel.org.cn/pub/linux/utils/kernel/hotplug/)。

32 位 UID 支持现已到位。祝您使用愉快!

Linux 函数文档正在通过源代码中其定义附近的特殊格式注释转换为内联文档。这些注释可以与 Documentation/ 目录中的 ReST 文件结合,以创建更丰富的文档,然后可以将其转换为 PostScript、HTML、LaTeX、ePUB 和 PDF 文件。为了将 ReST 格式转换为您选择的格式,您需要 Sphinx。

Util-linux

新版本的 util-linux 为大磁盘提供 fdisk 支持,支持新的挂载选项,识别更多支持的分区类型,以及类似的好东西。您可能需要升级。

Ksymoops

如果发生意外情况并且您的内核出现 oops,您可能需要 ksymoops 工具来解码它,但在大多数情况下您不需要。通常更倾向于使用 CONFIG_KALLSYMS 构建内核,以便它生成可直接使用的可读转储(这也比 ksymoops 产生更好的输出)。如果由于某种原因您的内核没有使用 CONFIG_KALLSYMS 构建,并且您无法使用该选项重新构建和重现 oops,那么您仍然可以使用 ksymoops 解码该 oops。

Mkinitrd

/lib/modules 文件树布局的这些更改也要求升级 mkinitrd。

E2fsprogs

最新版本的 e2fsprogs 修复了 fsck 和 debugfs 中的几个 Bug。显然,升级是个好主意。

JFSutils

jfsutils 软件包包含文件系统实用程序。以下实用程序可用:

  • fsck.jfs - 启动事务日志重放,并检查和修复 JFS 格式化的分区。

  • mkfs.jfs - 创建 JFS 格式化的分区。

  • 此软件包中还提供其他文件系统实用程序。

Reiserfsprogs

reiserfsprogs 软件包应用于 reiserfs-3.6.x (Linux 内核 2.4.x)。它是一个组合软件包,包含可用的 mkreiserfsresize_reiserfsdebugreiserfsreiserfsck 版本。这些工具在 i386 和 alpha 平台上都可运行。

Xfsprogs

最新版本的 xfsprogs 包含 mkfs.xfsxfs_db 以及用于 XFS 文件系统的 xfs_repair 等实用程序。它是架构独立的,2.0.0 或更高版本都应与此版本的 XFS 内核代码正常工作(由于一些显著改进,建议使用 2.6.0 或更高版本)。

PCMCIAutils

PCMCIAutils 取代了 pcmcia-cs。如果内核模块化并使用了热插拔子系统,它会在系统启动时正确设置 PCMCIA 插槽并加载适用于 16 位 PCMCIA 设备的相应模块。

Quota-tools

如果您想使用较新的版本 2 配额格式,则需要支持 32 位 uid 和 gid。Quota-tools 3.07 及更高版本支持此功能。请使用上表中推荐的版本或更新版本。

Intel IA32 微代码

已添加一个驱动程序,允许更新 Intel IA32 微代码,可作为普通(杂项)字符设备访问。如果您未使用 udev,您可能需要

mkdir /dev/cpu
mknod /dev/cpu/microcode c 10 184
chmod 0644 /dev/cpu/microcode

作为 root 用户才能使用此功能。您可能还需要获取用户空间 microcode_ctl 实用程序来配合使用。

udev

udev 是一个用户空间应用程序,用于动态地填充 /dev,只包含实际存在的设备的条目。udev 取代了 devfs 的基本功能,同时允许设备持久命名。

FUSE

需要 libfuse 2.4.0 或更高版本。绝对最低版本是 2.3.0,但挂载选项 direct_iokernel_cache 将不起作用。

网络

一般变更

如果您有高级网络配置需求,您可能应该考虑使用 ip-route2 中的网络工具。

数据包过滤 / NAT

数据包过滤和 NAT 代码使用与之前的 2.4.x 内核系列(iptables)相同的工具。它仍然包含用于 2.2.x 风格的 ipchains 和 2.0.x 风格的 ipfwadm 的向后兼容模块。

PPP

PPP 驱动程序已经重构,以支持多链路并使其能够在不同的媒体层上运行。如果您使用 PPP,请将 pppd 升级到至少 2.4.0。

如果您没有使用 udev,您必须有设备文件 /dev/ppp,可以通过以下方式创建:

mknod /dev/ppp c 108 0

作为 root 用户。

NFS-utils

在较旧的(2.4 及更早)内核中,NFS 服务器需要知道任何希望通过 NFS 访问文件的客户端。当客户端挂载文件系统时,此信息会由 mountd 提供给内核,或者在系统启动时由 exportfs 提供。exportfs 会从 /var/lib/nfs/rmtab 中获取有关活动客户端的信息。

这种方法相当脆弱,因为它依赖于 rmtab 的正确性,而这并不总是容易的,尤其是在尝试实现故障转移时。即使系统运行良好,rmtab 也会因为有大量从未被移除的旧条目而受到影响。

对于现代内核,我们有一个选项,即内核在收到来自未知主机的请求时通知 mountd,然后 mountd 可以向内核提供适当的导出信息。这消除了对 rmtab 的依赖,意味着内核只需要知道当前活动的客户端。

要启用此新功能,您需要

mount -t nfsd nfsd /proc/fs/nfsd

在运行 exportfs 或 mountd 之前。建议所有 NFS 服务在可能的情况下都通过防火墙保护,使其免受互联网的威胁。

mcelog

在 x86 内核上,当 CONFIG_X86_MCE 启用时,mcelog 实用程序用于处理和记录机器检查事件。机器检查事件是 CPU 报告的错误。强烈建议处理这些事件。

内核文档

Sphinx

有关 Sphinx 要求的详细信息,请参阅 Sphinx 安装,位于 Documentation/doc-guide/sphinx.rst

rustdoc

rustdoc 用于生成 Rust 代码的文档。有关更多信息,请参阅 一般信息

获取更新的软件

内核编译

gcc

Clang/LLVM

Rust

bindgen

Make

Bash

Binutils

Flex

Bison

OpenSSL

系统工具

Util-linux

Kmod

Ksymoops

Mkinitrd

E2fsprogs

JFSutils

Reiserfsprogs

Xfsprogs

Pcmciautils

Quota-tools

Intel P6 微代码

udev

FUSE

mcelog

网络

PPP

NFS-utils

Iptables

Ip-route2

OProfile

内核文档

Sphinx