让树莓派 5 跑上“香草”主线内核:精简裁剪、交叉编译与部署全流程
摘要 本文系统记录了我如何将树莓派 5 打造成主线 Linux 内核(Vanilla Kernel)的极简开发与测试平台——包括仓库极简裁剪思路、定制化内核配置、交叉编译与自动部署脚本、overlay 移除技巧,以及长期与主线社区同步维护的实战心得。适合关注 Linux 主线、ARM64 适配、内核开发、Upstream 贡献或喜欢折腾内核的极客们参考和实践。 背景与动机 最近一段时间,我在深入研究 Linux Kernel 的理论和架构,准备正式切入操作系统内核领域。因此,特意购买了树莓派 5 作为开发板,用于学习和实践内核开发。然而刚上手就发现,目前树莓派 5 并不能直接跑主线 Linux 内核,只能依赖树莓派团队维护的内核仓库。当时最新的分支是 rpi-6.14.y(现在是 rpi-6.16.y),仓库的维护方式是“动态拉取上游主线代码+rebase+大量自定义补丁”,涉及上万行的修改和历史反复变动。 这些定制补丁对于官方内核在树莓派上稳定运行、兼容所有功能确实非常重要,但对我这种纯粹想研究主线内核特性、关注内核本身的开发者来说,这些补丁反而变成了负担: 主线同步困难,merge 经常出冲突, 版本历史频繁重写,难以回溯和比较, 验证主线新特性或做反馈变得不直观。 我对比了 x86 开发板,发现它们大多能直接运行主线内核,但价格昂贵,性价比远不如树莓派 5。因此,我开始思考,如何让树莓派 5 也能顺畅运行主线内核,真正实现随时体验和测试内核最新特性,并为 ARM64 平台反馈问题、贡献补丁提供便利。我的目标很明确:用最少的补丁、最贴近 upstream 的方式,让树莓派 5 成为个人主线内核实验和学习的理想 ARM64 平台。 仓库结构与修改范围 我的做法十分简单却又直奔核心——只保留最必要的驱动与补丁,其余全部紧跟主线。仅对 drivers/ 目录做补丁,聚焦核心硬件支持,主要包括: SD 卡驱动:保证树莓派能正常引导,内核能加载根文件系统。虽然启动固件自带部分初始化功能,但主线内核仍需驱动挂载根文件系统。 有线网卡(Ethernet):方便通过 SSH 实现远程登录、下载新内核镜像、远程开发和调试,是内核开发过程中最重要的 IO 通道之一。 UART 串口:作为内核调试和 early print 的输出窗口,可以直接观察内核日志,判断启动和运行状态。 USB 控制器:用于外部设备挂载或偶尔传输离线数据,兼容更多实验场景。 基本 GPIO、电源管理等与 RPi5 硬件紧密相关的部分。 剔除官方内核中与 Wi-Fi、蓝牙、GPU(VideoCore)、HDMI、音视频加速等非内核开发必需的子系统支持,这些对内核本身的研究和测试意义不大。 维护 arch/arm64/boot/dts/ 下的树莓派 5 DTS(Device Tree)配置 ...