2. 开发环境搭建:Ubuntu系统准备、必要软件包安装、Git与Repo工具配置、磁盘空间规划

说实话,Yocto 项目对环境的要求不算低。我见过不少新手,一上来就急着编译,结果卡在某个依赖报错上,折腾半天才发现是系统包没装全。这一章,咱们就把地基打牢。

我个人习惯用 Ubuntu 20.04 LTS 或 22.04 LTS 作为宿主系统。为什么?因为 Yocto 官方测试最充分的就是这两个版本。你非要用 Debian 或 Fedora 也不是不行,但遇到奇怪的问题时,社区能给你的帮助会少很多。

2.1 Ubuntu 系统准备

首先,确保你的 Ubuntu 是最小化安装,不要带图形桌面。Yocto 编译时 CPU 跑满,图形界面除了抢资源,没什么用。

系统安装完成后,第一件事就是更新源:

sudo apt update
sudo apt upgrade -y

然后,检查你的系统版本:

lsb_release -a

输出应该类似:

Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy
我的建议: 如果你用的是虚拟机,给 Ubuntu 分配至少 4 核 CPU、8GB 内存、100GB 磁盘。这只是一个起点,后面你会发现 100GB 其实很紧张。

2.2 必要软件包安装

Yocto 官方文档里列了一长串依赖包。我把它整理成两组,一组是「必须装」的,一组是「建议装」的。

必须安装的包:

sudo apt 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

建议安装的包(我踩过的坑):

sudo apt install -y locales libacl1-dev libssl-dev bc lrzss screen

为什么要装 screen?因为 Yocto 一次编译动辄一两个小时,网络断开或终端意外关闭,编译就白跑了。用 screen 或 tmux 可以让你随时恢复会话。

我曾经遇到过: 有一次编译到 90% 时 SSH 断开了,回来一看终端已经关闭,编译进程也被杀了。从那以后,我每次编译前都会先开一个 screen 会话。

另外,locales 包也很关键。Yocto 的某些工具对 locale 设置很敏感。配置一下:

sudo locale-gen en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

2.3 Git 与 Repo 工具配置

Yocto 的源码管理依赖 Git 和 Repo。Repo 是 Google 开发的一个工具,用来管理多个 Git 仓库——Yocto 的 meta 层就是典型的「多仓库项目」。

安装 Git:

sudo apt install -y git
git --version

配置 Git 用户信息,这一步不能省:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

安装 Repo:

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

把 ~/.local/bin 加入 PATH:

echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc
source ~/.bashrc

验证安装:

repo --version
避坑指南: 如果你在墙内,Google 的 repo 源可能下载不了。可以用清华或中科大的镜像源。我个人习惯在 ~/.bashrc 里加一行:export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'。

2.4 磁盘空间规划

这是最容易忽略的一环。Yocto 编译一次,产生的文件量远超你的想象。

我画了一张图,帮你理解 Yocto 的磁盘空间是怎么被吃掉的:

Yocto 磁盘空间消耗结构图 源码层(Source Layer) poky + meta-* 层 + 自定义层 | 约 2-5 GB 构建缓存层(Build Cache) downloads/ + sstate-cache/ | 约 20-50 GB 编译输出层(Build Output) tmp/deploy/ + tmp/work/ | 约 30-80 GB 最终产物层(Final Artifacts) 镜像文件 + SDK + 软件包 | 约 1-5 GB 总空间建议: 至少 150 GB

你看,最占空间的是「构建缓存层」和「编译输出层」。尤其是 tmp/deploy/ 和 tmp/work/,里面存了大量中间文件和临时文件。

我的磁盘规划建议:

分区/目录 建议大小 说明
/(根分区) 50 GB 系统本身 + 工具链
/home 或 /work 200 GB+ Yocto 源码 + 构建输出
swap 8-16 GB 内存不够时保命用
重要提醒: 不要把 Yocto 的构建目录放在机械硬盘上。我试过一次,编译时间直接翻了三倍。SSD 是必需品,NVMe 更好。

另外,我习惯把 downloads/ 和 sstate-cache/ 单独放在一个目录,然后在多个项目之间共享。这样每个项目就不用重复下载源码包了。配置方法很简单,在 local.conf 里加两行:

DL_DIR = "/work/yocto/downloads"
SSTATE_DIR = "/work/yocto/sstate-cache"

嗯,到这里,开发环境就基本准备好了。你可能会问:「为什么我装完这些还是编译失败?」别急,下一节我们会用一个小项目来验证环境是否真的配好了。不过那是后面的事,先把眼前这几步走稳。

本章核心要点:

  • Ubuntu 20.04/22.04 LTS 是最稳妥的选择
  • 依赖包必须装全,尤其是 screen 和 locales
  • Git 配置用户信息,Repo 用国内镜像源
  • 磁盘至少留 150 GB,SSD 是硬性要求
  • 共享 downloads/ 和 sstate-cache/ 可以省很多时间