4. 工具链安装:构建编译依赖环境
在开始编译 PREEMPT_RT 内核之前,必须确保主机系统安装了完整的编译工具链和内核配置所需的依赖库。这些软件包构成了从源代码生成可执行内核映像、模块以及设备树文件的底层基础。缺少任何一个关键依赖都可能导致编译中途失败,浪费大量时间。
apt 替换为 dnf,并调整包名。
4.1 核心编译工具:build-essential
build-essential 是一个元包,它聚合了编译 C/C++ 程序所需的核心工具集,包括 GCC 编译器、G++ 编译器、GNU Make、dpkg-dev 以及必要的链接器(ld)和库文件。内核完全由 C 语言和少量汇编编写,因此这个包是编译链的基石。
| 组件 | 作用 | 内核编译中的角色 |
|---|---|---|
| gcc / g++ | GNU C/C++ 编译器 | 将内核源码转换为目标机器码 |
| make | 构建自动化工具 | 解析 Kbuild/Makefile,调度编译流程 |
| ld / gold | 链接器 | 将编译后的目标文件链接为 vmlinux 内核映像 |
| dpkg-dev | Debian 打包工具 | 生成内核 .deb 安装包(可选) |
sudo apt update
sudo apt install -y build-essential
gcc --version 和 make --version,确认输出显示版本号且无错误。建议 GCC 版本 ≥ 10.x,以支持内核较新的语法特性。
4.2 内核配置工具:libncurses-dev 与 bison/flex
内核配置阶段需要图形化或基于文本的菜单界面。libncurses-dev 提供了终端图形库,支撑 make menuconfig 的交互式界面。bison 和 flex 分别是 GNU 解析器生成器和词法分析器,用于处理内核 Kconfig 语法中的复杂表达式。
sudo apt install -y libncurses-dev bison flex
libncurses-dev,执行 make menuconfig 时会报错:Unable to find the ncurses libraries. 此时配置界面无法启动,必须回退到纯文本配置方式。
4.3 加密与签名工具:libssl-dev
现代内核支持模块签名、EFI 安全启动以及加密文件系统(如 dm-crypt)。libssl-dev 提供了 OpenSSL 库的头文件和静态库,内核在编译时会调用这些接口生成签名密钥和哈希值。如果缺少此库,内核的 SYSTEM_TRUSTED_KEYS 和 MODULE_SIG 功能将无法编译通过。
sudo apt install -y libssl-dev
libssl1.0-dev,建议显式安装 libssl-dev 以确保符号链接正确。
4.4 计算与压缩工具:bc 与其他辅助包
bc(Basic Calculator)是一个任意精度的计算器语言,内核的 Kbuild 系统在计算内存偏移、地址对齐和分区大小时会调用它。此外,kmod、cpio、xz-utils 等工具也常用于内核模块管理和 initramfs 打包,建议一并安装。
sudo apt install -y bc kmod cpio xz-utils
| 工具 | 用途 | 缺失后果 |
|---|---|---|
| bc | 内核配置中的数学计算 | 编译时出现 bc: not found 错误 |
| cpio | 打包 initramfs 文件系统 | 无法生成 initrd 映像 |
| xz-utils | 解压 .tar.xz 内核源码 | 无法解压标准内核源码包 |
| kmod | 内核模块加载/卸载工具 | depmod/modprobe 命令不可用 |
4.5 依赖关系全景图
下图展示了各编译依赖在内核编译流程中的位置与数据流向,帮助理解为什么每个包都不可或缺。
4.6 一键安装命令汇总
为减少遗漏,建议直接执行以下完整命令,一次性安装所有必需的编译依赖:
sudo apt update
sudo apt install -y \
build-essential \
libncurses-dev \
bison \
flex \
libssl-dev \
bc \
kmod \
cpio \
xz-utils \
git \
fakeroot \
dwarves
git 用于管理内核源码补丁;fakeroot 用于模拟 root 权限打包 deb;dwarves 提供 pahole 工具,在编译 BTF(BPF Type Format)信息时必需。若不需要 BTF 支持,可省略 dwarves。
4.7 安装后验证清单
完成安装后,建议逐项验证关键工具是否可用,避免在编译中途才发现缺失:
| 验证命令 | 预期输出 | 失败处理 |
|---|---|---|
gcc --version |
显示 GCC 版本号(≥ 10.x) | 重新安装 build-essential |
make --version |
显示 GNU Make 版本号 | 重新安装 build-essential |
ncursesw5-config --version |
显示 ncurses 版本号 | 重新安装 libncurses-dev |
bison --version |
显示 bison 版本号 | 重新安装 bison |
flex --version |
显示 flex 版本号 | 重新安装 flex |
openssl version |
显示 OpenSSL 版本号 | 重新安装 libssl-dev |
echo '1+2' | bc |
输出 3 |
重新安装 bc |
gcc-aarch64-linux-gnu),而非本机 build-essential。本章节以 x86_64 原生编译为例,交叉编译将在后续章节单独讲解。