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 LTSUbuntu 22.04 LTS避免使用非 LTS 版本
CPU4 核8 核及以上影响并行任务数
内存8GB16GB 及以上不足时需增加 swap
磁盘100GB200GB 以上 SSDsstate 与 tmp 占用较大
Python3.6+3.8/3.10BitBake 依赖 Python3
Git2.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
如果使用 CentOS/Fedora,需要安装对应的 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 依赖 Git 和 Python3,若 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 车载项目源码目录与构建关系 主机环境 Ubuntu 22.04 LTS Python3 / Git / Repo 依赖包完整安装 Repo 同步 repo init -u manifest repo sync -j8 多仓库统一管理 源码顶层目录 poky/ meta-openembedded/ meta-qt5/ meta-car/(车载自定义层) BitBake + OE-Core 扩展配方集合 Qt 支持层 机器/内核/镜像 构建环境初始化 source poky/oe-init-build-env build 生成 conf/local.conf 生成 conf/bblayers.conf 构建输出 tmp/ 工作目录与 sstate 缓存 tmp/deploy/images/ 镜像与根文件系统 tmp/work/ 各配方任务工作区 关键检查点 1. 依赖包是否完整 2. Git 用户信息是否配置 3. Repo 是否在 PATH 中 4. manifest 分支是否正确 5. 磁盘空间是否充足 6. 网络代理是否可用 7. bblayers 是否包含自定义层 8. local.conf 机器配置是否正确 9. 首次构建建议先 bitbake -k

五、常见误区与复盘

  • 误区一:直接在宿主机上混用多个 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 构建的四个基础支柱。只有把环境固定下来,后续的配方编写、内核裁剪、镜像定制和车载系统集成才能稳定推进。