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 |
我个人习惯用 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 里,这样每次打开终端就不用重新设置了。
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,无需密码。
uname -a 查看内核版本,执行 df -h 查看文件系统大小。core-image-minimal 通常只有 10-20 MB,非常精简。
2.6 本章知识体系
下面这张图总结了开发环境搭建的完整流程和核心组件关系:
这张图把整个流程串起来了。你会发现,核心路径是从宿主机准备到最终验证的一条直线,而两侧的说明框补充了关键细节。我个人建议你把这个流程打印出来贴在工位上,每次构建前扫一眼,能避免很多低级错误。
好了,环境搭建就到这里。记住,第一次构建慢是正常的,别急着优化。先把最小系统跑起来,后面再慢慢加料。