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

搭建开发环境,说白了就是给你的电脑装上能编译 Yocto 的「工具箱」。这一步要是没弄好,后面跑起来全是坑。我刚开始接触 Yocto 时,就因为在 Ubuntu 18.04 上少装了几个包,折腾了整整一个下午。

嗯,咱们直接进入正题。

2.1 宿主机要求

Yocto 对宿主机的硬件和系统版本有明确要求。别想着在树莓派上直接跑,那会等到你怀疑人生。

项目 最低要求 推荐配置
CPU 双核 x86_64 4 核以上
内存 4 GB 8 GB 或更多
磁盘空间 50 GB 空闲 100 GB 以上(SSD 最佳)
操作系统 Ubuntu 20.04 / Debian 11 Ubuntu 22.04 LTS
注意: 磁盘空间是新手最容易忽略的。我第一次构建 core-image-minimal 时,以为 30 GB 够了,结果编译到一半磁盘满了,整个构建直接崩溃。建议至少留 80 GB。

我个人习惯用 Ubuntu 22.04 LTS,包管理比较新,兼容性也最好。如果你用 CentOS 或 Fedora,也不是不行,但依赖包的名字和版本号会有差异,需要自己查文档适配。

2.2 安装必要依赖包

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 file locales libacl1

这里有个坑:locales 包安装后,记得生成 en_US.UTF-8 编码,否则后续构建会报错。

sudo locale-gen en_US.UTF-8

我曾经在客户现场部署时,发现他们的服务器没装 chrpath,结果构建到一半报错,排查了半小时才找到原因。所以,建议你把这行命令完整跑一遍,别偷懒。

2.3 配置 Git 和 Repo 工具

Yocto 的源码管理依赖 Git,而 Repo 是 Google 开发的工具,用来管理多个 Git 仓库。说白了,Yocto 项目由几十个 Git 仓库组成,手动一个个 clone 太累,Repo 就是帮你一键拉取的。

2.3.1 配置 Git

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

这里我建议把 user.name 和 user.email 设置成你常用的,因为后续提交 patch 或参与社区时,这些信息会出现在 commit 记录里。

2.3.2 安装 Repo

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

把 export PATH=~/bin:$PATH 加到 ~/.bashrc 里,这样每次打开终端就不用重新设置了。

小技巧: 如果你在国内网络环境,Repo 的下载地址可能被墙。可以用清华镜像源替换:curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo。

2.4 下载 Poky 源码

Poky 是 Yocto 的参考发行版,也是我们构建系统的起点。下载它,就是拉取所有核心组件的源码。

mkdir ~/yocto
cd ~/yocto
git clone git://git.yoctoproject.org/poky -b kirkstone

这里我选了 kirkstone 分支,它是 Yocto 4.0 LTS 版本,稳定性和社区支持都很好。如果你追求最新特性,可以用 master 分支,但风险自负——我在项目中吃过 master 分支 API 变动的亏。

下载完成后,你会看到 poky 目录,里面包含了 BitBake、OpenEmbedded-Core 等核心组件。

2.5 首次构建最小系统(core-image-minimal)

终于到了最激动人心的环节——构建第一个镜像。core-image-minimal 是 Yocto 提供的最小系统镜像,只包含最基本的 Linux 内核、文件系统和 BusyBox 工具集。说白了,就是能启动到 shell 的最小集合。

2.5.1 初始化构建环境

cd ~/yocto/poky
source oe-init-build-env build

这条命令会创建一个 build 目录,并自动切换到该目录。同时,它会设置一系列环境变量,比如 TEMPLATECONF、BBPATH 等。你不需要记住这些变量,但要知道它们的作用——告诉 BitBake 去哪里找配置文件和层。

2.5.2 配置构建目标

在 build/conf/local.conf 文件中,找到 MACHINE 变量,设置为你目标硬件。默认是 qemux86-64,也就是 QEMU 模拟的 x86_64 虚拟机。

MACHINE ??= "qemux86-64"

如果你有真实硬件,比如 Raspberry Pi 4,可以改成 MACHINE = "raspberrypi4-64",但前提是你已经添加了对应的 BSP 层。第一次构建,我建议就用 QEMU,省心。

2.5.3 开始构建

bitbake core-image-minimal

这条命令会触发 BitBake 解析所有配方、下载源码、编译工具链、构建内核和根文件系统。第一次构建时间很长,取决于你的网络和 CPU,通常需要 1-3 小时。

构建过程解析:
  • 解析层和配方: BitBake 读取所有 .bb 和 .bbappend 文件,构建依赖树。
  • 下载源码: 从上游仓库拉取 Linux 内核、GCC、BusyBox 等源码包。
  • 构建工具链: 编译交叉编译工具链(gcc-cross、binutils-cross 等)。
  • 编译目标软件: 用交叉工具链编译内核、BusyBox、glibc 等。
  • 打包镜像: 生成 rootfs、内核镜像和引导文件。

构建过程中,你会看到大量日志输出。别慌,这是正常的。如果遇到错误,先看最后几行日志,通常会有明确的错误提示。我遇到过最常见的问题是网络超时导致源码下载失败,重新执行 bitbake core-image-minimal 即可,BitBake 会从断点继续。

2.5.4 验证构建结果

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

runqemu qemux86-64

如果一切顺利,你会看到一个 Linux 终端启动,并出现登录提示符。默认用户名是 root,无需密码。

验证小技巧: 在 QEMU 中执行 uname -a 查看内核版本,执行 df -h 查看文件系统大小。core-image-minimal 通常只有 10-20 MB,非常精简。

2.6 本章知识体系

下面这张图总结了开发环境搭建的完整流程和核心组件关系:

Yocto 开发环境搭建流程 Yocto 开发环境搭建流程 宿主机要求 安装依赖包 配置 Git/Repo 下载 Poky 源码 初始化构建环境 bitbake 构建镜像 runqemu 验证 硬件要求: • 4核CPU / 8GB内存 • 100GB SSD磁盘 • Ubuntu 22.04 LTS 关键配置: • MACHINE 变量 • local.conf 优化 • BB_NUMBER_THREADS

这张图把整个流程串起来了。你会发现,核心路径是从宿主机准备到最终验证的一条直线,而两侧的说明框补充了关键细节。我个人建议你把这个流程打印出来贴在工位上,每次构建前扫一眼,能避免很多低级错误。

好了,环境搭建就到这里。记住,第一次构建慢是正常的,别急着优化。先把最小系统跑起来,后面再慢慢加料。