构建命令
本章介绍 compile.sh 支持的各类构建命令,包括内核编译、镜像构建、配置菜单等常用操作。
构建框架提供了多个子命令,用于完成内核编译、补丁管理、设备树验证、清单生成等不同任务。每次执行 ./compile.sh 时只能指定一个命令。
所有命令的基本调用格式:
./compile.sh <命令> [参数...]
以下是各命令的详细说明。
1. 内核与设备树
1.1 kernel
编译内核和设备树(如适用),并将产物输出到 output/debs 目录。
用法:
./compile.sh kernel BOARD=nanopi-r5c BRANCH=edge
1.2 kernel-config
自动调用内核的 make menuconfig,用于添加或移除模块与功能。
用法:
./compile.sh kernel-config BOARD=nanopi-r5c BRANCH=edge
1.3 rewrite-kernel-config
自动验证内核配置变更及其依赖链。手动编辑给定芯片系列和分支的配置后,需要执行此命令以确保配置变更在 CI 中能够持久生效。
用法:
./compile.sh rewrite-kernel-config BOARD=xxxxx BRANCH=current
1.4 dts-check
验证设备树源文件(dts),改进单板与补丁的开发工作流。
此命令针对所选单板,根据设备树绑定(device tree bindings)验证 dts/dtb 文件,并向用户输出验证日志。可用于添加新单板、开发或优化 dts 文件时。
用法:
./compile.sh dts-check BOARD=nanopi-r5c BRANCH=edge
1.5 kernel-dtb
仅编译 DTB,并输出完整的预处理后 dts 源码。
将目标单板的预处理后 DTS 源码输出到 output/ 目录,同时输出相同的预处理后 DTS 源码经过 dtc 处理、以输入和输出 DTS 格式呈现的结果,用于"规范化"比较。
用法:
./compile.sh kernel-dtb BOARD=xxxxx BRANCH=edge
2. 补丁管理
2.1 uboot-patch
为 u-boot 创建补丁文件。
输出的补丁文件会写入:
output/patch/u-boot-${LINUXFAMILY}-${BRANCH}.patch
要在后续构建中使用这些补丁,必须将它们复制到 patch/u-boot 目录下对应的子目录中。参见:用户提供的补丁。
2.1.1 工作流程
工作树和索引中所有未提交的更改都会被提交,以建立干净的工作树。运行 uboot-patch 时最好没有未提交的更改。
如果上述输出路径已存在补丁文件,则可能会在继续工作前先应用该补丁。
当出现提示:
Press <ENTER> after you are done editing in ${pwd}
请在另一个窗口中导航到指定目录并进行所需的修改。修改完成后,回到运行 uboot-patch 命令的窗口并按 <ENTER>。
系统会展示一个用于重现 u-boot 树中所做更改的补丁,并提示"你对这个补丁满意吗?"。你可以回复:
yes— 接受补丁原样并生成输出补丁文件stop— 中止命令且不生成输出补丁文件- 其他任何内容 — 返回循环,做进一步修改
2.1.2 注意事项
与其在运行 uboot-patch 时创建新文件,不如:
- 新的设备树文件应该创建在
patch/u-boot下相关的dt目录中 - 新的
_defconfig文件应该创建在patch/u-boot下相关的configs目录中
虽然 uboot-patch 命令会将在运行期间创建的新文件加入补丁,但这不是添加这些文件的推荐方式。
2.2 rewrite-uboot-patches
准备 git,将补丁应用到 git,再从 git 重新写回补丁。与内核类似,它会对无 mbox 的补丁进行 git 考古等操作。
应设置 MAINTAINER 和 MAINTAINEREMAIL 环境变量。
- 同时提供了
uboot-patches-to-git别名,但rewrite更实用 - 计划为内核和 uboot 重构一个通用的配置函数
用法:
./compile.sh rewrite-uboot-patches BOARD=xxxx BRANCH=edge
2.3 rewrite-kernel-patches
准备 git,将补丁应用到 git,再从 git 重新写回补丁。与 uboot 类似,它会对无 mbox 的补丁进行 git 考古等操作。
用法:
./compile.sh rewrite-kernel-patches BOARD=xxxx BRANCH=edge
3. 清单与目标
3.1 inventory-boards
输出每行一个单板的 CSV 清单。
该命令会将 TARGETS_FILE 设置为不存在的路径,从而强制使用 default-targets.yaml(确保每个人得到的列表一致,用户自定义补丁的单板除外)。
用法:
./compile.sh inventory-boards
输出文件路径:/info/boards-inventory.csv
3.2 targets
生成 output/info/git_sources.json 文件,包含 URL、分支和提交哈希的组合。
为所有设备生成该文件最简单的方式是运行 ./compile.sh targets。在发布时,将 output/info/git_sources.json 文件复制到 config/sources/git_sources.json。文件复制完成后,对于指定了分支而非标签或提交的 git 仓库,将使用该文件中的哈希信息来获取资源。
用法:
./compile.sh targets