2. 内核源码获取与编译环境搭建
在开始内核裁剪之前,必须完成两项基础工作:获取正确的内核源码版本,以及搭建一套可重复、可验证的交叉编译环境。本章将按照“源码下载 → 工具链安装 → 环境变量配置 → 编译验证”的标准化流程,确保你的开发环境与后续章节的裁剪实验完全一致。
2.1 下载 Linux 内核源码
推荐从 kernel.org 获取主线内核源码,或从 SoC 厂商(如 NXP、TI、Rockchip)提供的 BSP 仓库获取长期维护(LTS)版本。对于嵌入式系统,通常选择 LTS 版本以获得更长的支持周期。
| 版本类型 | 适用场景 | 获取方式 | 示例命令 |
|---|---|---|---|
| 主线 LTS | 通用嵌入式平台 | wget / git clone | wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.y.tar.xz |
| 厂商 BSP | 特定 SoC 开发板 | git clone 厂商仓库 | git clone -b |
| 本地备份 | 离线/内网开发 | scp / USB 拷贝 | scp user@server:/path/linux-*.tar.xz ./ |
版本锁定建议: 本课程所有裁剪实验基于 Linux 6.6 LTS。请确保下载后校验 SHA256 哈希值,避免源码被篡改或传输损坏。
# 下载并解压 Linux 6.6 LTS 源码
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.63.tar.xz
sha256sum linux-6.6.63.tar.xz
tar -xf linux-6.6.63.tar.xz
cd linux-6.6.63
2.2 安装交叉编译工具链
交叉编译工具链是嵌入式 Linux 开发的核心。它运行在 主机(x86_64) 上,生成目标平台(如 ARM64、ARM32、RISC-V)的可执行代码。推荐使用 Linaro GCC 或 Buildroot 生成的外部工具链。
2.2.1 安装 Linaro GCC 工具链
# 下载 Linaro aarch64 GCC 13.2 工具链
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-13.2.0-2024.07-x86_64_aarch64-linux-gnu.tar.xz
# 解压到 /opt 目录
sudo tar -xf gcc-linaro-13.2.0-2024.07-x86_64_aarch64-linux-gnu.tar.xz -C /opt/
sudo mv /opt/gcc-linaro-13.2.0-2024.07-x86_64_aarch64-linux-gnu /opt/gcc-arm64
2.3 配置编译环境变量
环境变量是编译系统定位工具链和头文件的“地图”。必须正确设置 PATH、CROSS_COMPILE 和 ARCH 三个核心变量。
| 环境变量 | 作用 | 示例值 |
|---|---|---|
PATH |
使 shell 能找到交叉编译工具 | /opt/gcc-arm64/bin:$PATH |
CROSS_COMPILE |
指定交叉编译工具链前缀 | aarch64-linux-gnu- |
ARCH |
指定目标 CPU 架构 | arm64 |
常见错误: 忘记设置
CROSS_COMPILE 会导致内核使用主机 gcc 编译,生成 x86_64 架构的 vmlinux,烧录到 ARM 板后无法启动。务必在每次编译前检查这三个变量。
# 将以下内容添加到 ~/.bashrc 或 ~/.zshrc 中
export PATH=/opt/gcc-arm64/bin:$PATH
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64
# 使配置立即生效
source ~/.bashrc
2.4 验证编译工具
环境配置完成后,必须执行三项验证,确保工具链可用、版本正确、内核基础配置能通过编译。
2.4.1 验证工具链版本
# 检查交叉编译器版本
aarch64-linux-gnu-gcc --version
# 预期输出示例:
# aarch64-linux-gnu-gcc (Linaro GCC 13.2.0) 13.2.0
# Copyright (C) 2023 Free Software Foundation, Inc.
2.4.2 验证环境变量
# 打印当前环境变量
echo "ARCH = $ARCH"
echo "CROSS_COMPILE = $CROSS_COMPILE"
echo "PATH = $PATH"
# 预期输出:
# ARCH = arm64
# CROSS_COMPILE = aarch64-linux-gnu-
# PATH 中应包含 /opt/gcc-arm64/bin
2.4.3 编译最小内核配置
# 进入内核源码目录
cd ~/linux-6.6.63
# 使用 defconfig 生成默认配置(ARM64)
make defconfig
# 编译内核(仅编译内核镜像,不编译模块)
make -j$(nproc) Image
# 验证编译产物
ls -lh arch/arm64/boot/Image
# 预期输出:一个 ELF 格式的 ARM64 内核镜像文件
验证通过标志: 如果
make Image 在 2-5 分钟内无错误退出,且 arch/arm64/boot/Image 文件大小在 20-50 MB 之间,说明交叉编译环境搭建成功,可以进入下一章的内核裁剪实验。
2.5 环境搭建检查清单
- 源码完整性: SHA256 校验通过,解压无报错。
- 工具链路径:
/opt/gcc-arm64/bin存在于PATH中。 - 交叉编译前缀:
CROSS_COMPILE末尾包含短横线-。 - 架构匹配:
ARCH与目标板 CPU 架构一致(arm64 / arm / riscv)。 - 编译验证:
make Image成功生成目标架构内核镜像。