技术知识库
编译 Linux 5.0 ARM64 内核
编译 Linux 5.0 ARM64 内核
摘要
本手册在 Ubuntu 26.04 x86_64 主机上,以独立输出目录交叉编译 Running Linux Kernel 5.0 ARM64 Image。按顺序执行即可重新生成已经在 QEMU 验证过的内核;构建故障的诊断细节放在关联 Lab 中。
输入与产物
- 源码:
/home/martin-zou/workspace/runninglinuxkernel_5.0 - 分支:
rlk_5.0 - 配置:
arch/arm64/configs/debian_defconfig - 输出目录:
build/arm64 - 产物:
build/arm64/arch/arm64/boot/Image
1. 安装并检查工具
sudo apt update
sudo apt install \
build-essential gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu \
flex bison bc libssl-dev libncurses-dev cpio gzip qemu-system-arm
aarch64-linux-gnu-gcc --version
flex --version
bison --version
qemu-system-aarch64 --version
2. 生成配置
cd /home/martin-zou/workspace/runninglinuxkernel_5.0
make ARCH=arm64 \
CROSS_COMPILE=aarch64-linux-gnu- \
O=build/arm64 \
debian_defconfig
ls -lh build/arm64/.config
grep '^CONFIG_ARM64=' build/arm64/.config
3. 启用实验平台需要的配置
scripts/config --file build/arm64/.config \
--enable BLK_DEV_INITRD \
--enable RD_GZIP \
--enable HW_RANDOM \
--enable HW_RANDOM_VIRTIO
make ARCH=arm64 \
CROSS_COMPILE=aarch64-linux-gnu- \
O=build/arm64 \
olddefconfig
grep -E '^CONFIG_(BLK_DEV_INITRD|RD_GZIP|HW_RANDOM|HW_RANDOM_VIRTIO)=' \
build/arm64/.config
预期四项均为 y。前两项用于 external initramfs;后两项配合 QEMU virtio RNG,避免 Debian 启动时熵不足。
4. 编译并验证
make ARCH=arm64 \
CROSS_COMPILE=aarch64-linux-gnu- \
O=build/arm64 \
-j"$(nproc)"
echo "make_status=$?"
ls -lh --time-style=long-iso \
build/arm64/arch/arm64/boot/Image
file build/arm64/arch/arm64/boot/Image
make -s ARCH=arm64 \
CROSS_COMPILE=aarch64-linux-gnu- \
O=build/arm64 \
kernelrelease
本轮结果:
make_status=0
Image: Linux kernel ARM64 boot executable Image, little-endian, 4K pages
kernelrelease: 5.0.0+
5. 检查 Debian 根文件系统的启动依赖
grep -E \
'^(CONFIG_EXT4_FS|CONFIG_VIRTIO|CONFIG_VIRTIO_PCI|CONFIG_VIRTIO_BLK|CONFIG_VIRTIO_NET|CONFIG_DEVTMPFS|CONFIG_TMPFS)=' \
build/arm64/.config
这些能力应为 y,因为内核挂载 /dev/vda 之前还不能从磁盘加载模块。
增量重编
修改配置或少量源码后,仍使用同一组 ARCH、CROSS_COMPILE 和 O 参数:
make ARCH=arm64 \
CROSS_COMPILE=aarch64-linux-gnu- \
O=build/arm64 \
-j"$(nproc)"
故障入口
构建末尾的 section mismatch 和 RWX LOAD segment 是本轮非阻断警告;以退出码 0 和有效 Image 为成功依据。