2、搭建Yocto开发环境:宿主机要求、安装必要软件包、配置Git与Repo、下载Poky参考发行版

好,咱们正式开始动手了。搭建开发环境这件事,说简单也简单,说复杂也复杂。我见过不少新手,一上来就急着编译,结果卡在各种依赖问题上,折腾半天才发现是环境没配好。所以这一章,咱们把基础打扎实。

2.1 宿主机要求:别让你的电脑拖后腿

Yocto 项目对宿主机是有要求的。说白了,它是个吃资源的家伙。我最早在一台 4GB 内存的笔记本上跑 Yocto,那感觉……嗯,就像在泥潭里跑步。编译到一半,系统直接卡死。

硬件最低要求:

  • CPU:4 核以上,推荐 8 核。核心越多,并行编译越快。
  • 内存:至少 8GB,推荐 16GB 或更高。低于 8GB 你会很痛苦。
  • 硬盘:至少 100GB 空闲空间。一个完整的构建,轻松吃掉 50-80GB。
  • 网络:稳定的宽带连接。第一次下载源码包,数据量在几个 GB 级别。
注意: 千万别用虚拟机跑 Yocto,除非你给它分配了足够的资源。我见过有人用 2 核 4GB 的虚拟机,编译了整整两天还没结束。建议用原生 Linux 系统,或者 WSL2(Windows Subsystem for Linux 2)也行,但性能会打些折扣。

软件要求:

  • 操作系统:Ubuntu 20.04/22.04 LTS 是我最推荐的。CentOS 7/8 也可以,但包管理方式不同。
  • Shell:bash。别用 zsh 或 fish,虽然也能用,但 Yocto 的脚本对 bash 兼容性最好。
  • Python:3.8 以上。Yocto 的 BitBake 工具链依赖 Python 3。

2.2 安装必要软件包:一步到位

在 Ubuntu 系统上,安装依赖包其实很简单。我习惯用一行命令搞定所有东西。你想想看,一个个手动装多麻烦。

sudo apt-get update
sudo apt-get 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 pylint3 xterm python3-subunit \
    mesa-common-dev zstd liblz4-tool

这里有个小坑。我曾经在 Ubuntu 18.04 上装这些包,发现 python3-jinja2 版本太旧,导致 BitBake 解析配方时报错。所以,尽量用 20.04 或更新的版本。

如果你用的是 CentOS/RHEL 系统,命令是这样的:

sudo yum install -y \
    gawk make wget tar bzip2 gzip python3 unzip perl patch \
    diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo \
    chrpath socat perl-Data-Dumper perl-Text-ParseWords \
    perl-Thread-Queue python3-pip xz which SDL-devel xterm
我的习惯: 装完这些包后,我会跑一下 python3 --versiongcc --version,确认版本没问题。别嫌麻烦,这一步能省掉后面很多排查时间。

2.3 配置 Git 与 Repo:版本控制的基石

Yocto 项目用 Git 管理源码,用 Repo 管理多个 Git 仓库。Repo 是 Google 开发的一个工具,专门用来处理像 Yocto 这种多仓库项目。

配置 Git:

先设置你的用户名和邮箱。这是 Git 提交的基础信息。

git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

我个人习惯再加几个配置:

git config --global core.editor vim
git config --global color.ui true
git config --global pull.rebase false

pull.rebase false 这个设置,嗯,是我踩过坑之后才加的。默认的 merge 行为有时候会产生多余的合并提交,看着乱。

安装 Repo:

Repo 其实就是一个 Python 脚本。安装方法很简单:

mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

然后把 ~/bin 加到 PATH 里。编辑 ~/.bashrc,加上这行:

export PATH=$PATH:~/bin

记得 source ~/.bashrc 让它生效。

注意: 如果你在公司内网,或者网络访问 Google 服务受限,Repo 可能下载失败。这时候可以换个镜像源,比如用清华大学的镜像:export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'。我曾经在客户现场折腾了半天,最后发现是网络问题。

2.4 下载 Poky 参考发行版:迈出第一步

Poky 是 Yocto 项目的参考发行版。它包含了 BitBake 构建工具、OpenEmbedded 核心元数据,以及一个完整的 Linux 系统构建示例。说白了,它就是 Yocto 的“官方样板间”。

下载 Poky 有两种方式:

方式一:用 Git 直接克隆(推荐)

这种方式最直接,也最灵活。你可以随时切换分支、查看历史。

git clone git://git.yoctoproject.org/poky
cd poky
git checkout -b my-dunfell origin/dunfell

这里我选了 dunfell 分支,它是 Yocto 3.1 的长期支持版本(LTS)。我个人建议新手从 LTS 版本开始,稳定,文档也多。

方式二:用 Repo 初始化(适合多仓库项目)

如果你需要同时管理多个层(比如 meta-openembedded、meta-raspberrypi 等),用 Repo 更方便。

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

repo sync 会下载所有相关的仓库。第一次同步会比较慢,取决于你的网速。

避坑指南: 我曾经在下载过程中断网,导致仓库状态不一致。这时候别慌,重新跑 repo sync 就行,它会自动恢复。如果还不行,就删掉 .repo 目录重新 init。

下载完成后,你会看到这样的目录结构:

poky/
├── bitbake/        # BitBake 构建引擎
├── meta/           # OpenEmbedded 核心元数据
├── meta-poky/      # Poky 参考发行版配置
├── meta-yocto-bsp/ # 参考 BSP(板级支持包)
├── oe-init-build-env  # 环境初始化脚本
└── README.hardware

这个结构,你以后会非常熟悉。每个目录都有自己的作用。比如 meta/ 里存放了各种配方文件(recipes),bitbake/ 是构建系统的核心。

最后,验证一下环境是否正常:

cd poky
source oe-init-build-env
bitbake --version

如果看到 BitBake 的版本号,恭喜你,环境搭建成功了!

嗯,到这里,你的开发环境就准备好了。下一章,我们会真正开始创建第一个层,写第一个配方。别急,基础打牢了,后面才跑得快。