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) |
| 网络 | 宽带连接 | 稳定的宽带 |
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系统。
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 本章知识结构
下面这张图,把整个环境搭建的流程和关键节点串起来了。你可以把它贴在工位旁边,以后每次搭建新环境时对照着来。
这张图把从主机准备到首次构建的完整路径画清楚了。你跟着箭头走,每一步都有对应的操作。遇到问题时,回头看看这个流程,通常能快速定位是哪个环节出了岔子。
cat /proc/cpuinfo | grep processor | wc -l 确认CPU核数,然后用 free -h 看内存。这两个数字直接决定了首次构建要等多久。如果资源不够,我建议用 BB_NUMBER_THREADS 和 PARALLEL_MAKE 限制并行度,别把机器跑死。