本文所有命令都在下面这套环境里验证通过:Ubuntu 18.04.6 LTS(64 位)、16 核 / 32GB 内存 / 300GB 可用磁盘、普通用户(非 root)构建。除前文列出的依赖包外,实际编译中还有几处容易被忽略的前置条件,踩过之后建议一次配好:
sudo apt install git build-essential cmake python3-distutils gcc g++ make file wget gawk diffstat bzip2 cpio chrpath zstd lz4 bzip2 libncurses5 libncurses5-dev
- 不要用 root 构建。用 sudo 或 root 跑一次 bitbake,downloads、sstate-cache 里就会出现 root 属主的文件,之后普通用户再编译会遇到权限问题;新版 git(2.35+)还会因此触发"可疑仓库所有权"拒绝操作。若已经混用,用 sudo chown -R 把自己加回去;
- 系统时间要正确。镜像版本号与部分产物文件名带编译时刻,时间明显偏差会让版本号看起来"回到过去",排查升级问题时极易误判;
- 磁盘写满比内存不足更常见。sstate-cache 与 tmp 会持续增长;200GB 是底线,做多机型并行时建议按机型分目录并定期清理 tmp;
- 内存不足的表现很隐蔽。编译到 meson/ninja 阶段若被 OOM Killer 杀掉,终端上通常只看到莫名的 configure 失败或 "Killed",此时先用 free -h 与 dmesg 确认,再考虑加 swap 或降低并行度(BB_NUMBER_THREADS / PARALLEL_MAKE);
- 从 Windows 传入的脚本必须先转 LF。编辑器保存的 CRLF 会让脚本首行变成 #!/usr/bin/env python3\r,运行时报 No such file or directory——这个报错指向的解释器路径看起来完全正常,非常容易误判。传文件后用 file 或 cat -A 确认一下行尾;
- Python 版本。18.04 自带 python3.6,工程脚本若用到 3.7+ 的语法(如 dataclasses、海象运算符)会直接语法错误,写辅助脚本时注意兼容;