4. 开发环境搭建
Yocto 构建系统对主机环境有明确要求,因为 BitBake 在解析配方、执行任务时会大量调用宿主机的 Python、Shell、编译器和归档工具。如果宿主机缺少关键依赖,构建过程往往在解析阶段就报错,或者在中途出现难以定位的失败。因此,搭建一个干净、可复现的主机环境,是车载 Linux Yocto 项目的第一步。
一、主机环境要求
官方推荐使用 Ubuntu 20.04/22.04 LTS 或同等版本的 Debian 系发行版,磁盘建议预留 200GB 以上,内存至少 8GB,若使用 bitbake 并行构建,建议 16GB 以上并配置足够 swap。CPU 核心数越多,构建速度越快,但也要注意磁盘 I/O 和内存瓶颈。主机还需要具备稳定的网络访问能力,因为构建过程中会从上游下载源码、补丁和工具链。
| 项目 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
| 操作系统 | Ubuntu 20.04 LTS | Ubuntu 22.04 LTS | 避免使用非 LTS 版本 |
| CPU | 4 核 | 8 核及以上 | 影响并行任务数 |
| 内存 | 8GB | 16GB 及以上 | 不足时需增加 swap |
| 磁盘 | 100GB | 200GB 以上 SSD | sstate 与 tmp 占用较大 |
| Python | 3.6+ | 3.8/3.10 | BitBake 依赖 Python3 |
| Git | 2.20+ | 2.30+ | Repo 工具依赖 Git |
二、依赖包安装
Yocto 官方文档给出了完整的依赖包列表,涵盖编译工具、Python 模块、压缩解压工具、文档生成工具等。安装时建议一次性安装完整,避免构建过程中反复补包。以下命令适用于 Ubuntu/Debian:
sudo apt update
sudo apt install -y gawk wget git diffstat unzip texinfo gcc build-essential \
chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils \
iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
pylint xterm python3-subunit mesa-common-dev zstd liblz4-tool file locales
sudo locale-gen en_US.UTF-8
epel-release 和 python3 相关包,并注意 chrpath、socat 等工具的名称差异。建议在 Docker 或虚拟机中固定环境,便于团队统一。三、Git 与 Repo 工具配置
Git 用于管理单个仓库,Repo 是 Google 提供的多仓库管理工具,适合 Yocto 这种由 poky、meta-openembedded、meta-qt5 等多个仓库组成的项目。首先配置 Git 用户信息:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global core.autocrlf input
然后安装 Repo 工具。Repo 本身是一个 Python 脚本,通常放到 ~/bin 并加入 PATH:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
repo --version
repo init 报 SSL 或代理错误,需检查网络代理、CA 证书以及 http_proxy/https_proxy 环境变量。企业内网建议配置镜像或本地 manifest 服务器。四、源码下载与目录结构解析
以典型的车载 Yocto 项目为例,使用 Repo 初始化 manifest 并同步源码:
mkdir -p ~/yocto-car && cd ~/yocto-car
repo init -u https://example.com/manifest.git -b kirkstone -m car.xml
repo sync -j8 --no-tags
同步完成后,顶层目录通常包含 poky、meta-openembedded、meta-qt5、meta-car 等目录。其中 poky 是 Yocto 的核心构建系统,包含 BitBake、OpenEmbedded Core 和参考 BSP;meta-car 是车载项目自定义层,存放机器配置、内核配方、镜像配方和系统服务。构建时通过 oe-init-build-env 初始化环境,生成 build/conf/local.conf 和 bblayers.conf。
五、常见误区与复盘
- 误区一:直接在宿主机上混用多个 Yocto 版本。不同版本的 BitBake 和 OE-Core 对 Python 版本、依赖包要求不同,容易互相污染。建议每个项目使用独立目录或容器。
- 误区二:忽略
local.conf中的DL_DIR和SSTATE_DIR配置。默认下载目录在项目内,多个项目重复下载会浪费大量时间和磁盘。建议统一设置共享缓存目录。 - 误区三:Repo manifest 分支与 BSP 层不匹配。例如 manifest 使用
kirkstone,但自定义层仍停留在dunfell,会导致配方解析失败。同步后应检查各层layer.conf的兼容性。 - 误区四:首次构建直接跑完整镜像。建议先用
bitbake core-image-minimal验证环境,再逐步加入车载中间件和 Qt 组件,便于快速定位问题。
bitbake -e 或 bitbake -s 检查配方解析是否正常,并记录 build/conf/local.conf 中的关键变量,作为团队环境基线。总体而言,主机环境、依赖包、Git/Repo 配置和源码目录结构是 Yocto 构建的四个基础支柱。只有把环境固定下来,后续的配方编写、内核裁剪、镜像定制和车载系统集成才能稳定推进。