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

好,咱们正式开始动手了。搭建开发环境这件事,说简单也简单,说复杂也复杂。我见过不少新手,一上来就急着编译,结果卡在各种环境问题上,折腾一整天。其实你想想看,磨刀不误砍柴工,先把环境整利索了,后面会顺畅很多。

2.1 主机系统要求

Yocto 项目对主机系统是有要求的,不是随便找个 Linux 发行版就能跑。我个人习惯用 Ubuntu,因为社区支持最好,遇到问题也容易搜到答案。

官方推荐的主机系统:

  • Ubuntu 20.04 LTS(64位)—— 我最推荐,稳定
  • Ubuntu 22.04 LTS(64位)—— 也可以,但要注意一些包版本
  • Debian 11 / 12(64位)—— 老手可选
  • Fedora 36+(64位)—— 如果你用 RPM 系

硬件方面,我建议至少 4 核 CPU、16GB 内存、200GB 空闲磁盘空间。为什么?因为 Yocto 编译时会把源码、中间文件、镜像都塞到硬盘里。我在项目中遇到过,有人用 8GB 内存的笔记本,编译到一半直接 OOM 了,那叫一个崩溃。

注意:不要用 Windows 子系统(WSL1)来跑 Yocto,文件系统性能太差。WSL2 勉强可以,但我还是推荐原生 Linux 或者虚拟机。

2.2 安装必要软件包

系统装好了,接下来就是安装一堆依赖包。Yocto 的编译工具链依赖挺多的,缺一个都可能报错。嗯,这里我直接给命令,你照着敲就行。

Ubuntu 20.04 / 22.04 上执行:

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

这个列表我整理过好几遍。有些包是 Yocto 文档里写的,有些是我自己踩坑后加上的。比如 zstdliblz4-tool,新版本的 Yocto 用它来压缩 sstate 缓存,没有的话编译会慢很多。

小技巧:装完后可以用 dpkg -l | grep <包名> 检查是否安装成功。我曾经漏装了 chrpath,结果编译到 90% 才报错,白白浪费了半小时。

2.3 配置 Git 和 Repo

Yocto 的源码管理用的是 Git,但项目结构比较复杂,所以 Google 搞了个 Repo 工具来管理多个 Git 仓库。说白了,Repo 就是一个脚本,帮你一次性拉取几十个仓库。

先配 Git:

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

这个配置不复杂,但很多人会忘。我记得有一次帮同事排查问题,发现他 Git 没配用户名,Repo 拉代码时一直报错,折腾了半天。

再装 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 的下载地址有时会被墙。如果你在境内,可以用清华的镜像:https://mirrors.tuna.tsinghua.edu.cn/git/git-repo。我当年第一次搭环境时就卡在这一步,后来换了镜像才搞定。

2.4 下载 Yocto 源码

环境配好了,终于可以拉代码了。Yocto 的源码托管在 git.yoctoproject.org,我们用 Repo 来拉。

以 Poky(Yocto 的参考发行版)为例:

mkdir yocto-project
cd yocto-project
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync

这里 -b kirkstone 指定了分支。Kirkstone 是 Yocto 4.0 的长期支持版本,我个人建议新手从 LTS 版本开始,稳定,文档也多。

如果你网速慢,repo sync 可能要跑十几分钟。别急,去泡杯咖啡。我当年第一次 sync,等了快半小时,还以为死机了。

常用分支对照表:

Yocto 版本 分支名 发布时间
4.0 kirkstone 2022年4月
4.3 nanbield 2023年10月
5.0 scarthgap 2024年4月

2.5 首次构建最小系统

源码拉下来了,咱们来编译一个最小系统。这个系统叫 core-image-minimal,只有最基本的 Linux 内核、根文件系统和 Busybox,大概 20MB 左右。

步骤很简单:

cd poky
source oe-init-build-env build
bitbake core-image-minimal

第一行 source oe-init-build-env 会设置环境变量,并自动进入 build 目录。这个脚本很重要,每次新开终端都要执行一次。

然后 bitbake core-image-minimal 就开始编译了。第一次编译会下载所有源码包,然后交叉编译工具链、内核、根文件系统。整个过程大概 1-2 小时,取决于你的机器性能。

提速技巧:build/conf/local.conf 里加上 BB_NUMBER_THREADS = "8"PARALLEL_MAKE = "-j 8",把线程数设成你 CPU 核心数的两倍。我试过,能快 30% 左右。

编译完成后,镜像文件在 build/tmp/deploy/images/qemux86-64/ 目录下。你可以用 QEMU 模拟器来启动它:

runqemu qemux86-64

看到登录提示符了吗?用户名 root,没有密码。恭喜你,第一个 Yocto 系统跑起来了!

常见问题:如果编译过程中报错说缺少某个包,别慌。看看错误信息,一般会提示你 sudo apt install xxx。装完再重新 bitbake 就行。Yocto 有增量编译,不会从头开始。

好了,环境搭建就到这里。下一章咱们会深入分析 Yocto 的目录结构和核心概念。到时候你会发现,今天搭的这个环境,就是后面所有实验的基础。