构建系统进阶教程
前言:我们到了哪一步
经过前面基础教程的折腾,你已经能够成功编译 U-Boot、Linux 内核和 BusyBox,并且把它们整合成一个可以启动的系统。恭喜你,这是嵌入式 Linux 开发的一个重要里程碑!
但是!当你真正开始做项目时,你会发现还有很多"进阶"问题需要解决:
- 构建产物散落在各个目录,想要找那个能烧录的镜像文件得翻半天
- 想给内核加个自定义补丁,结果改了子模块代码,下次
git submodule update全没了 - 同一套代码要适配不同环境(开发/生产),每次改配置都改得心惊胆战
这一章的三个教程,就是来解决这些问题的。我们会带你走通构建系统的进阶用法,让你不仅能"跑起来",还能"用得爽"。
教程列表
1. out/ 目录结构完全指南
构建一次系统后,你会发现 out/ 目录下冒出来一堆子目录和文件:uboot/、linux/、busybox/、release-YYYYMMDD-HHMMSS/、release-latest/……这些都是什么东西?
这一章会彻底搞清楚构建产物的组织方式:
- 开发构建目录和 Release 构建目录有什么区别
release-latest软链接指向哪里,为什么需要它- 快速定位你要烧录的镜像文件
- 验证构建产物是否完整
- 清理构建输出的正确姿势(别手滑把辛辛苦苦编译的成果删了)
预计阅读时间: 15 分钟
2. Patch 工作流实战指南
直接修改子模块代码?千万别!这样改出来的代码,一旦执行 git submodule update --remote,你的修改瞬间灰飞烟灭。别问我是怎么知道的(血压拉满)。
这一章会教你正确的补丁管理姿势:
- 为什么要用补丁系统,而不是直接修改子模块
- 补丁生成:从修改代码到导出
.patch文件的完整流程 - 补丁应用:自动应用和手动应用两种方式
- 补丁冲突的处理方法
- CI/CD 如何自动应用你的补丁
- 补丁管理的最佳实践(7条实战经验)
预计阅读时间: 20 分钟
3. RootFS Overlay 使用指南
同一个 Rootfs,开发环境要加调试工具,生产环境要加监控服务,手动改配置文件改得头大?Overlay 模式就是为这种场景设计的。
这一章会带你玩转 RootFS 定制:
- 为什么需要 Overlay,直接修改 Rootfs 有什么问题
- Overlay 的合并机制(
cp --remove-destination做了什么) - 使用
merge_overlay_rootfs.sh脚本合并 Overlay - 创建自定义 Overlay 的三个实战示例
- 不同环境(开发/生产/Qt6)的 Overlay 组织方式
- 调试和验证 Overlay 应用结果
预计阅读时间: 15 分钟
前置知识
在开始这些教程之前,建议你已经掌握:
基础构建流程 (../practical/02_build_system.md)
- 熟悉 U-Boot、内核、BusyBox 的编译过程
- 了解构建脚本的用法
Git 基础操作
- 分支管理、提交、推送等基本命令
- Git Submodule 的工作原理
Linux 文件系统基础
- 目录结构和文件权限
- 软链接和硬链接的区别
学习路径建议
基础构建教程 → out/ 目录结构 → Patch 工作流 → RootFS Overlay
(已掌握) (第1章) (第2章) (第3章)三个教程是相对独立的,你可以按需阅读:
- 如果你经常搞不清构建产物在哪,直接看第1章
- 如果你需要修改 U-Boot/内核代码,重点看第2章
- 如果你需要定制不同环境的 Rootfs,第3章是为你准备的
但如果你时间充裕,按顺序阅读一遍会更好,因为它们之间有一些关联(比如补丁会影响构建产物)。
实战环境说明
本教程基于以下环境编写:
- 项目: IMX-Forge (i.MX6ULL 嵌入式 Linux 发行版)
- 硬件: 正点原子阿尔法开发板 (i.MX6ULL)
- 主机: Ubuntu/Debian Linux
- 工具链: arm-none-linux-gnueabihf (15.2.x)
- 构建日期: 2026年5月
如果你的环境有所不同,命令路径和输出可能会有细微差异,但核心原理是一样的。
写在最后
这些教程不是"官方文档",而是我们在折腾 IMX-Forge 项目时的实战经验总结。我们踩过的坑、吃过的亏、犯过的错,都写在这里了,希望能帮你少走弯路。
如果教程中有任何错误或遗漏,欢迎提 issue 或 PR —— 一起让这个项目变得更好!
准备好了吗?让我们开始吧!