3、搭建Yocto开发环境:系统要求、安装必要软件包、克隆Poky仓库、首次构建
好,咱们正式开始动手了。搭建Yocto开发环境这件事,说简单也简单,说坑多也真不少。我这些年帮团队搭过不下二十次环境,每次都能遇到点新问题。今天我把最稳的流程走一遍,你跟着做就行。
3.1 系统要求:别在太老的系统上折腾
Yocto对宿主机的系统有要求。说白了,它需要一套比较新的工具链和库。我个人习惯用Ubuntu 20.04 LTS或22.04 LTS,这两个版本我验证过很多次,兼容性最好。
硬件方面,我建议至少满足以下配置:
| 硬件项 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4核 | 8核以上 |
| 内存 | 8GB | 16GB以上 |
| 磁盘 | 100GB空闲 | 200GB以上(SSD) |
| 网络 | 宽带连接 | 稳定的宽带 |
磁盘空间这块我要多说一句。第一次构建会下载大量源码包,加上编译产生的临时文件,轻轻松松吃掉80GB。我建议至少留150GB,否则构建到一半磁盘满了,那叫一个崩溃。
3.2 安装必要软件包
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 \
xterm python3-subunit mesa-common-dev zstd liblz4-tool
嗯,这里要注意。不同Yocto版本对软件包的要求略有差异。比如老版本不需要zstd和liblz4-tool,但新版本(比如Kirkstone之后)是必须的。我建议你直接用上面这条命令,它兼容当前主流版本。
3.3 克隆Poky仓库
Poky是Yocto的参考发行版,也是我们最常用的起点。克隆它很简单:
git clone git://git.yoctoproject.org/poky
cd poky
但这里有个坑——你克隆下来的是master分支,它可能不稳定。我建议你切到一个稳定的发布版本。比如:
git checkout -b kirkstone yocto-4.0.12
为什么选Kirkstone?它是LTS版本,支持周期长。我在产品项目中一直用这个分支,稳定性有保障。如果你做实验,也可以用最新版,但生产环境我强烈建议用LTS。
克隆完成后,你会看到poky目录下有几个关键子目录:
meta:核心的元数据层,包含基础配方meta-poky:Poky发行版的配置meta-yocto-bsp:板级支持包scripts:各种辅助脚本oe-init-build-env:初始化构建环境的脚本
这些目录以后你会经常打交道。尤其是meta目录,里面藏着大量配方文件,我没事就翻翻看,能学到不少东西。
3.4 首次构建:从零到镜像
好,重头戏来了。首次构建会编译一个完整的Linux系统,包括内核、根文件系统、工具链。这个过程比较耗时,但很有成就感。
先初始化构建环境:
source oe-init-build-env build
这个命令会创建一个build目录,并自动切换到该目录下。你会看到终端提示符变了,多了个build前缀。
然后配置目标架构。编辑conf/local.conf文件,找到MACHINE变量:
# 默认是qemux86-64,如果你想构建ARM版本:
MACHINE ?= "qemuarm64"
我个人习惯先构建qemux86-64,因为它最快,能快速验证环境是否正常。等确认没问题了,再切到目标架构。
接下来,开始构建:
bitbake core-image-minimal
这个命令会编译一个最小的Linux镜像。第一次构建时,BitBake会先下载所有依赖的源码包,然后逐一编译。这个过程取决于你的网络和CPU性能,一般需要1-3小时。
重要提示:首次构建时,BitBake会创建一个downloads目录,里面存放所有下载的源码包。这些包以后可以复用,千万别手欠删掉。我曾经清理磁盘时误删了,结果下次构建又得重新下载,白白浪费半天时间。
构建过程中,你可以用top或htop观察CPU和内存使用情况。如果发现内存吃紧,可以调整local.conf中的BB_NUMBER_THREADS和PARALLEL_MAKE参数,减少并行任务数。
构建成功后,你会看到类似这样的输出:
Summary: There was 1 WARNING message.
Summary: There were no ERROR messages.
生成的镜像文件在tmp/deploy/images/qemux86-64/目录下。你可以用QEMU直接启动它:
runqemu qemux86-64
看到QEMU窗口里Linux启动成功的那一刻,嗯,那种感觉还是很爽的。
3.5 避坑指南
最后分享几个我踩过的坑:
- 磁盘空间不足:构建过程中
tmp目录会急剧膨胀。我建议把build目录放在SSD上,并且预留足够空间。 - 网络问题:如果下载源码包失败,可以配置代理。在
local.conf中添加BB_GENERATE_MIRROR_TARBALLS = "1",然后手动下载放到downloads目录。 - Python版本冲突:Yocto需要Python 3.6以上。如果你系统默认Python是2.7,记得安装python3并设置别名。
- 时区问题:构建过程中如果系统时间不准,可能导致SSL证书验证失败。确保系统时间正确。
好了,环境搭好了,下一章咱们开始真正玩转多架构支持。到时候你会看到,Yocto的威力才刚刚开始展现。