第2章:Yocto项目环境搭建——宿主机准备、安装必要工具、配置Git与Repo、首次构建最小系统
好,咱们正式开始动手。这一章的目标很明确:在你的电脑上搭出一套能用的Yocto构建环境,然后跑通第一次编译。别小看这一步,我见过太多人卡在环境配置上,一卡就是一两天。说白了,环境没搭好,后面全是白搭。
2.1 宿主机选型与准备
Yocto项目对宿主机的操作系统有明确要求。我个人习惯用Ubuntu LTS版本,目前推荐20.04或22.04。为什么?因为社区支持最全,遇到问题搜一下基本都有答案。
宿主机最低配置建议:
- CPU:4核以上(8核更佳)
- 内存:8GB起步,16GB才舒服
- 磁盘:至少100GB空闲空间(SSD优先)
- 网络:稳定的宽带连接(首次构建需要下载大量源码)
嗯,这里要注意:千万别用虚拟机跑在机械硬盘上。我曾经在一台老笔记本上试过,一次完整构建花了将近8个小时——你想想看,这谁受得了?
2.2 安装必要工具包
Yocto构建系统依赖一堆基础工具。别慌,一条命令就能搞定。我建议你直接复制下面这条,别自己一个个装,容易漏。
sudo apt update
sudo apt 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 pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool
装完之后,验证一下关键工具是否到位:
gcc --version
python3 --version
git --version
make --version
小提示:如果你用的是Ubuntu 22.04,记得确认Python版本是3.10以上。Yocto的某些层对Python版本有硬性要求,版本不对会报一些莫名其妙的错。
2.3 配置Git与Repo
Git是Yocto的命根子。所有源码、补丁、配置都通过Git管理。先配好你的Git全局信息:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global color.ui auto
接下来是Repo工具。Repo是Google开发的一个多仓库管理工具,Yocto用它来管理多个Git仓库的协同工作。安装Repo很简单:
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 里,不然每次开终端都要重新执行一遍。这个坑我踩过,当时还纳闷怎么每次repo命令都找不到。
2.4 首次构建最小系统
好,环境准备好了,咱们来真的。先创建一个工作目录,然后初始化Yocto项目:
mkdir yocto-build
cd yocto-build
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync
repo sync 这一步会下载所有源码,时间取决于你的网速。我建议你找个网络好的时段做这件事,或者干脆挂一晚上。下载完成后,目录结构大概是这样:
| 目录/文件 | 说明 |
|---|---|
| poky/ | Yocto核心元数据(BitBake、OpenEmbedded核心层) |
| meta/ | OpenEmbedded核心层 |
| meta-poky/ | Poky参考发行版配置 |
| meta-yocto-bsp/ | Yocto参考板级支持包 |
| scripts/ | 辅助脚本工具 |
接下来,设置构建环境并初始化:
cd poky
source oe-init-build-env build
这条命令会创建一个 build 目录,并自动切换到该目录。同时会生成两个关键配置文件:
conf/local.conf:本地构建配置(目标机器、并行任务数等)conf/bblayers.conf:层配置(哪些层参与构建)
在开始构建之前,我建议你优化一下 local.conf:
# 根据你的CPU核心数设置并行编译
BB_NUMBER_THREADS = "4"
PARALLEL_MAKE = "-j 4"
# 指定目标机器(这里用qemux86-64做测试)
MACHINE = "qemux86-64"
# 开启一些调试信息
INHERIT += "rm_work"
警告:别把 BB_NUMBER_THREADS 设得比你的CPU核心数还大。我曾经图快设成16,结果系统直接卡死,连鼠标都动不了。老老实实按核心数来,稳一点。
好了,万事俱备,开始构建最小系统镜像:
bitbake core-image-minimal
这条命令会编译一个最精简的Linux系统,包含内核、根文件系统和基本的BusyBox工具。首次构建时间很长,通常1-3小时不等。你可以去喝杯咖啡,或者看看文档。
构建完成后,你会看到类似这样的输出:
NOTE: Tasks Summary: Attempted 1234 tasks of which 0 didn't need to be rerun and all succeeded.
生成的镜像文件在 tmp/deploy/images/qemux86-64/ 目录下。你可以用QEMU直接启动它:
runqemu qemux86-64
看到系统启动、登录提示出现的那一刻,恭喜你——Yocto环境搭建成功了。
避坑指南:我曾经在构建过程中遇到磁盘空间不足的错误。建议你在构建前用 df -h 确认一下磁盘余量。如果空间紧张,可以在 local.conf 里设置 DL_DIR 和 SSTATE_DIR 到其他分区。
2.5 本章知识体系
下面这张图帮你理清本章的核心逻辑:
这张图把本章的六个关键步骤串起来了。从宿主机准备开始,一步步走到首次构建成功。每一步都有坑,但只要你按顺序来,基本不会出大问题。
嗯,环境搭建这部分就到这里。记住:第一次构建慢是正常的,别着急。后面咱们会在这个基础上加入MQTT和OTA升级的功能,那才是真正精彩的部分。