2、开发环境搭建:宿主机要求与首次构建
好,咱们正式开始动手了。这一章我带你搭好环境,把第一个最小镜像跑起来。你想想看,Yocto 再强大,也得先有个能跑的环境。我个人习惯用 Ubuntu 20.04 LTS,稳定,坑少。
2.1 宿主机要求
先说硬件。Yocto 编译起来挺吃资源的,别指望拿个老旧笔记本就能跑。我在项目中遇到过有人用 4GB 内存的虚拟机,结果编译到一半直接 OOM 了,白等两小时。
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4 核 | 8 核或更多 |
| 内存 | 8 GB | 16 GB 以上 |
| 磁盘 | 100 GB 空闲 | 250 GB SSD |
| 操作系统 | Ubuntu 20.04 / Debian 11 | Ubuntu 22.04 LTS |
2.2 安装必要软件包
Ubuntu 系统装好后,第一件事就是装依赖。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
嗯,这里要注意。不同 Ubuntu 版本包名可能略有差异。比如 Ubuntu 22.04 里 python3-pexpect 可能叫 python3-pexpect 但版本不同。我建议装完后跑一下 oe-check-env 脚本验证,后面会讲到。
2.3 配置 Git 和 Repo
Yocto 的源码管理依赖 Git,而 Repo 工具用来管理多个 Git 仓库。说白了,Repo 就是个脚本,帮你一次性拉取 Poky、meta-openembedded 等一堆仓库。
先配 Git 的用户信息,这是基本操作:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global color.ui auto
然后安装 Repo:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
为什么用 Repo?你想想看,Yocto 项目往往涉及几十个 Git 仓库,手动一个个 clone 会疯掉。Repo 用一个 manifest 文件就能描述所有仓库的版本关系,非常方便。
2.4 下载 Poky 源码
Poky 是 Yocto 的参考发行版,也是我们学习的起点。我建议用稳定分支,别追最新,否则容易遇到未修复的 bug。
mkdir yocto-project
cd yocto-project
repo init -u https://git.yoctoproject.org/poky -b kirkstone
repo sync
这里 kirkstone 是 Yocto 4.0 的长期支持版本。我个人习惯用 LTS 版本做产品,稳定第一。如果你做实验,也可以用 master 分支,但要做好随时踩坑的准备。
poky 目录就是 Yocto 的根目录。
2.5 首次构建最小镜像
好,重头戏来了。我们构建 core-image-minimal,这是一个极简的 Linux 镜像,只包含最基本的系统组件。说白了,就是能启动、能跑 shell,别的啥也没有。
先设置环境变量:
cd poky
source oe-init-build-env build
这个脚本会帮你创建 build 目录,并设置好 BitBake 的环境变量。执行完后,你会看到终端提示符变了,前面多了个 build 字样。
然后修改 conf/local.conf,指定目标机器。默认是 qemux86-64,也就是 QEMU 模拟的 x86 虚拟机。如果你想编译树莓派的镜像,改成 raspberrypi4-64 就行。
# 在 conf/local.conf 中修改
MACHINE = "qemux86-64"
最后,开始编译:
bitbake core-image-minimal
第一次编译会下载大量源码包,耗时取决于你的网络和 CPU。我实测过,8 核 i7、16GB 内存、SSD 硬盘,大概需要 40 分钟。如果你用机械硬盘,嗯…建议先去泡杯咖啡。
do_fetch 失败,原因是某些源码包被墙了。解决办法是配置代理,或者用国内镜像源。在 local.conf 里加上 PREMIRRORS 可以指定国内源。
编译成功后,镜像文件在 tmp/deploy/images/qemux86-64/ 目录下。你可以用 QEMU 启动它:
runqemu qemux86-64
看到登录提示符了吗?默认用户名是 root,没有密码。恭喜你,第一个 Yocto 镜像跑起来了!
2.6 本章知识体系
下面这张图帮你理清整个环境搭建的流程:
这张图把整个流程串起来了。从宿主机准备到最终镜像生成,每一步都有明确的输入输出。你跟着走一遍,基本不会出大问题。
core-image-minimal。等熟悉了流程,再尝试添加自己的应用和库。我在项目中见过太多人一上来就想搞个大而全的镜像,结果编译失败后连问题出在哪都找不到。
好了,环境搭好了,镜像也跑起来了。接下来你就可以开始探索 Yocto 的更多功能了。记住,动手是最好的学习方式。