2. Yocto 开发环境搭建:主机环境要求、安装 Yocto 依赖包、下载 Poky 源码、配置构建环境

说实话,很多初学者在 Yocto 上栽跟头,不是因为概念多难,而是环境没搭对。我见过太多人花一整天编译,最后报个莫名其妙的错——结果一看,缺了个依赖包。

这一章,咱们就把地基打牢。你跟着我的步骤走,保证后面顺风顺水。

2.1 主机环境要求

Yocto 对宿主机的脾气有点挑。不是随便哪台 Linux 都能跑的。我个人习惯用 Ubuntu 20.04 LTS 或 22.04 LTS,这两个版本社区支持最好,踩坑最少。

项目 最低要求 推荐配置
操作系统 Ubuntu 18.04 / CentOS 7 Ubuntu 22.04 LTS
CPU 双核 x86_64 4 核以上
内存 4 GB 16 GB 或更多
磁盘空间 50 GB 空闲 200 GB+ SSD
文件系统 ext4 ext4 / btrfs
Shell bash bash 4.4+
注意:千万别用 NTFS 或 FAT32 分区来放 Yocto 构建目录。我曾经有个同事图省事,把源码放在 Windows 共享盘上,结果编译到一半符号链接全炸了。Yocto 重度依赖符号链接和硬链接,文件系统必须原生支持。

2.2 安装 Yocto 依赖包

Yocto 的构建系统依赖一大堆工具链。说白了,就是编译器和各种库。Ubuntu 上一条命令就能搞定:

sudo apt-get update
sudo apt-get 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 pylint3 xterm python3-subunit \
  mesa-common-dev zstd liblz4-tool

嗯,这里要注意。不同 Yocto 版本对 Python 版本有要求。比如 Yocto 4.0 (Kirkstone) 要求 Python 3.8+。你可以在终端里跑一下 python3 --version 确认。

我的经验:如果你用的是 Ubuntu 22.04,默认 Python 3.10 完全够用。但如果你还在用 Ubuntu 18.04,记得先升级 Python。我遇到过因为 Python 版本太低,bitbake 直接罢工的情况。

2.3 下载 Poky 源码

Poky 是 Yocto 的参考发行版,也是我们学习的起点。下载它很简单,用 git clone 就行:

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

为什么我推荐 checkout 到特定分支?因为 Yocto 的 master 分支每天都在变。你想想看,今天能编译通过的代码,下周可能就报错了。锁定版本号,是工程化的基本素养。

下载完成后,目录结构大概是这样的:

poky/
├── bitbake/        # 构建引擎
├── meta/           # 核心元数据层
├── meta-poky/      # Poky 参考发行版配置
├── meta-yocto-bsp/ # 参考板级支持包
├── oe-init-build-env  # 环境初始化脚本
└── README

核心理解:Poky 不是一个完整的 Linux 发行版,而是一套构建系统 + 元数据集合。你下载的其实是「如何制作发行版」的配方,而不是发行版本身。

2.4 配置构建环境

这一步很关键。Yocto 不像普通软件那样直接 ./configure && make。它需要先初始化一个构建环境。

进入 poky 目录,执行:

source oe-init-build-env build

这条命令会做三件事:

  1. 设置一系列环境变量(比如 TEMPLATECONF、BBPATH)
  2. 创建 build/ 目录(如果不存在)
  3. 自动 cd 到 build/ 目录

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

### Shell environment set up for builds. ###

You can now run 'bitbake <target>'

Common targets are:
    core-image-minimal
    core-image-full-cmdline
    core-image-sato
    core-image-weston

这时候,build/conf/ 目录下会生成两个核心配置文件:

文件名 作用
local.conf 本地构建配置,比如目标架构、并行编译数、下载目录
bblayers.conf 定义哪些 meta 层参与构建

我个人习惯,拿到新环境后第一件事就是改 local.conf:

# 指定目标机器(比如 qemuarm64)
MACHINE ?= "qemuarm64"

# 并行编译线程数,一般是 CPU 核心数 + 1
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"

# 下载源码的缓存目录,避免重复下载
DL_DIR = "/home/yourname/yocto/downloads"

# 共享状态缓存,加速二次构建
SSTATE_DIR = "/home/yourname/yocto/sstate-cache"
避坑指南:我曾经在 DL_DIR 和 SSTATE_DIR 上吃过亏。如果你有多台机器或多次构建,一定要把这两个目录设到独立的大容量分区。否则每次 bitbake 都会重新下载几百 MB 的源码包,网络差的时候能急死人。

2.5 知识体系总览

下面这张图,把整个环境搭建的流程串起来了。你对照着看,心里就有谱了。

Yocto 开发环境搭建流程 主机环境检查 OS / CPU / 内存 / 磁盘 安装依赖包 apt-get install ... 下载 Poky 源码 git clone + checkout 初始化构建环境 source oe-init-build-env build 生成核心配置文件 local.conf + bblayers.conf 构建环境就绪 可以执行 bitbake 命令 💡 关键环境变量 TEMPLATECONF → 模板配置路径 BBPATH → bitbake 搜索路径 BUILDDIR → 构建输出目录

2.6 验证环境是否正常

环境搭好了,总得跑一下试试。我习惯先编译一个最小的镜像:

bitbake core-image-minimal

第一次编译会很久,大概 30 分钟到 2 小时不等,取决于你的网络和机器性能。它会下载交叉编译工具链、内核源码、各种库,然后全部编译一遍。

如果一切顺利,最后你会看到:

NOTE: Tasks summary: Attempted 1234 tasks of which 0 didn't need to be rerun.

看到这个,恭喜你,环境搭建成功了。

小技巧:第一次编译时,别干等着。你可以打开另一个终端,用 top 或 htop 观察 CPU 和内存使用情况。如果发现 swap 占用很高,说明内存不够,下次记得加内存或者减少并行任务数。

嗯,到这里,你的 Yocto 开发环境就彻底搭好了。后面咱们就可以开始研究设备树怎么集成进去了。