Skip to content

Mac 原生编译瑞芯微与地瓜机器人平台

在 Apple Silicon Mac 上,用 arm64 原生容器全量编译 Rockchip RV1126B 与 D-Robotics S100P 两套嵌入式 SDK。 kernel 编译提速 4~7 倍,amd64/x86 原路径零破坏,两平台均已烧录上板验证。

成果

指标说明
~7×S100P kernel:63.5 → 9.1 min(gcc 整数密集负载下 Rosetta 损耗远超估算)
~4.1×RV1126B kernel:1217s → 293s(-j14 高并行摊薄了单核损耗,提升倍数低于 S100P)
全链路S100P:mcu / kernel / deb-all / 完整镜像 ✓;RV1126B:kernel / buildroot / recovery / update.img / AMP RISC-V MCU ✓
零破坏x86 Linux 原生、Mac+Rosetta、Mac arm64 原生三套并存,同一命令切换

总览:怎么跑起来的

平台切换只是一个环境变量,默认仍是 amd64(同事 x86 主机零影响)

平台命令
RV1126BRV1126B_BUILD_PLATFORM=linux/arm64 scripts/docker/build.sh kernel
S100PS100_BUILD_PLATFORM=linux/arm64 west s100-build kernel

两道入场关卡

血泪前提

没有「区分大小写卷」这个前提,后面一切皆空——内核 netfilter 成对文件会被 macOS 静默合并。

核心突破一:官方根本不给 aarch64 宿主工具链

适配的中心难题:SDK 硬编码 aarch64-none-linux-gnu-* 前缀,但 ARM/Linaro 从来不发布 aarch64 宿主的这个工具链

配套小修(都因 GCC 11.4 比旧工具链严格):

现象根因对策
RV1126B get_toolchain 直接 exit 1「aarch64 宿主编 aarch64 目标」分支没人写补 native 分支返回 shim 前缀
rtl8733bu 驱动编译报错CONFIG_WERROR=y + GCC 11 加强的 -Wmisleading-indentationnative 下追加 KCFLAGS=-Wno-error

核心突破二:rkbin 是 x86-only,但只卡在打包

另外实测澄清了一个交接误传:check-sdk 根本没有 arch 检查(只查 FSTYPE 白名单 + 工具存在性),arm64 容器直接能过——真正的 x86-only 只有 rkbin。

S100P 全链路

关卡修法
deb-all依赖 rootfs sysroot,裸跑直接挂image-prepare(下载 samplefs 2.5GB)
image-preparetar --same-owner 在 virtiofs 被拒(容器 root 实为 uid 501)检测 virtiofs 跳过 owner 修正
打镜像mkfs.ext4 -d 对 symlink 报 ENOENT(1.46 太老)编译 e2fsprogs 1.47 + -E no_copy_xattrs
首启扩容失败1.47 默认开 orphan_file,板端 1.46 不识别mke2fs-O ^orphan_file
adb 起不来见下面「三层断案」fix_rootfs_ld_path() 落进镜像

adb 断案:-ENODEV 不是驱动缺补丁

RV1126B 全链路

AMP MCU 五连坑(RISC-V 固件编通记)

编译查不出的坑

AMP 共享内存地址在 link.lds / ITS / DTS / 三处源码里各硬编码一次——改布局必须 6 处同步,错位只能上板才发现。

buildroot 的坑

修法
Go 1.4 bootstrap 不支持 aarch64换预编译 Go 1.19 作 stage1
sources.buildroot.net 国内 ~1KB/s大包手动下载放 dl/
rkaiq 的 j2s 宿主工具硬编码 x86 标志(-m64 等)直接删掉(本就冗余)
rsync --exclude 'rockdev/' 误伤打包工具目录改顶层锚定 '/rockdev/'

烧录:两家各一套机制

RV1126B(Rockchip)S100P(D-Robotics)
工具upgrade_tool / rkdeveloptoolHorizon fastboot(flash_all.sh -m all
进下载模式adb reboot loader,等 5-18s 枚举(Vid 0x2207)串口连发 Ctrl+C 打断 0 延迟 autoboot → Hobot$fastboot 0
关键细节mac 版工具需 unzip + chmod\x03 必须 ~100ms 间隔逐个发;10ms 连发会淹没 U-Boot 输入缓冲反而失败

工具链分发:重要的工具,自己托管一份

换机、换同事、上游链接失效都不怕——构建时自动补齐,实测公网 24 MB/s。

踩坑速查

现象根因修法
kernel 成对文件丢失APFS 大小写不敏感区分大小写卷
check-sdk 报 ext4virtiofs 不在白名单Docker 卷构建
容器 apt 代理 refused容器内 127.0.0.1 是容器自己代理写 host.docker.internal
"no name for user ID 501"Mac uid 无容器用户Dockerfile ARG 动态建用户
docker build 拉 metadata 超时auth.docker.io 需代理仅给 metadata 设代理,apt 走直连
改了源码重跑仍报旧错buildroot .stamp_extracted 门控rm -rf output/*/build/<pkg>-*
adb 多台报 more than one两台板子并存ANDROID_SERIAL=<序列号> 指定