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+ |
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 确认。
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
这条命令会做三件事:
- 设置一系列环境变量(比如 TEMPLATECONF、BBPATH)
- 创建
build/目录(如果不存在) - 自动
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 知识体系总览
下面这张图,把整个环境搭建的流程串起来了。你对照着看,心里就有谱了。
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 开发环境就彻底搭好了。后面咱们就可以开始研究设备树怎么集成进去了。