- Shell 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| scripts | ||
| .gitignore | ||
| README.md | ||
Buildroot 编译测试
在自建 Forgejo + Forgejo Runner 上全量编译 buildroot/buildroot
的 QEMU 镜像(qemu_aarch64_virt / qemu_x86_64 / qemu_riscv64_virt / qemu_arm_vexpress),
只看编译能不能跑完、花了多久——用来衡量 runner 机器的编译性能(比如 2C12G 的 ARM VPS)。
不发布 Release,不做启动验证;产物镜像留在 out/<板子>/images/ 里,想看结果可以去 runner 上看。
目录结构
.forgejo/workflows/build.yml # 定时与手动触发的编译流水线
scripts/install-deps.sh # 安装宿主机编译依赖
scripts/prepare.sh # 拉取 Buildroot 源码到指定 ref
scripts/build.sh # 逐板 defconfig + 编译 + 计时
src/ # Buildroot 源码(构建时生成)
out/ # 各板子 output、日志、耗时汇总(构建时生成)
scripts/build.sh 对每个板子只做四步:make O=out/<板子> <板子>_defconfig → 追加
BR2_CCACHE* / BR2_DL_DIR 到 .config → make olddefconfig → make source → make -j。
板级内容全部由 Buildroot 自带的 configs/*_defconfig 决定,这个仓库不维护任何配置文件。
耗时怎么看
构建结束后每个板子会打印一行,同时追加到 out/timings.txt:
2026-10-16 13:30:47 qemu_aarch64_virt -j4 download 62s compile 2013s total 2075s
download段是make source,首次会把内核、工具链、QEMU 等源码包拉下来;缓存命中后基本是几秒。compile段是make -j,这才是机器的真实性能指标。out/logs/<板子>.log里每分钟有一行[monitor] load=… disk=… mem_avail=…, 可以回看编译期间的负载、磁盘和内存余量:耗时异常、编译中途被杀,多半能从这里看出原因。- 想让多次数据可比:在 workflow 里设固定的
MAKE_JOBS(默认按可用内存推导),并且注意 ccache 命中率——第二轮会比第一轮快很多(脚本会在日志里打印ccache -s)。想测"冷启动"性能就清掉/ccache。
触发方式
定时:cron: '0 17 * * *' 按 UTC 解释,即北京时间每天 01:00,使用 DEFAULT_SOURCE_REF(默认 2026.02.3,
当前 LTS)和 DEFAULT_BOARDS(默认 qemu_aarch64_virt)。定时任务只在默认分支生效。
手动:workflow_dispatch 提供
source_ref:Buildroot 版本下拉(2026.02.3、2026.05.3、2026.08、master等)source_ref_custom:填了就用它,覆盖下拉选项(上游发新 tag 时不用改 workflow)boards:Buildroot 的 defconfig 前缀,空格分隔,例如qemu_aarch64_virt qemu_x86_64; 写别的也行,只要configs/<名字>_defconfig存在(ls src/configs | grep defconfig可查)
首次使用前
- runner 标签:
build.yml里写的是ubuntu-latest,改成你 runner 实际声明的标签。建议该标签映射到 Ubuntu 22.04/24.04 镜像,例如 runner 配置里的ubuntu-latest:docker://ghcr.io/catthehacker/ubuntu:act-24.04。 镜像需带apt,步骤以 root 运行。 - 磁盘:一个板子的
out/<板子>/(工具链 + 内核 + 包)约 5~10GB,out与/dl、/ccache共用一个盘。 建议留 20GB 以上;构建脚本在剩余空间 <20GB 时会打警告。 - 第一次先手动跑一个板子(
boards填qemu_aarch64_virt),确认依赖装得上、能编完,再开定时任务。
本地手工运行
cd buildroot-qemu-ci
export SOURCE_REPO=https://github.com/buildroot/buildroot
export DEFAULT_SOURCE_REF=2026.02.3
export DL_DIR=$PWD/out/dl CCACHE_DIR=$PWD/out/ccache
bash scripts/install-deps.sh
bash scripts/prepare.sh
BOARDS_INPUT=qemu_aarch64_virt MAKE_JOBS=2 bash scripts/build.sh
参考量级(qemu_aarch64_virt,含 BR2_PACKAGE_HOST_QEMU=y 会额外编一份宿主 QEMU):
4 核容器约 30~45 分钟,2 核机器预计 1 小时以上,具体以 timings.txt 为准。
常见问题
编译被静默杀掉(没有报错就结束):先看 out/logs/<板子>.log 里的 [monitor] 行——磁盘写满或被
OOM killer 杀掉都不会留下正常报错。降 MAKE_JOBS 重试(脚本在 137/143/139 退出码时会自动降并行度重试一次)。
make source 一直失败:多半是网络。日志里有具体 URL,可以把外部镜像设为 BR2_PRIMARY_SITE
(workflow 里导出同名环境变量即可,build.sh 会写进 .config),或先手工把 tarball 放进 DL_DIR。
耗时波动大:确认两次运行的 MAKE_JOBS、ccache 状态、/dl 是否命中一致;VPS 上还要留意
邻居超卖(看 [monitor] 行的 load 与编译时间是否同步恶化)。