3、获取Yocto源码:下载Poky参考发行版、理解源码目录结构、选择稳定分支、首次构建前的检查清单
好,咱们正式开始动手了。这一章要解决一个最基础的问题——源码从哪来,怎么选,拿到手之后长什么样。很多新手一上来就 git clone,结果拉了个 master 分支,编译到一半发现依赖全对不上,心态直接崩了。我当年也干过这事,所以这一章咱们把话说清楚。
3.1 下载Poky参考发行版
Poky 是什么?说白了,它是 Yocto 官方提供的一个参考发行版。它不是产品级的系统,但包含了 Yocto 最核心的构建框架、BitBake 工具链、以及一堆常用元数据。你拿它来学习、做原型验证,完全够用。
下载方式很简单,用 git 就行:
git clone git://git.yoctoproject.org/poky
cd poky
嗯,这里要注意:不要直接 clone master 分支。master 是开发分支,天天在变,依赖的软件包版本可能还没稳定。我建议你 clone 完之后立刻切到一个稳定分支。
3.2 理解源码目录结构
Poky 拉下来之后,你会看到一堆目录。别慌,咱们挑几个核心的讲:
| 目录/文件 | 作用 |
|---|---|
bitbake/ |
BitBake 构建引擎的源码。Yocto 的灵魂就在这里。 |
meta/ |
核心元数据层。包含 OE-Core 的基础配方、类和配置文件。 |
meta-poky/ |
Poky 发行版的特定配置。比如默认的 DISTRO 设置。 |
meta-yocto-bsp/ |
官方支持的板级支持包(BSP)。比如 QEMU 模拟器、BeagleBone 等。 |
scripts/ |
一些辅助脚本,比如 oe-init-build-env 就在这里面。 |
oe-init-build-env |
环境初始化脚本。每次构建前都要 source 它。 |
你想想看,整个 Yocto 项目其实就是一堆 层(Layer) 的堆叠。Poky 本身包含了三个核心层:meta、meta-poky、meta-yocto-bsp。以后你加自己的东西,就是再加一层。
3.3 选择稳定分支
分支怎么选?我直接给结论:
- 学习用:选最新的 LTS 分支。比如
kirkstone(4.0)、dunfell(3.1)。LTS 分支维护周期长,社区支持好。 - 产品开发:选一个你确认能用的 LTS 分支,不要追新。我见过有人用
master做产品,结果三个月后某个关键包升级了 API,整个构建链全断。 - 尝鲜:可以试试
styhead这类非 LTS 分支,但别指望它稳定。
切换分支的命令:
git checkout -b kirkstone origin/kirkstone
嗯,这里有个小坑:分支名要写全。比如 kirkstone 不是 kirkstone-4.0,也不是 kirkstone-lts。直接看 git branch -a 列出来的名字,复制粘贴最保险。
git submodule update --init --recursive,把子模块也切到对应版本。
3.4 首次构建前的检查清单
好,源码有了,分支切好了。别急着敲 bitbake core-image-minimal,先过一遍检查清单。我每次搭建新环境都会走一遍这个流程,省得后面出幺蛾子。
- 检查系统依赖:Yocto 需要一堆宿主机的包。Ubuntu 上跑
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 pylint3 xterm python3-subunit mesa-common-dev。不同发行版略有差异,但核心就是这些。 - 检查磁盘空间:至少留 50GB 空闲。我第一次构建 core-image-sato 时,以为 20GB 够了,结果编译到一半磁盘满了,整个构建目录废掉,得重来。
- 检查网络:Yocto 构建时会从网上下载大量源码包。确保你的网络能访问
git://和https://源。如果在内网,提前配好代理或本地镜像。 - 检查 Python 版本:Yocto 4.0 要求 Python 3.8+。用
python3 --version确认一下。太老的版本会导致 BitBake 解析失败。 - 检查构建用户:不要用 root 用户构建。Yocto 官方明确说不支持 root 构建,因为某些任务会检查文件权限。我见过有人用 root 构建,结果生成的 rootfs 权限全乱套。
- 初始化构建环境:在 poky 目录下执行
source oe-init-build-env。这会创建一个build目录,并设置好环境变量。之后你的所有操作都在这个build目录下进行。
bitbake core-image-minimal。这个目标最小,只包含一个能启动的 Linux 系统,没有图形界面。编译时间大概 30 分钟到 1 小时(取决于机器性能)。如果这个能过,说明你的环境基本没问题。
嗯,检查清单走完,你就可以放心地开始第一次构建了。记住:Yocto 构建不是一次性的,你后面会反复修改配方、添加层、调整配置。每次改动后,都回头看一眼这个清单,尤其是磁盘空间和网络——这两样最容易出问题。
下一章,咱们就正式跑第一个构建命令,看看 Yocto 到底是怎么把一堆源码变成嵌入式 Linux 系统的。