搭建Yocto开发环境:宿主机要求、安装必要软件包、配置Git和Repo、下载Poky参考发行版
说实话,很多初学者在Yocto上栽跟头,不是因为编译本身有多难,而是开发环境没搭好。我见过有人用Windows虚拟机跑Yocto,编译到一半磁盘满了;也有人Ubuntu版本太老,依赖包死活装不上。嗯,这一章咱们就把地基打牢。
核心原则:Yocto对环境的要求其实很明确——64位Linux、足够大的磁盘、正确的依赖包。别在这上面省时间,否则后面会加倍还回来。
2.1 宿主机硬件与操作系统要求
先说说硬件。我个人的经验是:CPU核心数越多越好,内存至少8GB,磁盘至少100GB空闲空间。为什么?Yocto编译时会同时启动几十个任务,每个任务都可能占用几百MB内存。我曾经在4核8GB的笔记本上编译一个基础镜像,结果swap分区被撑爆,系统直接卡死。
| 硬件项 | 最低要求 | 推荐配置 | 备注 |
|---|---|---|---|
| CPU | 双核 x86_64 | 4核及以上 | ARM架构宿主机不推荐 |
| 内存 | 4GB | 16GB | 8GB勉强可用,但会很慢 |
| 磁盘 | 50GB | 200GB+ SSD | 单个构建可能吃掉30-80GB |
| 操作系统 | Ubuntu 20.04 LTS | Ubuntu 22.04 LTS | 其他发行版需自行适配 |
注意:不要用WSL1或Cygwin跑Yocto。WSL2勉强能用,但文件系统性能很差。我建议直接用原生Linux,或者用VMware/VirtualBox装一个干净的Ubuntu。
2.2 安装必要软件包
操作系统装好后,第一件事就是装依赖。Yocto官方文档里列了一大串,但说白了就是三类:编译工具链、Python/Perl脚本环境、以及一些系统库。
我个人习惯用Ubuntu 22.04,所以下面的命令基于apt。如果你用Fedora或OpenSUSE,包名会略有不同,但原理一样。
# 更新包索引
sudo apt update
# 安装核心编译工具
sudo apt install gcc g++ make cmake
# 安装Python和Perl
sudo apt install python3 python3-pip python3-venv perl
# 安装版本控制工具
sudo apt install git git-lfs
# 安装Yocto需要的系统库
sudo apt install chrpath diffstat gawk lz4 zstd unzip zip
# 安装文档生成工具(可选,但建议装)
sudo apt install texinfo help2man
# 安装网络工具
sudo apt install curl wget
# 安装其他常用工具
sudo apt install vim tmux htop
你可能会问:这么多包,少装一两个行不行?千万别省。我曾经在某个项目里漏装了chrpath,结果编译到一半报错,排查了整整两个小时才发现是依赖缺失。Yocto的构建系统对依赖检查很严格,缺一个包就直接报错退出。
小技巧:装完所有包后,可以用dpkg -l | grep <包名>快速验证是否安装成功。另外,建议把python3 --version和git --version也跑一遍,确保版本符合要求。
2.3 配置Git和Repo
Yocto的源码管理依赖Git和Google的Repo工具。Repo说白了就是一个Python脚本,用来管理多个Git仓库的版本组合。你想想看,Poky本身包含BitBake、OpenEmbedded-Core、各种BSP层……如果每个都手动clone再切分支,那得多麻烦?
2.3.1 配置Git全局信息
先配好Git的用户信息,否则Repo会报错:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 推荐开启颜色显示
git config --global color.ui auto
# 设置默认分支名(可选)
git config --global init.defaultBranch main
2.3.2 安装Repo工具
Repo的安装方式很简单,本质就是下载一个脚本放到PATH里:
# 创建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
# 验证安装
repo --version
注意:如果你在墙内网络环境,Google的Repo下载地址可能被屏蔽。可以用国内镜像源替换:curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo。另外,Repo默认会从Google的Gerrit服务器同步manifest,同样需要配置镜像。
2.4 下载Poky参考发行版
环境配好了,终于可以下载Poky了。Poky是Yocto项目的参考发行版,包含了构建嵌入式Linux系统所需的核心组件:BitBake构建引擎、OpenEmbedded-Core元数据、以及一些基础BSP层。
我个人习惯把Yocto相关的工作都放在~/yocto目录下,方便管理:
# 创建工作目录
mkdir -p ~/yocto
cd ~/yocto
# 初始化Repo仓库(以kirkstone分支为例)
repo init -u https://git.yoctoproject.org/poky -b kirkstone
# 同步所有子仓库
repo sync
这里解释一下repo init的参数:
-u:指定manifest仓库的URL,Poky的manifest里定义了所有子仓库的地址和版本。-b:指定分支名。Yocto每两年发布一个LTS版本,kirkstone是2022年的LTS,稳定且文档齐全。
同步完成后,你会看到~/yocto/poky目录下多了很多子目录:
~/yocto/poky/
├── bitbake/ # BitBake构建引擎
├── documentation/ # 文档
├── meta/ # OpenEmbedded-Core核心层
├── meta-poky/ # Poky参考发行版配置
├── meta-selftest/ # 自测试层
├── meta-skeleton/ # 层模板
├── meta-yocto-bsp/ # 参考BSP(支持qemu等)
├── oe-init-build-env # 环境初始化脚本
└── README.hardware # 硬件支持说明
提示:第一次repo sync会下载几百MB的数据,取决于网络速度。如果中途断了,重新执行repo sync即可,它会断点续传。另外,建议用repo sync -j4并行下载,能快不少。
2.5 验证环境:第一次构建
下载完成后,咱们先跑一个最简单的构建,验证环境是否真的配好了。Poky自带了一个oe-init-build-env脚本,用来初始化构建环境:
cd ~/yocto/poky
source oe-init-build-env build-test
执行后,脚本会自动创建build-test目录,并切换到该目录。然后运行:
bitbake core-image-minimal
这个命令会构建一个最小的嵌入式Linux镜像,包含内核、根文件系统和基本的BusyBox工具。第一次构建会下载源码包并编译工具链,耗时较长(1-3小时),但后续构建会快很多。
避坑指南:我曾经在第一次构建时遇到do_fetch失败,原因是网络不稳定导致源码包下载中断。解决办法是配置BB_NO_NETWORK = "0"和BB_FETCH_PREMIRRORONLY = "0",或者用国内镜像源替换PREMIRRORS。具体配置方法后面章节会详细讲。
构建成功后,你会看到类似这样的输出:
NOTE: Tasks summary: Attempted 1234 tasks of which 0 didn't need to be rerun, all succeeded.
生成的镜像文件在build-test/tmp/deploy/images/qemux86-64/目录下。可以用QEMU直接启动验证:
runqemu qemux86-64
看到QEMU窗口里Linux启动成功,出现登录提示符——嗯,到这一步,你的Yocto开发环境就算正式搭好了。
2.6 本章知识体系
下面这张图总结了搭建Yocto开发环境的完整流程和关键节点:
这张图把整个搭建流程串起来了。从宿主机准备开始,到安装依赖、配置工具、下载源码,最后用一次构建验证环境是否可用。每一步都有对应的检查点,建议你按图索骥,别跳步。
最后说一句:环境搭建是Yocto学习中最枯燥但最重要的一步。我见过太多人因为环境没配好,后面编译报错时一头雾水。花半天时间把这一步做扎实,后面会顺畅很多。