搭建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开发环境搭建流程 宿主机准备 Ubuntu 22.04 / 16GB RAM / 200GB SSD 安装系统依赖 gcc / python3 / git / chrpath 等 配置Git & Repo user.name / repo 脚本 下载Poky参考发行版 repo init -b kirkstone → repo sync 初始化构建环境 source oe-init-build-env build-test 首次构建验证 bitbake core-image-minimal 常见问题与避坑 • 磁盘空间不足:构建过程中临时文件会占用大量空间,建议预留100GB+ • 网络问题:使用国内镜像源加速下载,配置PREMIRRORS避免fetch失败 验证成功的标志 • bitbake构建完成,无ERROR日志 • runqemu能正常启动QEMU并进入Linux登录提示符

这张图把整个搭建流程串起来了。从宿主机准备开始,到安装依赖、配置工具、下载源码,最后用一次构建验证环境是否可用。每一步都有对应的检查点,建议你按图索骥,别跳步。

最后说一句:环境搭建是Yocto学习中最枯燥但最重要的一步。我见过太多人因为环境没配好,后面编译报错时一头雾水。花半天时间把这一步做扎实,后面会顺畅很多。