2、开发环境搭建:宿主机要求与首次构建
好,咱们正式开始动手了。这一章我带你搭好开发环境,把Yocto跑起来。说实话,环境搭建这一步看着简单,但坑不少。我见过太多人卡在依赖包没装全、磁盘空间不够这些基础问题上。咱们一步步来,别急。
2.1 宿主机要求
Yocto对宿主机有硬性要求。不是随便一台Linux都能跑的。我个人习惯用Ubuntu LTS版本,比如20.04或22.04。Debian也行,但Ubuntu的社区支持更活跃,遇到问题好搜。
硬件最低要求:
- CPU:4核以上(推荐8核)
- 内存:8GB以上(推荐16GB)
- 磁盘:100GB空闲空间(推荐200GB+)
- 文件系统:ext4(别用NTFS或FAT32,Yocto的硬链接会出问题)
磁盘这块我要多说一句。Yocto构建过程中会产生大量临时文件,一个最小系统构建下来大概要30-50GB。如果你同时维护多个项目,200GB很快就用完了。我在项目中吃过这个亏,构建到一半磁盘满了,那叫一个崩溃。
2.2 安装必要软件包
Yocto依赖一堆系统工具。Ubuntu 20.04/22.04上,执行下面这条命令就行:
sudo apt-get update
sudo apt-get install 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
嗯,这里要注意。不同Ubuntu版本需要的包略有差异。比如Ubuntu 22.04需要额外装python3-pip,而20.04可能不需要。我建议你装完后跑一下Yocto自带的检查脚本,后面会说到。
小技巧:如果你用的是Debian,记得先启用backports源,否则某些包版本太旧。我曾在Debian 11上折腾了半天,最后发现是chrpath版本不够新。
2.3 配置Git和Repo
Yocto源码管理依赖Git和Repo。Git大家应该都熟,Repo是Google开发的Android源码管理工具,Yocto也用它来管理多个Git仓库。
先配Git:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global color.ui auto
然后装Repo。我建议用Google官方的安装方式:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
记得把export PATH=~/bin:$PATH加到~/.bashrc里,不然每次开终端都要重新执行。我曾经忘了这一步,每次构建前都要手动export,烦得很。
2.4 下载Yocto源码
Yocto的源码通过Repo来同步。咱们以最新的稳定分支kirkstone为例:
mkdir yocto-kirkstone
cd yocto-kirkstone
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync
这个过程取决于你的网络。第一次同步大概要下载1-2GB数据。如果网络不好,可以加-j4参数并行下载:
repo sync -j4
同步完成后,你会看到这些核心目录:
| 目录/文件 | 说明 |
|---|---|
poky/ |
Yocto核心层,包含BitBake和OpenEmbedded |
meta/ |
基础元数据层,提供通用配方 |
meta-poky/ |
Poky发行版配置 |
meta-yocto-bsp/ |
参考板级支持包 |
scripts/ |
辅助脚本,比如检查环境的oe-check-env |
注意:不要用sudo执行repo sync。Yocto构建过程中会创建大量文件,如果用root权限下载,后续普通用户可能无法正常读写。我见过有人图省事用sudo,结果构建时各种权限报错。
2.5 首次构建最小系统
好,源码到手了。咱们来构建第一个最小系统。Yocto里有个叫core-image-minimal的目标,它只包含最基本的Linux内核和根文件系统,非常适合用来验证环境。
先设置构建环境:
cd poky
source oe-init-build-env build
这条命令会做三件事:
- 创建
build目录(如果不存在) - 生成
conf/local.conf和conf/bblayers.conf - 设置环境变量,把BitBake加入PATH
然后检查一下local.conf,确保关键参数正确:
# 指定目标机器,默认是qemux86-64
MACHINE ??= "qemux86-64"
# 并行编译线程数,建议设为CPU核心数+1
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"
# 下载目录,可以复用,避免重复下载
DL_DIR ?= "${TOPDIR}/../downloads"
我个人习惯把DL_DIR设到构建目录外面,这样多个项目可以共享下载的源码包,省带宽也省时间。
开始构建:
bitbake core-image-minimal
第一次构建会花很长时间。为什么?因为Yocto要从源码编译整个工具链、内核、根文件系统。在我的8核机器上,第一次构建大概要1.5小时。如果网络慢,下载源码包的时间会更长。
提速技巧:如果你有现成的sstate缓存,可以配置SSTATE_DIR指向它。Yocto会跳过已编译的组件,速度能快好几倍。我在团队里就搭了一个共享sstate服务器,大家构建时间从2小时降到了20分钟。
构建完成后,输出在tmp/deploy/images/qemux86-64/目录下。你会看到:
core-image-minimal-qemux86-64.rootfs.ext4— 根文件系统镜像core-image-minimal-qemux86-64.rootfs.tar.bz2— 根文件系统压缩包bzImage— 内核镜像
用QEMU启动试试:
runqemu qemux86-64
看到登录提示符了吗?默认用户名root,没有密码。恭喜,你的第一个Yocto系统跑起来了!
避坑指南:如果runqemu报错说找不到qemu-system-x86_64,说明你没装QEMU。执行sudo apt-get install qemu-system-x86就行。我曾经在Ubuntu Server上构建,默认没装图形界面,结果QEMU启动不了。后来加了-nographic参数才搞定。
嗯,环境搭建就到这儿。下一章咱们会深入Yocto的层结构,看看怎么添加自己的软件包。你先把这个最小系统跑通,后面就好办了。