2、开发环境搭建:宿主机要求与首次构建

好,咱们正式开始动手了。这一章我带你搭好环境,把第一个最小镜像跑起来。你想想看,Yocto 再强大,也得先有个能跑的环境。我个人习惯用 Ubuntu 20.04 LTS,稳定,坑少。

2.1 宿主机要求

先说硬件。Yocto 编译起来挺吃资源的,别指望拿个老旧笔记本就能跑。我在项目中遇到过有人用 4GB 内存的虚拟机,结果编译到一半直接 OOM 了,白等两小时。

项目 最低要求 推荐配置
CPU 4 核 8 核或更多
内存 8 GB 16 GB 以上
磁盘 100 GB 空闲 250 GB SSD
操作系统 Ubuntu 20.04 / Debian 11 Ubuntu 22.04 LTS
注意: 磁盘空间一定要留够。我第一次编译 core-image-minimal 就吃了 30GB,后面加上 SDK 和第三方层,轻松破 100GB。建议用 SSD,机械硬盘编译速度慢到怀疑人生。

2.2 安装必要软件包

Ubuntu 系统装好后,第一件事就是装依赖。Yocto 官方文档列了一长串,我帮你精简成最核心的几条命令。

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

嗯,这里要注意。不同 Ubuntu 版本包名可能略有差异。比如 Ubuntu 22.04 里 python3-pexpect 可能叫 python3-pexpect 但版本不同。我建议装完后跑一下 oe-check-env 脚本验证,后面会讲到。

小技巧: 如果你用的是 Debian,记得先启用 non-free 源,否则有些 firmware 包装不上。我曾经在 Debian 11 上踩过这个坑,折腾了半小时才发现。

2.3 配置 Git 和 Repo

Yocto 的源码管理依赖 Git,而 Repo 工具用来管理多个 Git 仓库。说白了,Repo 就是个脚本,帮你一次性拉取 Poky、meta-openembedded 等一堆仓库。

先配 Git 的用户信息,这是基本操作:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global color.ui auto

然后安装 Repo:

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

为什么用 Repo?你想想看,Yocto 项目往往涉及几十个 Git 仓库,手动一个个 clone 会疯掉。Repo 用一个 manifest 文件就能描述所有仓库的版本关系,非常方便。

2.4 下载 Poky 源码

Poky 是 Yocto 的参考发行版,也是我们学习的起点。我建议用稳定分支,别追最新,否则容易遇到未修复的 bug。

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

这里 kirkstone 是 Yocto 4.0 的长期支持版本。我个人习惯用 LTS 版本做产品,稳定第一。如果你做实验,也可以用 master 分支,但要做好随时踩坑的准备。

核心概念: Poky 不仅仅是一个构建系统,它包含了 BitBake、OpenEmbedded-Core 以及一系列元数据。你下载的 poky 目录就是 Yocto 的根目录。

2.5 首次构建最小镜像

好,重头戏来了。我们构建 core-image-minimal,这是一个极简的 Linux 镜像,只包含最基本的系统组件。说白了,就是能启动、能跑 shell,别的啥也没有。

先设置环境变量:

cd poky
source oe-init-build-env build

这个脚本会帮你创建 build 目录,并设置好 BitBake 的环境变量。执行完后,你会看到终端提示符变了,前面多了个 build 字样。

然后修改 conf/local.conf,指定目标机器。默认是 qemux86-64,也就是 QEMU 模拟的 x86 虚拟机。如果你想编译树莓派的镜像,改成 raspberrypi4-64 就行。

# 在 conf/local.conf 中修改
MACHINE = "qemux86-64"

最后,开始编译:

bitbake core-image-minimal

第一次编译会下载大量源码包,耗时取决于你的网络和 CPU。我实测过,8 核 i7、16GB 内存、SSD 硬盘,大概需要 40 分钟。如果你用机械硬盘,嗯…建议先去泡杯咖啡。

避坑指南: 我曾经在编译过程中遇到 do_fetch 失败,原因是某些源码包被墙了。解决办法是配置代理,或者用国内镜像源。在 local.conf 里加上 PREMIRRORS 可以指定国内源。

编译成功后,镜像文件在 tmp/deploy/images/qemux86-64/ 目录下。你可以用 QEMU 启动它:

runqemu qemux86-64

看到登录提示符了吗?默认用户名是 root,没有密码。恭喜你,第一个 Yocto 镜像跑起来了!

2.6 本章知识体系

下面这张图帮你理清整个环境搭建的流程:

Yocto 开发环境搭建流程 宿主机准备 Ubuntu/Debian 安装依赖包 apt install 配置 Git/Repo 版本管理工具 下载 Poky 源码 repo sync 设置构建环境 oe-init-build-env 配置 local.conf MACHINE 等参数 bitbake core-image-minimal 首次构建,耗时约 40 分钟 ✅ 镜像生成:tmp/deploy/images/

这张图把整个流程串起来了。从宿主机准备到最终镜像生成,每一步都有明确的输入输出。你跟着走一遍,基本不会出大问题。

我的建议: 第一次构建别贪多,就老老实实编译 core-image-minimal。等熟悉了流程,再尝试添加自己的应用和库。我在项目中见过太多人一上来就想搞个大而全的镜像,结果编译失败后连问题出在哪都找不到。

好了,环境搭好了,镜像也跑起来了。接下来你就可以开始探索 Yocto 的更多功能了。记住,动手是最好的学习方式。

可可精品资料库