环境准备:搭建你的第一台Yocto开发机

说实话,很多初学者在Yocto上栽跟头,不是因为编译本身有多难,而是环境没搭好。我见过太多人花一整天装依赖,结果卡在某个包的版本上。这一章,咱们就把地基打牢。

核心原则:Yocto对宿主机的依赖非常敏感。同一个项目,Ubuntu 20.04和22.04装出来的结果可能完全不同。我建议你严格跟着我来。

2.1 操作系统选择:为什么是Ubuntu 22.04?

Yocto官方支持的Linux发行版里,Ubuntu 22.04 LTS是目前最省心的选择。为什么?

  • 包源完整——几乎所有Yocto需要的依赖包,apt都能直接装,不用折腾PPA
  • GCC版本合适——默认的GCC 11.x,对Yocto Kirkstone及更新版本兼容性最好
  • 社区验证充分——Yocto项目的CI/CD主要跑在Ubuntu 22.04上,你遇到的大多数坑,别人已经踩过了

如果你非要用其他发行版,比如Fedora或Debian,也不是不行。但我个人经验是,每换一个发行版,至少多花半天时间处理依赖冲突。嗯,时间就是生命。

避坑:不要用Windows Subsystem for Linux (WSL) 1。WSL 2勉强能用,但文件系统性能很差,编译速度会慢30%以上。我曾经在WSL 2上编译一个最小系统,等了快两个小时还没结束……后来切到原生Ubuntu,45分钟搞定。

2.2 安装必要依赖包

装好Ubuntu 22.04后,第一件事就是更新包源,然后安装Yocto所需的依赖。别偷懒,少装一个包,编译到一半报错,那才叫崩溃。

# 更新包源
sudo apt update
sudo apt upgrade -y

# 安装核心依赖
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 xterm python3-subunit mesa-common-dev \
    zstd liblz4-tool file locales libacl1

这里有个细节——locales包。很多新手装完发现编译报错,提示locale设置不对。我建议你装完后顺手配置一下:

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

为什么要配这个?Yocto的构建系统对字符编码很敏感。如果locale不对,bitbake解析配方文件时可能报奇怪的语法错误。我当年第一次跑Yocto,卡在这个问题上整整半天,最后发现是locale没配好……

小技巧:你可以把上面的命令写成一个脚本,比如 setup-yocto-env.sh,以后重装系统或换机器时,直接跑一遍就行。我自己的脚本里还加了检查磁盘空间的逻辑——Yocto编译至少需要50GB空闲空间,最好留100GB以上。

2.3 配置Git

Yocto项目用Git管理所有代码和配方。配置Git是必须的,而且有些配置会影响编译结果。

先设置你的身份信息——这不仅是礼貌问题,Yocto的构建系统会把你的名字和邮箱写入生成的镜像元数据中:

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

然后,我建议你配置几个对Yocto特别有用的选项:

# 避免文件名过长导致的问题
git config --global core.longpaths true

# 设置默认分支名(Yocto项目常用master或main)
git config --global init.defaultBranch master

# 启用颜色输出,方便看diff
git config --global color.ui auto

还有一个容易被忽略的点——文件权限。Yocto的构建系统会创建大量临时文件,如果umask设置不对,可能导致权限问题。我习惯在 ~/.bashrc 里加一行:

umask 022

这样新创建的文件默认是 644,目录是 755,不会出现编译到一半说“权限不足”的尴尬。

2.4 安装Repo工具

Repo是Google开发的Android项目管理工具,Yocto用它来管理多个Git仓库。说白了,Yocto项目由几百个独立的Git仓库组成——内核、工具链、各种库、配方文件……手动一个个clone会疯掉。Repo就是帮你一键搞定这些。

安装Repo很简单:

# 创建bin目录并加入PATH
mkdir -p ~/bin
export PATH=~/bin:$PATH

# 下载Repo脚本
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

注意,上面的URL可能会被墙。如果你在国内,可以用清华大学的镜像:

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo

装好后验证一下:

repo --version

如果看到版本号,说明安装成功。我第一次用Repo时,觉得这东西就是个“高级版git clone”,后来才发现它还能做分支管理、补丁同步……嗯,后面章节会细讲。

注意:Repo依赖Python 3。Ubuntu 22.04默认Python 3.10,没问题。但如果你用旧版Ubuntu,记得检查Python版本——Repo在Python 2上已经跑不起来了。

2.5 验证环境:跑一个最小测试

环境搭好了,怎么知道对不对?我建议你跑一个简单的测试——用Yocto的 bitbake 命令检查依赖是否完整:

# 先初始化一个临时工作目录
mkdir ~/yocto-test && cd ~/yocto-test

# 用Repo拉取Poky(Yocto参考发行版)
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync

# 初始化构建环境
source oe-init-build-env

# 检查bitbake是否可用
bitbake --version

如果最后一步输出了bitbake的版本号,恭喜你——环境准备完成。如果报错,多半是某个依赖包没装全。回头检查一下 apt install 那一步,看看有没有遗漏。

我的习惯:每次搭建新环境,我都会在 ~/yocto-test 里完整编译一次 core-image-minimal。虽然要等半小时左右,但能确保所有工具链、交叉编译器都正常工作。这个测试镜像很小,只有几十MB,但跑通它,后面的大项目才有底气。

2.6 本章知识体系

下面这张图帮你理清环境准备的逻辑链条——每一步都是下一环的基础:

Yocto开发环境搭建流程 Ubuntu 22.04 LTS 安装系统依赖包(gcc、python3、chrpath等) 配置Git(user.name、user.email、core.longpaths) 安装Repo并验证 ⚠️ 关键提醒 磁盘空间 > 50GB 不要用WSL 1 locale必须配好

这张图从左到右、从上到下,就是搭建环境的完整路径。每一步都踩实了,后面编译Yocto镜像时,你会感谢现在认真的自己。