3. 环境准备:宿主机操作系统选择与硬件要求
构建 PREEMPT_RT 实时内核是一项对系统环境有明确要求的工程任务。宿主机(即编译内核的机器)的操作系统、磁盘、内存及网络配置直接影响编译成功率与后续调试效率。本章从工程实践角度给出最低推荐配置与避坑指南。
3.1 操作系统选择:Ubuntu vs Debian
Ubuntu 和 Debian 是内核编译社区最广泛使用的两大发行版。两者均基于 dpkg/apt 包管理,但在工具链版本、内核配置默认项、长期支持策略上存在差异。下表从关键维度进行对比:
| 对比维度 | Ubuntu (推荐 22.04 LTS / 24.04 LTS) | Debian (推荐 12 Bookworm) |
|---|---|---|
| GCC 默认版本 | 11 / 13 | 12 |
| 内核源码包 | linux-source-$(uname -r) | linux-source-6.1 |
| 实时补丁工具 | apt install 即可获得较新版本 | 需添加 backports 源 |
| 社区文档丰富度 | 极高,论坛/Stack Overflow 案例多 | 高,Wiki 体系严谨 |
| 长期支持周期 | 5 年(LTS) | 5 年(LTS) |
| 适用场景 | 快速原型、初学者、桌面开发 | 服务器、嵌入式产品基线 |
选型建议: 如果你是首次编译 PREEMPT_RT 内核,优先选择 Ubuntu 22.04 LTS。其 apt 源中直接包含
flex、bison、libncurses-dev 等编译依赖,且社区遇到的大多数编译错误都有现成解决方案。Debian 12 更适合需要严格稳定基线的产品化环境。
3.2 磁盘空间要求
内核编译过程会产生大量中间文件、目标文件及最终镜像。根据内核版本(5.x / 6.x)和配置选项(全模块 / 最小化)的不同,磁盘占用差异显著。以下为实测经验值:
- 内核源码解压 + 补丁文件: 约 1.2 GB ~ 1.8 GB
- 编译中间文件(.o / .cmd / .d 等): 约 5 GB ~ 8 GB
- 编译产物(vmlinux / modules / dtbs): 约 2 GB ~ 4 GB
- 临时文件与缓存(ccache / deb 包): 约 3 GB ~ 5 GB
磁盘空间红线: 强烈建议为内核编译预留 至少 25 GB 空闲空间。如果使用
ccache 加速重复编译,建议额外增加 10 GB。磁盘不足会导致编译中途报错 No space left on device,且清理过程繁琐。
推荐使用 df -h 提前检查挂载点空间:
# 检查 /home 或 /opt 分区剩余空间
df -h /home
# 如果空间不足,可创建符号链接将编译目录指向大容量分区
ln -s /data/kernel_build /home/user/rt_kernel
3.3 内存要求
内核编译是 CPU 密集型与内存密集型并重的任务。内存不足会触发 OOM(Out Of Memory) killer,导致编译进程被异常终止。不同并行度下的内存需求如下:
| 编译并行度(-jN) | 最低内存 | 推荐内存 | 备注 |
|---|---|---|---|
| -j2 | 2 GB | 4 GB | 仅用于验证配置 |
| -j4 | 4 GB | 8 GB | 常见虚拟机配置 |
| -j8 | 8 GB | 16 GB | 主流开发机 |
| -j16 及以上 | 16 GB | 32 GB | 服务器或工作站 |
内存优化技巧: 使用
make -j$(nproc) 自动检测 CPU 核心数。如果内存有限,可手动限制并行度:make -j2 虽然慢,但能避免 OOM。另外,关闭桌面环境(如 GNOME/KDE)可释放 1~2 GB 内存用于编译。
3.4 网络配置
编译 PREEMPT_RT 内核需要从多个上游仓库下载源码、补丁和依赖包。网络配置直接影响下载速度与成功率。以下是关键网络要求:
- 访问 kernel.org: 下载主线内核源码(tarball 或 git clone)
- 访问 rt.wiki.kernel.org: 获取 PREEMPT_RT 补丁系列
- 访问 apt 镜像源: 安装编译工具链与依赖库
- 访问 git.kernel.org: 如果使用 git 管理源码
网络加速建议: 国内开发者建议配置 清华 TUNA 镜像源 或 阿里云镜像源。对于 kernel.org 的下载,可使用
wget -c 断点续传,或使用 axel 多线程下载工具。
以下为配置 apt 镜像源的示例(Ubuntu 22.04):
# 备份原 sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 替换为清华镜像源
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 更新索引
sudo apt update
3.5 环境准备总览图
以下 SVG 图展示了宿主机环境准备的核心组件及其关系:
3.6 依赖包安装清单
在操作系统与网络就绪后,执行以下命令安装编译 PREEMPT_RT 内核所需的全部依赖:
# Ubuntu / Debian 通用
sudo apt update
sudo apt install -y \
build-essential \
libncurses-dev \
libssl-dev \
flex \
bison \
bc \
kmod \
cpio \
dwarves \
libelf-dev \
git \
wget \
curl \
xz-utils \
zstd
关键包说明:
dwarves:用于 BTF(BPF Type Format)生成,6.x 内核必需libssl-dev:内核模块签名与加密功能依赖zstd:内核镜像压缩格式支持(zstd 压缩率优于 gzip)
3.7 环境验证脚本
完成上述准备后,建议运行以下快速验证脚本,确保所有条件满足:
#!/bin/bash
# env_check.sh - 宿主机环境验证
echo "=== 操作系统 ==="
cat /etc/os-release | head -4
echo ""
echo "=== 磁盘空间 ==="
df -h / | tail -1
echo ""
echo "=== 内存 ==="
free -h | grep Mem
echo ""
echo "=== CPU 核心 ==="
nproc
echo ""
echo "=== 关键工具 ==="
for cmd in gcc make flex bison bc wget git; do
which $cmd &>/dev/null && echo " $cmd: OK" || echo " $cmd: MISSING"
done
echo ""
echo "=== 内核头文件 ==="
ls /lib/modules/$(uname -r)/build &>/dev/null && echo " headers: OK" || echo " headers: MISSING"
将上述内容保存为 env_check.sh,执行 chmod +x env_check.sh && ./env_check.sh,输出结果应无 MISSING 项。
常见遗漏: 很多初学者忘记安装
dwarves 包,导致编译 6.x 内核时出现 BTF: .tmp_vmlinux.btf: pahole (pahole) is not available 错误。请务必确认该包已安装。
至此,宿主机环境已完全就绪,可以进入下一阶段:获取内核源码与 PREEMPT_RT 补丁。