2. 环境搭建:宿主机要求、安装必要软件包、配置Git和Repo、下载Yocto源码、首次构建前的检查清单

好,咱们正式开始动手了。这一章,说白了就是搭台子。台子搭不好,后面唱戏肯定要摔跟头。我见过太多新手,一上来就急着跑 bitbake,结果环境不对,报一堆莫名其妙的错,心态直接崩了。

别急,跟着我一步步来。把基础打牢,后面才顺。

2.1 宿主机要求:别拿老爷机折腾

Yocto 是个吃资源的大户。你想想看,它要下载几百个源码包,编译整个 Linux 系统,包括内核、根文件系统、各种库。这活儿不轻。

硬件最低要求:

  • CPU: 4 核起步。我建议 8 核或以上。核心越多,并行编译越快。
  • 内存: 至少 8GB。16GB 是舒适区。我曾经在 4GB 的虚拟机上跑,结果 swap 分区被撑爆,系统直接卡死。嗯,血的教训。
  • 硬盘: 至少 100GB 空闲空间。注意是 空闲。一个完整的构建,轻松吃掉 50-80GB。我建议用 SSD,机械硬盘会让你等到怀疑人生。
  • 操作系统: 推荐 Ubuntu 22.04 LTS 或 Debian 12。CentOS 也行,但社区支持不如 Ubuntu 活跃。
警告: 别在 Windows 上用 WSL1 搞 Yocto,文件系统性能太差,会出各种诡异问题。WSL2 勉强可以,但我个人还是推荐原生 Linux 或者虚拟机。

2.2 安装必要软件包:缺啥补啥

Yocto 依赖一堆工具链。Ubuntu/Debian 系统下,一行命令搞定:

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 file locales libacl1

为什么装这么多?我刚开始也嫌烦。但后来发现,少一个包,编译到一半就报错,回头再装,浪费时间。所以,一次性装全,省心。

小提示: 如果你用的是 Fedora 或 CentOS,包名会略有不同。别慌,去 Yocto 官方手册的 "Required Packages" 章节查一下,对着装就行。

2.3 配置 Git 和 Repo:版本管理的基石

Yocto 的源码管理,用的是 Git + Repo。Repo 是 Google 搞的一个工具,专门用来管理多个 Git 仓库。Yocto 项目有上百个 layer,每个 layer 都是一个独立的 Git 仓库。用 Repo,一次拉取所有。

先配 Git:

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

这步别偷懒。没有配置,后面 repo init 会报错。我见过有人卡在这里半小时,就为了省这两行命令。

再装 Repo:

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

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

export PATH=~/bin:$PATH

然后 source ~/.bashrc 让它生效。

注意: 如果你在墙内,访问 Google 的域名可能不稳定。可以用国内的镜像源,比如清华大学的 Repo 镜像。把上面的 URL 换成 https://mirrors.tuna.tsinghua.edu.cn/git/git-repo 就行。

2.4 下载 Yocto 源码:动手吧

好,现在开始拉代码。我习惯建一个专门的目录来放 Yocto 项目:

mkdir ~/yocto
cd ~/yocto

然后初始化 Repo。以 Yocto 的长期支持版本 Kirkstone(4.0)为例:

repo init -u https://git.yoctoproject.org/poky -b kirkstone

这条命令会创建一个 .repo 目录,里面记录了所有需要拉取的仓库信息。然后执行:

repo sync

这一步会下载所有源码。网络好的话,几分钟搞定。慢的话...去喝杯咖啡吧。

同步完成后,你会看到 poky 目录。这就是 Yocto 的核心元数据。里面包含了 OpenEmbedded 构建系统、BitBake 工具、以及各种参考 BSP。

我的习惯: 我会在 ~/yocto 下再建一个 sources 目录,把 poky 和其他第三方 layer 都放进去。这样结构清晰,方便管理。

2.5 首次构建前的检查清单:别急着跑

代码拉下来了,是不是可以开干了?别急。先过一遍检查清单。我每次搭建新环境,都会走一遍这个流程,确保万无一失。

检查项 说明 验证方法
磁盘空间 确保有足够空间 df -h 查看剩余空间
网络连接 能访问源码仓库 ping git.yoctoproject.org
依赖包 所有必要包已安装 重新运行 apt-get install 命令,看是否还有未安装的
Git 配置 用户名和邮箱已设置 git config --list
Repo 工具 Repo 可执行且版本正确 repo --version
源码完整性 repo sync 成功完成 检查 poky 目录是否存在,且包含 metameta-poky 等子目录
Python 版本 Python 3.8 或更高 python3 --version

每一项都确认无误后,再往下走。别嫌麻烦。我曾经因为少装了一个 chrpath,编译到 80% 的时候报错,回头排查花了一个小时。你说亏不亏?

最后一步: 进入 poky 目录,执行 source oe-init-build-env。这个脚本会设置环境变量,并创建一个 build 目录。如果这一步没报错,恭喜你,环境搭建成功了!

好了,台子搭好了。下一章,咱们开始真正地构建第一个镜像。到时候你会发现,前面这些准备工作,都是值得的。