2. Yocto开发环境搭建

说实话,很多初学者一上来就急着编译镜像,结果卡在各种环境问题上。我当年第一次接触Yocto时也踩过不少坑——明明照着文档一步步来,就是编译不过。后来才发现,宿主机环境没配好,后面全是白费功夫。

这一章,咱们就把地基打牢。环境搭好了,后面的事情就顺了。

1.1 宿主机要求

Yocto对宿主机有一定要求。不是随便拿台电脑就能跑的。我个人习惯用Ubuntu 20.04 LTS或22.04 LTS,这两个版本我都在项目中验证过,兼容性最好。

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

项目 最低要求 推荐配置
CPU 4核 8核及以上
内存 8GB 16GB以上
磁盘 100GB空闲 200GB以上(SSD)
操作系统 Ubuntu 20.04 Ubuntu 22.04 LTS
注意:千万别用虚拟机跑Yocto,除非你给它分配了足够的资源。我曾经在8GB内存的虚拟机上编译,等了整整6个小时还没跑完...后来换成物理机,2小时搞定。

为什么磁盘要求这么高?因为Yocto编译过程中会下载大量源码包,还会生成中间文件和最终镜像。你想想看,一个完整的Linux系统,光内核源码就几百兆,再加上各种库、工具链,轻松破百G。

1.2 安装必要软件包

Ubuntu系统默认安装的东西不够用。我们需要手动装一些依赖包。这里我直接给出最全的列表,省得你后面缺啥补啥,浪费时间。

打开终端,执行以下命令:

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 pylint3 xterm python3-subunit mesa-common-dev \
zstd liblz4-tool file locales libacl1

嗯,这里要注意一点。不同Ubuntu版本需要的包可能略有差异。比如Ubuntu 22.04需要额外安装python3-venv,而20.04就不需要。我建议你装完后跑一下Yocto自带的检查脚本,它会告诉你缺什么。

小技巧:装完包后,记得运行 sudo locale-gen en_US.UTF-8 设置语言环境。我遇到过因为locale没配好,编译到一半报错的尴尬情况。

1.3 配置Git和Repo

Yocto的源码管理依赖Git和Repo。Git大家应该都熟悉,Repo是Google开发的一个多仓库管理工具,专门用来管理像Yocto这种由几十个Git仓库组成的项目。

先配置Git:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global color.ui auto

这里我多说一句。Git的用户名和邮箱一定要配,不然Repo拉代码时会报错。我刚开始学的时候忘了配,折腾了半天才发现是这个问题。

然后安装Repo:

mkdir -p ~/.local/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.local/bin/repo
chmod a+x ~/.local/bin/repo

记得把~/.local/bin加到PATH里。在~/.bashrc末尾加上:

export PATH=$PATH:~/.local/bin

然后source ~/.bashrc让它生效。

1.4 下载Yocto源码(Poky)

Poky是Yocto项目的参考发行版,也是我们最常用的构建系统。说白了,它就是Yocto的"官方示例",包含了BitBake构建引擎、OpenEmbedded核心元数据,以及一系列参考配置。

下载Poky源码,我推荐用Repo工具:

mkdir yocto-project
cd yocto-project
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync

这里我选了kirkstone分支,这是Yocto的长期支持版本(LTS),稳定性好,社区支持也到位。如果你做商业项目,我建议就用这个版本。

repo sync会下载所有相关的仓库,包括BitBake、OpenEmbedded Core、Yocto文档等。这个过程取决于你的网速,一般需要10-30分钟。

核心知识点:Poky本质上是一个聚合仓库。它通过Repo工具把几十个独立的Git仓库组织在一起,形成一个完整的构建环境。你下载的不仅仅是"一个"项目,而是一整套构建系统。

1.5 首次构建最小系统

源码下载完了,咱们来编译第一个镜像。我选core-image-minimal,这是Yocto提供的最小系统镜像,只包含最基本的Linux组件。用它来验证环境,再合适不过。

先设置构建环境:

cd poky
source oe-init-build-env build

这个脚本会创建一个build目录,并自动切换到该目录。同时,它会设置一系列环境变量,让BitBake知道去哪里找配置文件、元数据和源码。

然后修改conf/local.conf文件。我个人习惯做以下调整:

# 使用4个并行任务,加快编译速度
BB_NUMBER_THREADS = "4"
PARALLEL_MAKE = "-j 4"

# 指定目标机器,这里用qemux86-64
MACHINE = "qemux86-64"

# 下载源码包的缓存目录,避免重复下载
DL_DIR = "/path/to/your/downloads"

# 共享状态缓存,加速后续构建
SSTATE_DIR = "/path/to/your/sstate-cache"

最后,开始构建:

bitbake core-image-minimal

第一次构建会非常慢,因为要下载所有依赖的源码包,还要编译交叉编译工具链。在我的8核16GB内存的机器上,大概需要1.5小时。如果你配置低一些,可能要3-4小时。

避坑指南:我曾经在构建过程中不小心关掉了终端,结果所有进度都丢了。后来学乖了,要么用screen或tmux来跑编译任务,要么确保网络和电源稳定。另外,编译过程中不要做其他重负载操作,否则会拖慢速度。

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

Parsing recipes: 100%
...
Tasks Summary: Attempted 1234 tasks of which 0 didn't need to be rerun and all succeeded.

Summary: There was 1 WARNING.

镜像文件在tmp/deploy/images/qemux86-64/目录下,文件名类似core-image-minimal-qemux86-64.wic。你可以用QEMU模拟器来启动它:

runqemu qemux86-64

看到登录提示符的那一刻,恭喜你——Yocto环境搭建成功了!

本章知识体系

下面这张图帮你理清本章的核心逻辑:

Yocto开发环境搭建流程 宿主机准备 Ubuntu 20.04/22.04 安装依赖包 gawk, git, python3... 配置Git & Repo 版本管理工具 下载Poky repo sync 首次构建:core-image-minimal source oe-init-build-env → bitbake core-image-minimal 配置local.conf MACHINE / 并行任务 / 缓存 编译过程 下载源码 → 编译 → 打包 验证结果 runqemu 启动测试 ✅ 开发环境搭建完成

这张图把整个流程串起来了。从宿主机准备开始,到安装依赖、配置工具、下载源码,最后完成首次构建。每一步都是下一步的前提,缺一不可。

好了,环境搭好了,后面的事情就好办了。记住,第一次编译慢是正常的,别着急。后面我们会一步步深入,从板级适配到镜像定制,把Yocto玩透。