2、开发环境搭建:宿主机要求、安装必要软件包、配置Git与Repo、下载Poky源码、首次构建体验
好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,Yocto 项目对环境的要求不算低,但也没那么玄乎。我见过不少新手一上来就卡在环境配置上,折腾半天连个 helloworld 都跑不起来。其实只要按步骤来,半小时内你就能看到第一个构建结果。
2.1 宿主机要求:别拿玩具机来跑
先说说硬件。Yocto 构建是个吃资源的大户,尤其是第一次构建,要下载几百兆的源码,还要编译整个工具链和根文件系统。我个人习惯用一台至少 4 核 CPU、16GB 内存的机器。硬盘建议留出 100GB 以上的空间——别嫌多,一个完整的构建下来,光是临时文件和输出产物就能吃掉 30-50GB。
操作系统方面,官方推荐 Ubuntu 20.04 LTS 或 22.04 LTS。当然 CentOS、Debian 也行,但 Ubuntu 的包管理最省心。我建议你直接用 Ubuntu 22.04,因为它的 GCC、Python 版本跟 Yocto 的兼容性最好。
2.2 安装必要软件包:一条命令搞定
Yocto 构建依赖一堆基础工具:GCC、make、patch、bzip2、diffstat 等等。你不需要一个个去装,官方已经整理好了。在 Ubuntu 上,直接跑这条命令:
sudo apt-get update
sudo apt-get 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 xterm python3-subunit mesa-common-dev zstd liblz4-tool
嗯,这里要注意:不同 Ubuntu 版本可能缺个别包。比如 Ubuntu 22.04 默认没有 chrpath,但上面这条命令已经包含了。如果你用的是 20.04,可能还需要额外装 python3-distutils。我建议装完后跑一下 oe-check-env 脚本,它会自动检测缺失的依赖。
2.3 配置 Git 与 Repo:版本管理的基石
Yocto 项目用 Git 管理源码,用 Repo 管理多个 Git 仓库的协同。先配好 Git 的基本信息:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global color.ui auto
然后安装 Repo 工具。Repo 是 Google 开发的,专门用来管理多仓库项目。Yocto 的 Poky 源码就是由几十个 Git 仓库组成的,用 Repo 可以一键拉取所有仓库到正确版本。
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=$PATH:~/bin
把 export PATH=$PATH:~/bin 加到 ~/.bashrc 里,这样每次登录终端都能直接用 repo 命令。为什么用 Repo 而不是直接 git clone?你想想看,Poky 源码包含 bitbake、openembedded-core、meta-yocto-bsp 等十几个仓库,每个仓库都有自己的分支和标签。用 Repo 可以保证所有仓库都锁定在同一个兼容版本上,避免「A 仓库是最新版,B 仓库是旧版」这种混乱。
2.4 下载 Poky 源码:选择正确的分支
Poky 是 Yocto 项目的参考发行版,也是我们学习的起点。下载前先想清楚你要用哪个版本。Yocto 每半年发布一个稳定版,比如 4.0 (Kirkstone)、4.3 (Nanbield)。我个人建议新手从 4.0 (Kirkstone) 开始,因为它是一个 LTS 版本,支持到 2026 年,社区资料也最丰富。
mkdir yocto-kirkstone
cd yocto-kirkstone
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync
repo sync 这一步会下载所有仓库,大概需要几分钟到十几分钟,取决于你的网速。下载完成后,你会看到 poky 目录,里面包含了 bitbake、meta、meta-poky、meta-yocto-bsp 等子目录。
2.5 首次构建体验:跑一个最小镜像
源码下载好了,咱们来跑第一个构建。先初始化构建环境:
cd poky
source oe-init-build-env build
这条命令会创建一个 build 目录,并自动切换到该目录下。同时它会设置一系列环境变量,比如 BBPATH、BUILDDIR 等。你可以在 build/conf 目录下看到两个关键配置文件:local.conf 和 bblayers.conf。
在构建之前,我建议先改一下 local.conf 里的几个参数:
# 指定目标机器,这里用 qemux86-64 做测试
MACHINE = "qemux86-64"
# 指定并行编译线程数,一般设为 CPU 核心数 + 1
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"
# 下载目录和共享状态缓存,可以复用
DL_DIR = "/path/to/your/downloads"
SSTATE_DIR = "/path/to/your/sstate-cache"
然后开始构建一个最小镜像:
bitbake core-image-minimal
第一次构建会非常慢,因为要编译交叉工具链、glibc、内核等基础组件。在我的 8 核机器上,大概需要 40 分钟到 1 小时。构建过程中你会看到 bitbake 在解析配方、下载源码、编译、打包。如果一切顺利,最后会输出类似这样的信息:
NOTE: Tasks summary: Attempted 2345 tasks of which 0 didn't need to be rerun, all succeeded.
构建完成后,镜像文件在 tmp/deploy/images/qemux86-64/ 目录下。你可以用 QEMU 直接启动它:
runqemu qemux86-64
看到 QEMU 窗口里弹出 Linux 登录提示符的那一刻,恭喜你,你的 Yocto 开发环境已经搭建成功了!
do_fetch 失败,原因是某个上游仓库的源码被删除了。解决办法是检查 DL_DIR 里的缓存文件是否完整,或者换一个镜像源。另外,如果构建中途中断,再次运行 bitbake core-image-minimal 会从断点继续,不会从头开始。
2.6 本章小结
这一章我们完成了从零到一的开发环境搭建。你学会了:
- 宿主机硬件和操作系统要求
- 安装 Yocto 构建所需的系统软件包
- 配置 Git 和 Repo 工具
- 下载指定版本的 Poky 源码
- 运行首次构建并验证结果
下一章,我会带你深入理解 Yocto 的核心概念——层(Layer)、配方(Recipe)和 BitBake 的工作原理。这些东西搞懂了,你才能真正掌控 Yocto 的定制能力。
local.conf 中的 MACHINE 变量为 qemuarm64,然后重新构建 core-image-minimal,看看 ARM64 架构的镜像能否正常启动。
公众号:蓝海资料掘金营,微信deep3321