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 图展示了宿主机环境准备的核心组件及其关系:

宿主机环境准备核心组件 操作系统:Ubuntu 22.04 LTS / Debian 12 硬件资源要求 磁盘 ≥ 25 GB | 内存 ≥ 8 GB(推荐 16 GB) | CPU 多核 网络与工具链 apt 镜像源 | kernel.org 访问 | git / wget / curl 编译依赖包 build-essential | libncurses-dev | flex | bison | bc | kmod

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 补丁。