2. 开发环境搭建:宿主机要求、安装必要软件包、配置Git与Repo、下载Poky源码、首次构建最小系统

好,咱们正式开始动手了。这一章的目标很明确——把Yocto的开发环境搭起来,然后跑通第一个最小系统。我见过太多新手卡在这一步,要么是系统版本不对,要么是缺了某个包,折腾一整天还没开始编译。别急,跟着我的节奏来,半小时内你就能看到Poky的编译输出。

2.1 宿主机要求

先说硬件。Yocto编译是个吃资源的事,尤其是第一次构建,要下载大量源码包并交叉编译。我个人建议:

  • CPU:4核以上,8核更佳。编译时能明显感觉到多核的优势。
  • 内存:至少8GB,16GB比较舒服。我曾在4GB的虚拟机上试过,swap狂飙,编译到一半直接OOM。
  • 磁盘:至少100GB空闲空间。一个完整的Poky构建下来,大概要占用30-50GB。如果你同时维护多个构建目录,空间需求会更大。
  • 操作系统:Ubuntu 20.04/22.04 LTS 或 CentOS 7/8。我个人偏爱Ubuntu,包管理方便,社区支持也好。
注意: 不建议在Windows上直接跑Yocto。WSL2勉强能用,但文件系统性能差,容易踩坑。老老实实用原生Linux吧。

2.2 安装必要软件包

Yocto对宿主机有一堆依赖。说白了,就是编译工具链、Python、Perl、一些库文件。不同发行版的包名略有差异,我以Ubuntu 22.04为例:

sudo apt update
sudo apt install gcc g++ make cmake patch diffstat texinfo \
  chrpath wget cpio unzip tar bzip2 gzip lz4 zstd \
  python3 python3-pip python3-pexpect python3-git \
  xz-utils debianutils iputils-ping libssl-dev \
  libncurses-dev libelf-dev liblz4-tool

嗯,这里要注意。有些包是Yocto的硬性要求,比如chrpath和diffstat,少了它们编译到一半会报错。我曾经在CentOS上漏装了texinfo,结果文档生成阶段直接挂掉,排查了半天才发现。

如果你用的是CentOS/RHEL,对应的命令是:

sudo yum install gcc gcc-c++ make cmake patch diffstat texinfo \
  chrpath wget cpio unzip tar bzip2 gzip lz4 \
  python3 python3-pip python3-pexpect python3-git \
  xz-devel openssl-devel ncurses-devel elfutils-libelf-devel

2.3 配置Git与Repo

Yocto的源码管理依赖Git和Repo。Git大家都很熟了,Repo是Google开发的一个多仓库管理工具,用来同时管理Poky、meta层、BSP等多个Git仓库。

先确认Git版本:

git --version

建议1.8.3以上。然后配置你的用户信息:

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

接下来安装Repo。其实Repo就是一个Python脚本,下载下来放到PATH里就行:

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

记得把~/.local/bin加到.bashrc或.zshrc里,不然每次开终端都要重新export。

小技巧: 如果你在墙内,Repo的下载可能会超时。可以用国内的镜像源,比如把URL换成https://mirrors.tuna.tsinghua.edu.cn/git/git-repo。

2.4 下载Poky源码

Poky是Yocto的参考发行版,也是我们学习的起点。下载Poky有两种方式:

方式一:直接Git clone

git clone git://git.yoctoproject.org/poky
cd poky
git checkout <tag>  # 比如 dunfell, gatesgarth, honister

方式二:使用Repo(推荐)

Repo可以一次性拉取Poky及其所有依赖的meta层:

mkdir yocto-build
cd yocto-build
repo init -u git://git.yoctoproject.org/poky -b dunfell
repo sync

我个人习惯用Repo。为什么呢?因为实际项目中,你往往需要同时管理poky、meta-openembedded、meta-raspberrypi等多个仓库。Repo一条命令就能全部同步,省心。

下载完成后,目录结构大概是这样的:

yocto-build/
├── poky/
│   ├── meta/
│   ├── meta-poky/
│   ├── meta-yocto-bsp/
│   ├── scripts/
│   └── oe-init-build-env
├── .repo/
└── ...

2.5 首次构建最小系统

好,重头戏来了。第一次构建,我们选core-image-minimal——这是一个极简的Linux系统,只包含最基本的用户空间工具。说白了,就是能启动、能登录、能跑几个shell命令。

先初始化构建环境:

cd poky
source oe-init-build-env build

这个脚本会帮你创建build目录,并设置好一系列环境变量。执行完后,你会自动进入build目录。

然后编辑conf/local.conf,调整一些关键参数:

# 目标机器,默认是qemux86-64
MACHINE ?= "qemux86-64"

# 并行编译线程数,建议设为CPU核心数+1
BB_NUMBER_THREADS ?= "8"
PARALLEL_MAKE ?= "-j 8"

# 下载目录,可以共享给多个构建
DL_DIR ?= "/path/to/downloads"

# 共享状态缓存,加速后续构建
SSTATE_DIR ?= "/path/to/sstate-cache"

嗯,这里要特别说一下DL_DIR和SSTATE_DIR。如果你打算多次构建,或者同时维护多个项目,一定要把它们设到公共目录。我第一次没设,结果每次clean后都要重新下载所有源码包,浪费了大量时间。

接下来,开始构建:

bitbake core-image-minimal

第一次构建会非常慢,取决于你的网络和机器性能。一般来说,30分钟到2小时不等。BitBake会依次执行:

  • 下载所有源码包(从源码镜像或原始地址)
  • 校验完整性
  • 解压、打补丁
  • 配置、编译
  • 打包成IPK/RPM/DEB
  • 组装成根文件系统镜像

构建过程中,你可以用bitbake -s查看任务状态,或者用top观察CPU和内存使用。如果一切顺利,最后你会看到类似这样的输出:

NOTE: Tasks Summary: Attempted 1234 tasks of which 0 didn't need to be rerun and all succeeded.

构建产物在tmp/deploy/images/qemux86-64/目录下:

core-image-minimal-qemux86-64.rootfs.ext4
core-image-minimal-qemux86-64.rootfs.tar.bz2
core-image-minimal-qemux86-64.vmdk
...

你可以用QEMU直接启动它:

runqemu qemux86-64

看到登录提示符的那一刻,恭喜你——你的第一个Yocto系统跑起来了!

核心要点:
  • 宿主机推荐Ubuntu 20.04/22.04,8GB内存+100GB磁盘起步
  • 安装完整依赖包,缺一不可
  • 用Repo管理多仓库,比纯Git更方便
  • 第一次构建选core-image-minimal,验证环境正确性
  • 善用DL_DIR和SSTATE_DIR加速后续构建
避坑指南: 我曾经在构建过程中遇到do_fetch失败,原因是某个源码包被墙了。解决方案是配置PREMIRRORS,指向国内的镜像源。具体配置方法,后面章节会详细讲。
开发环境搭建流程 ① 宿主机准备 硬件:4核CPU / 8GB内存 / 100GB磁盘 软件:Ubuntu 20.04/22.04 LTS ② 安装必要软件包 gcc / python3 / chrpath / diffstat / texinfo / lz4 ... apt install 或 yum install 一键安装 ③ 配置Git与Repo Git:配置user.name / user.email Repo:下载脚本 → 添加PATH → 验证版本 ④ 下载Poky源码 方式一:git clone poky 方式二:repo init + repo sync(推荐)

好了,环境搭好了,第一个系统也跑起来了。接下来你就可以开始折腾了——换BSP、加软件包、改内核配置,Yocto的世界才刚刚打开。

可可精品资料库