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

好,咱们正式开始动手了。搭建Yocto开发环境这件事,说简单也简单,说坑多也真不少。我这些年帮团队搭过不下二十次环境,每次都能遇到点新问题。今天我把最稳的流程走一遍,你跟着做就行。

3.1 系统要求:别在太老的系统上折腾

Yocto对宿主机的系统有要求。说白了,它需要一套比较新的工具链和库。我个人习惯用Ubuntu 20.04 LTS或22.04 LTS,这两个版本我验证过很多次,兼容性最好。

注意:千万别用Ubuntu 18.04以下的版本。我去年有个同事非要用16.04,结果编译到一半报错,折腾了两天才发现是系统太老,glibc版本不够。

硬件方面,我建议至少满足以下配置:

硬件项 最低要求 推荐配置
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版本对软件包的要求略有差异。比如老版本不需要zstdliblz4-tool,但新版本(比如Kirkstone之后)是必须的。我建议你直接用上面这条命令,它兼容当前主流版本。

小技巧:如果你用的是CentOS或Fedora,安装命令会不一样。但我个人强烈建议用Ubuntu,省心。曾经有个项目非要我在CentOS上搭环境,结果光解决依赖冲突就花了一天。

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目录,里面存放所有下载的源码包。这些包以后可以复用,千万别手欠删掉。我曾经清理磁盘时误删了,结果下次构建又得重新下载,白白浪费半天时间。

构建过程中,你可以用tophtop观察CPU和内存使用情况。如果发现内存吃紧,可以调整local.conf中的BB_NUMBER_THREADSPARALLEL_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的威力才刚刚开始展现。