3. 搭建Yocto开发环境:主机系统要求、必备软件包安装、克隆Poky仓库、首次构建最小系统

说实话,很多初学者在Yocto上栽跟头,不是因为概念多难,而是环境没搭对。我见过太多人花一整天折腾依赖包,最后发现是Ubuntu版本不对。这一章,咱们就把地基打牢。

3.1 主机系统要求

Yocto对宿主机的脾气有点挑。不是所有Linux发行版都能跑得顺,我个人的经验是——Ubuntu 20.04 LTS 或 22.04 LTS 最省心。Debian、Fedora、OpenSUSE也能用,但遇到奇怪的问题时,你可能会怀疑人生。

项目 最低要求 推荐配置
CPU 4核 8核或以上
内存 8GB 16GB或以上
磁盘空间 100GB空闲 250GB+ SSD
文件系统 ext4 ext4(不要用NTFS/FAT)
网络 宽带连接 稳定的宽带
注意: 千万别把Yocto构建目录放在NTFS或FAT分区上。我曾经有个同事,图省事把代码放在Windows共享盘里,结果构建到一半疯狂报错,查了两天才发现是文件系统不支持符号链接。嗯,血的教训。

3.2 必备软件包安装

Ubuntu系统下,我习惯用 apt 一把梭。但要注意,不同Yocto版本对依赖包的要求略有差异。以当前最新的 Kirkstone (4.0) 分支为例,你需要安装以下这些:

sudo apt update
sudo apt install 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 \
  xterm python3-subunit mesa-common-dev zstd liblz4-tool file locales libacl1

为什么列这么多?你想想看,Yocto本质上是一个构建系统,它要下载源码、打补丁、配置、编译、打包,每一步都可能调用不同的工具。缺一个包,构建就可能卡在某个奇怪的地方。

小技巧: 我个人习惯装完包后跑一下 locale-gen en_US.UTF-8,确保locale设置正确。否则构建时可能会遇到奇怪的字符编码错误。

3.3 克隆Poky仓库

Poky是Yocto的参考发行版,也是我们入门的起点。说白了,它就是一套完整的构建框架加一堆元数据。克隆它很简单:

mkdir ~/yocto
cd ~/yocto
git clone git://git.yoctoproject.org/poky -b kirkstone
cd poky

这里我选了 kirkstone 分支,它是LTS版本,稳定性好。如果你做汽车级产品,我强烈建议用LTS分支,而不是追最新。

克隆完成后,你会看到这样的目录结构:

poky/
├── bitbake/        # 构建引擎
├── meta/           # 核心元数据
├── meta-poky/      # Poky参考发行版配置
├── meta-yocto-bsp/ # 参考板级支持包
├── oe-init-build-env  # 环境初始化脚本
└── ...
核心理解: bitbake 是引擎,meta 是配方和配置。引擎+配方=构建产物。这个关系搞清楚了,后面学起来就顺了。

3.4 首次构建最小系统

好,环境搭好了,仓库也克隆了。现在我们来构建第一个镜像——core-image-minimal。这是Yocto世界里的"Hello World",只包含最基本的Linux内核和根文件系统。

先初始化环境:

cd ~/yocto/poky
source oe-init-build-env build-minimal

这个脚本会做两件事:

  • 设置一系列环境变量(比如 BBPATH、BUILDDIR)
  • 自动 cd 到构建目录 build-minimal

然后修改 conf/local.conf,至少确认这几项:

MACHINE ??= "qemux86-64"
DL_DIR ?= "${TOPDIR}/../downloads"
SSTATE_DIR ?= "${TOPDIR}/../sstate-cache"

这里我解释一下:

  • MACHINE:目标机器,默认是 qemux86-64,也就是QEMU模拟的x86_64平台。初学者先用这个,不用烧硬件。
  • DL_DIR:源码下载缓存目录。我习惯把它放在构建目录外面,这样多个构建可以共享下载好的源码包,省带宽也省时间。
  • SSTATE_DIR:共享状态缓存目录。这个很重要,后面增量构建全靠它提速。

最后,启动构建:

bitbake core-image-minimal

第一次构建会非常慢,我实测过,在8核16GB的机器上,大概需要40分钟到1小时。为什么这么久?因为Yocto要从源码开始编译交叉工具链、内核、根文件系统里的每个包。说白了,它不是在装软件,而是在"从零制造"一个Linux系统。

避坑指南: 我曾经在构建到一半时发现磁盘满了。Yocto构建过程中会产生大量临时文件,尤其是 tmp/ 目录。建议至少留100GB空闲空间。如果空间不够,可以用 df -h 提前检查。

构建成功后,你会看到类似这样的输出:

NOTE: Tasks Summary: Attempted 1234 tasks of which 0 didn't need to be rerun and all succeeded.

生成的镜像在 tmp/deploy/images/qemux86-64/ 目录下。你可以用QEMU直接启动它:

runqemu qemux86-64

看到QEMU窗口里Linux启动、登录提示符出现的那一刻,恭喜你——你的Yocto环境已经彻底打通了。

3.5 本章知识结构

下面这张图,把整个环境搭建的流程和关键节点串起来了。你可以把它贴在工位旁边,以后每次搭建新环境时对照着来。

Yocto开发环境搭建流程 Yocto开发环境搭建流程 主机系统准备 安装必备软件包 克隆Poky仓库 初始化构建环境 bitbake core-image-minimal 关键配置项 • MACHINE = "qemux86-64" • DL_DIR 共享下载缓存 • SSTATE_DIR 共享状态缓存 首次构建耗时 • 8核16GB:约40-60分钟 • 4核8GB:可能2小时+ 验证方法 • runqemu qemux86-64 • 查看 tmp/deploy/images/

这张图把从主机准备到首次构建的完整路径画清楚了。你跟着箭头走,每一步都有对应的操作。遇到问题时,回头看看这个流程,通常能快速定位是哪个环节出了岔子。

我的习惯: 每次搭建新环境,我都会先检查 cat /proc/cpuinfo | grep processor | wc -l 确认CPU核数,然后用 free -h 看内存。这两个数字直接决定了首次构建要等多久。如果资源不够,我建议用 BB_NUMBER_THREADS 和 PARALLEL_MAKE 限制并行度,别把机器跑死。