英文

編譯核心的最低要求

簡介

本文件旨在提供運行當前核心版本所需的最低軟體列表。

本文件最初基於我的 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://kernel.linux.club.tw/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