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) |
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 会在第一次构建时提示
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
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 的构建系统,看看 bitbake 到底是怎么工作的。不过那是后面的事,现在先享受一下成功的喜悦吧。