2. 开发环境搭建:主机系统要求、安装必要软件包、配置Git与Repo、下载Poky源码、首次构建最小系统

好,咱们正式开始动手。这一章的目标很明确——把 Yocto 的开发环境从零搭起来,然后跑通第一次构建。我见过太多人卡在环境上,折腾一两天还没见到 bitbake 的影子。其实没那么复杂,跟着我的节奏来,一小时内你就能看到第一个镜像文件。

2.1 主机系统要求

Yocto 对宿主机的要求不算低,但也不是非得顶级服务器。我个人的经验是:CPU 核心数比频率重要,内存比硬盘速度重要。

硬件/软件 最低要求 推荐配置
CPU 4 核 x86_64 8 核及以上
内存 8 GB 16 GB 或更多
磁盘空间 100 GB 空闲 250 GB+ SSD
操作系统 Ubuntu 20.04 / 22.04 Ubuntu 22.04 LTS
文件系统 ext4 ext4(不要用 NTFS 或 ZFS)
⚠ 注意: 千万别把源码放在 NTFS 或网络挂载盘上。Yocto 构建过程中会创建大量符号链接和硬链接,跨文件系统会直接报错。我曾经有个同事图省事把代码放在 Samba 共享目录里,结果构建到一半疯狂报错,排查了两天才发现是文件系统的问题。

2.2 安装必要软件包

Ubuntu 系统相对省心,官方文档推荐的那套包基本够用。我习惯先更新系统,再一次性装完所有依赖。

sudo apt update
sudo apt upgrade -y

# 安装 Yocto 构建必需包
sudo apt 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

嗯,这里要注意。不同 Ubuntu 版本需要的包略有差异。如果你用的是 Ubuntu 22.04,上面的列表已经覆盖了。如果是 20.04,可能还需要额外装 python3-distutils。我建议装完后跑一下 Yocto 自带的检查脚本:

# 进入 poky 目录后执行
source oe-init-build-env
# 如果缺包,bitbake 会在第一次构建时提示
💡 小技巧: 我习惯把安装命令写成一个 shell 脚本,每次换机器直接跑一遍。省得漏装某个包,构建到一半才报错。

2.3 配置 Git 与 Repo

Git 是 Yocto 的命脉。你想想看,整个 Poky 源码、各个层(meta-*)都是通过 Git 管理的。配置好 Git 能省去后面很多麻烦。

# 设置全局用户信息
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 推荐配置:处理中文文件名、长路径
git config --global core.quotepath false
git config --global core.longpaths true

# 设置默认分支名(可选)
git config --global init.defaultBranch main

Repo 工具是 Google 为管理多 Git 仓库设计的。Yocto 虽然不强制用 Repo,但当你同时维护多个层时,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
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
🔑 关键点: 如果你在公司内网,记得配好 Git 代理或 SSH 密钥。Yocto 构建过程中会从 GitHub、git.yoctoproject.org 拉取大量源码,网络不通畅的话,构建会卡在 fetching 阶段。

2.4 下载 Poky 源码

Poky 是 Yocto 的参考发行版,也是我们学习的起点。下载方式有两种:直接 Git clone 或者用 Repo 拉取。我推荐用 Git clone,简单直接。

# 创建工作目录
mkdir -p ~/yocto
cd ~/yocto

# 克隆 Poky 源码(以 Scarthgap 5.0 LTS 为例)
git clone git://git.yoctoproject.org/poky -b scarthgap

# 进入目录看看结构
cd poky
ls -l

你会看到 meta、meta-poky、meta-yocto-bsp 等目录。这些就是 Yocto 的层(Layer)。每个层负责一类功能:meta 是核心层,meta-poky 是 Poky 发行版配置,meta-yocto-bsp 是参考板支持包。

为什么选 Scarthgap 5.0?这是 2024 年发布的 LTS 版本,官方会维护 4 年。我在项目里最怕追新版本,LTS 意味着稳定、文档全、社区支持好。

⚠ 注意: 不要用 git clone --depth 1 浅克隆。虽然省空间,但后续切换分支、打补丁时会缺少历史记录,容易出问题。我吃过这个亏,后来老老实实全量克隆。

2.5 首次构建最小系统

终于到了最激动人心的环节。第一次构建,我们选 core-image-minimal——一个只包含 BusyBox 和基本工具的最小系统镜像。构建时间大约 30-60 分钟,取决于你的机器性能。

# 初始化构建环境
cd ~/yocto/poky
source oe-init-build-env build

# 查看构建目标
ls tmp/deploy/images/qemux86-64/

# 开始构建
bitbake core-image-minimal

第一次运行 source oe-init-build-env 时,脚本会自动创建 build 目录,并在里面生成 conf/local.conf 和 conf/bblayers.conf 两个配置文件。前者控制构建参数,后者管理层列表。

构建过程中,你会看到类似这样的输出:

Parsing recipes: 100% |##########################| Time: 0:00:12
Parsing of 1234 .bb files complete (0 cached, 1234 parsed). 2345 targets, 123 skipped, 0 masked.
NOTE: Resolving any missing task queue dependencies
NOTE: Preparing RunQueue
NOTE: Executing RunQueue Tasks
Currently  1 running tasks (1 of 1234): 0: python3-native-3.12.3-r0 do_compile

嗯,这里要有点耐心。第一次构建需要下载所有源码包(约 2-3 GB),然后编译交叉工具链、基础库、内核、根文件系统。如果网络慢,可以提前配置本地源镜像,这个我们后面会讲。

💡 加速技巧: 在 local.conf 中设置 BB_NUMBER_THREADS 和 PARALLEL_MAKE 为 CPU 核心数。比如 8 核机器可以加:
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"
这样能充分利用多核性能,构建时间能缩短 30% 以上。

构建完成后,镜像文件会出现在 tmp/deploy/images/qemux86-64/ 目录下。你可以用 QEMU 直接启动它:

# 启动 QEMU 模拟器
runqemu qemux86-64

# 或者指定镜像
runqemu tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs.ext4

看到登录提示符 qemux86-64 login: 了吗?输入 root,不需要密码。恭喜,你的第一个 Yocto 系统跑起来了!

🎯 验证要点:
  • 检查内核版本:uname -a
  • 检查可用命令:ls /bin、ls /sbin
  • 检查网络:ifconfig(BusyBox 版本)
  • 退出 QEMU:Ctrl+A 然后 x

2.6 本章知识体系

下面这张图总结了开发环境搭建的完整流程和关键节点。你可以把它当作一个检查清单,每完成一步就对照一下。

Yocto 开发环境搭建流程 Yocto 开发环境搭建流程 1. 主机系统检查 2. 安装必要软件包 3. 配置 Git & Repo 4. 下载 Poky 源码 5. 初始化构建环境 6. bitbake 构建 输出:core-image-minimal 镜像 tmp/deploy/images/qemux86-64/ 验证:runqemu qemux86-64 → 登录 root 关键配置:local.conf(线程数、镜像类型) + bblayers.conf(层列表)

这张图把整个流程串起来了。从主机检查到最终验证,每一步都有明确的输入输出。你可以在实际搭建时把它打印出来,完成一项打个勾。

好了,环境搭好了,第一个系统也跑起来了。接下来我们会深入 Yocto 的构建系统,看看 bitbake 到底是怎么工作的。不过那是后面的事,现在先享受一下成功的喜悦吧。