旧手机给 AI 当沙盒:容器里编译单片机固件、跑 Web 后端

AI 做交叉编译测试,要在主力电脑上装整套 ARM 工具链,装完处理 PATH 与库冲突,测试完再卸。跑 Web 后端 demo,又要起 Node 或解释器环境。一次测试,主力机多出一堆临时环境。旧安卓手机接住这个活:Termux 里起 Debian 容器,工具链和 Web 服务都装在容器内,测试与主力机完全隔离。

沙盒结构

容器选型有一个硬约束:Termux 官方仓库没有 arm-none-eabi-gcc;xpack 的 aarch64 Linux 版是 glibc 动态链接,Alpine(musl)容器运行时报缺动态链接器,Debian(glibc)容器可以正常执行。容器必须与工具链的 libc 匹配。

单片机固件交叉编译

PY32 系列固件模板(Cortex-M0+,32 KB Flash / 4 KB RAM),70 个 C 文件(HAL 库全套)加启动汇编。arm-none-eabi-gcc -mcpu=cortex-m0 -mthumb 交叉编译,全量构建通过:

本机与手机耗时对比

环境 工具链 并行 全量耗时
本机 Windows GCC 14.3.1 Ninja 自动并行 6 s(热状态)
手机(proot 容器) GCC 15.2.1 -j4 44 s
手机(proot 容器) GCC 15.2.1 -j8 40 s

全量编译耗时对比

本机首次全量编译 21 秒,之后稳定在 5-6 秒,差距来自磁盘冷缓存与杀毒软件首次扫描。手机稳定在 40-44 秒,约为本机的 7-8 倍。

Web 后端:mongoose + SQLite

同一个沙盒里跑另一个 demo:C 语言 mongoose 库起 HTTP 服务器,SQLite 存数据,前端 HTML 页面对接增删查接口。浏览器直接访问手机 IP 即可操作,增删查和搜索全部在手机本地完成。这一套环境同样没有进入主力机,验证完即弃。

八核并行收益与瓶颈

手机是 8 核,-j8 只比 -j4 快 4 秒。瓶颈不在 CPU 并行度,在 proot 虚拟化层的 IO 开销:每次文件读写都要经过 proot 路径翻译,编译过程大量临时文件的读写放大了这部分开销。手机单核性能本身也弱于主力机,并行无法补偿。

适用边界

值得用手机沙盒的场景:AI 驱动的工具链安装实验、交叉编译环境反复装包卸包的测试、Web 后端 demo 验证、需要隔离环境跑脚本。日常高频编译仍用主力机,6 秒与 40 秒的差距不值得为隔离付出。

边界两条:proot 容器无 root,涉及设备映射或特权操作受限;交叉工具链必须是 Linux aarch64 版本,与容器 libc 匹配。