1背景
SDK是米联客官方的MLK-RK02-CR02-RK3568 v1.3.0(Ubuntu 22.04 VMware 虚拟机内编译),目标板卡是AFH05。本文记录重点是 recovery Buildroot 补包和固件打包两个环节。
二、recovery Buildroot 补包马拉松
./build.sh all 卡在 recovery 阶段。根因:SDK 的 BR2_PRIMARY_SITE_ONLY=y 只走清华镜像,大批包 404。逐个补了35 + 个包,涉及 host 工具链、target 端、host 压缩工具(lz4/lzo/zstd/squashfs)。
网络通道:
用途 | 镜像源 |
Python 包 | 清华 PyPI |
GitHub 代理 | shturl.cc/7 |
内核 / 驱动 | kernel.org、xorg 镜像 |
压缩工具 | oberhumer、tuxera、sourceforge |
Debian 包 | snapshot.debian.org |
glibc /squashfs 哈希校验绕过
GitHub 直连超时(curl: (28) Resolving timed out),改用 git clone 本地打包:
cd /tmp && rm -rf squashfs-tools
git clone --depth 1 --branch 4.6.1 https://github.com/plougher/squashfs-tools.git
cd squashfs-tools
git archive --format=tar.gz --prefix=squashfs-tools-4.6.1/ \
-o /home/uisrc/mlk-sdk-rk3568-v1.3.0/buildroot/dl/squashfs/squashfs-4.6.1.tar.gz HEAD
sha256sum buildroot/dl/squashfs/squashfs-4.6.1.tar.gz
得到新 hash 后改 squashfs.hash:
NEWHASH=$(sha256sum buildroot/dl/squashfs/squashfs-4.6.1.tar.gz | awk '{print $1}')
sed -i "s/94201754.../$NEWHASH/" buildroot/package/squashfs/squashfs.hash
glibc 同理,备份原 hash:
cp buildroot/package/glibc/glibc.hash /tmp/glibc.hash.bak
三、整包固件制作
最终产物
./build.sh all
成功产出 output/firmware/update.img,包含:
- MiniLoaderAll.bin / uboot.img / misc.img
- boot.img / recovery.img(Buildroot)
- rootfs.img(Debian 主根文件系统,~4.4GB)
- oem.img / userdata.img
整包是纯 Linux(Debian + Buildroot recovery + U-Boot/RK3568 内核)
固件结构
分区 | 内容 |
MiniLoaderAll | DDR 初始化 + TPL/SPL |
uboot | U-Boot 引导 |
misc | 启动模式标记 |
boot | Linux 内核 + dtb |
recovery | Buildroot 根文件系统(FIT 镜像) |
rootfs | Debian 主根文件系统 |
oem | 厂商数据分区 |
userdata | 用户数据分区 |
四、经验总结
表格
问题 | 排查思路 | 解决方案 |
Buildroot 包 404 | BR2_PRIMARY_SITE_ONLY 只走清华镜像 | 手动补 dl 缓存 + 改 hash |
GitHub 直连超时 | DNS 解析失败 | shturl.cc/7 代理 /git clone 本地打包 |
glibc/squashfs hash 不匹配 | 官方 hash 是指定版本的校验值 | git archive 生成 tar.gz 后用新 hash 覆盖 |
核心教训:
- Buildroot 下载失败不要反复重试,先看 BR2_PRIMARY_SITE_ONLY 是否锁死了唯一镜像源
- 源码包版本对不上时,手动 git clone + git archive 生成本地 tar.gz,用 sha256sum 重新生成 hash 替换 .hash 文件,比改 BR2_DL_DIR 或注释校验更稳妥
- 整包固件制作是纯流程,只要 recovery Buildroot 补完,./build.sh all