Yocto项目实战:自定义Linux发行版构建 - 第3节
3.1 Poky 是什么?
Poky 是 Yocto 项目的参考发行版和构建系统参考实现。它不是 Yocto 项目的全部,而是 Yocto 项目最核心、最基础的“样板间”。理解 Poky 是掌握 Yocto 的第一步。
3.1.1 Poky 的核心组成
Poky 本质上是一个聚合仓库,它包含了构建一个最小 Linux 系统所需的所有关键组件。下表列出了 Poky 的主要组成部分及其作用:
| 组件 | 说明 | 在 Poky 中的角色 |
|---|---|---|
| BitBake | 任务执行引擎 | 解析元数据(配方、层、配置文件),调度和执行构建任务 |
| OpenEmbedded-Core (OE-Core) | 核心元数据层 | 提供基础配方(recipes)、类(classes)和机器配置,是构建 Linux 发行版的“配方库” |
| meta-poky | Poky 发行版配置层 | 定义 Poky 作为参考发行版的默认策略、版本号和特性集 |
| meta-yocto-bsp | 参考板级支持包层 | 提供对 QEMU(模拟器)和部分真实硬件的内核配置与设备支持 |
| 文档与脚本 | 辅助工具 | 包含 oe-init-build-env 等初始化脚本和构建说明 |
3.1.2 Poky 在 Yocto 项目中的位置
下面的 SVG 图展示了 Poky 与 Yocto 项目其他组件之间的关系。Poky 位于核心位置,是构建自定义发行版的起点。
3.2 下载 Poky 源码
Poky 的源码托管在 git.yoctoproject.org。我们使用 Git 来克隆它。推荐的做法是克隆一个特定的稳定分支,而不是直接使用 master 分支,以确保构建环境的稳定性。
3.2.1 环境准备与分支选择
在开始之前,请确保你的 Linux 主机(推荐 Ubuntu 22.04 或 CentOS 7+)已经安装了以下基础软件包:
- Git:用于版本控制。
- tar:用于解压工具链。
- Python 3:BitBake 依赖 Python 3。
- gcc / g++:用于编译本地工具。
- make:构建工具。
Yocto 项目每 6 个月发布一个稳定版本(如 Mickledore、Nanbield)。下表列出了常用的 Poky 稳定分支及其对应的 Yocto 版本:
| Yocto 版本 | Poky 分支名 | 建议用途 |
|---|---|---|
| 4.3 (Nanbield) | nanbield |
最新稳定版,用于新项目 |
| 4.2 (Mickledore) | mickledore |
上一稳定版,兼容性好 |
| 4.1 (Langdale) | langdale |
长期支持版 (LTS) |
| 4.0 (Kirkstone) | kirkstone |
长期支持版 (LTS),推荐企业使用 |
3.2.2 克隆 Poky 源码
打开终端,执行以下命令来克隆 Poky 的 kirkstone 分支(LTS 版本,稳定性最佳):
# 克隆 Poky 源码到本地 poky-kirkstone 目录
git clone -b kirkstone git://git.yoctoproject.org/poky poky-kirkstone
# 进入目录
cd poky-kirkstone
git:// 协议被防火墙阻止,可以尝试使用 https:// 协议:git clone -b kirkstone https://git.yoctoproject.org/git/poky poky-kirkstone。克隆过程可能需要几分钟,取决于你的网络速度。
克隆完成后,目录结构如下所示:
poky-kirkstone/
├── bitbake/ # BitBake 引擎源码
├── meta/ # OE-Core 核心元数据
├── meta-poky/ # Poky 发行版配置
├── meta-yocto-bsp/ # 参考 BSP
├── oe-init-build-env # 构建环境初始化脚本
├── README.md
└── ...
3.3 构建第一个最小镜像
有了源码,我们就可以开始构建第一个镜像了。Yocto 项目提供了一个名为 core-image-minimal 的配方,它构建一个仅包含 BusyBox 和基本系统工具的最小 Linux 镜像,非常适合验证构建环境。
3.3.1 构建流程概览
下面的 SVG 流程图展示了从下载源码到生成最终镜像的完整步骤:
3.3.2 分步构建命令
按照以下步骤,在 poky-kirkstone 目录中执行构建:
-
初始化构建环境:
# 在 poky-kirkstone 目录下执行 source oe-init-build-env build-qemu这个脚本会做三件事:
- 创建一个名为
build-qemu的构建目录(如果不存在)。 - 将当前工作目录切换到
build-qemu。 - 设置
PATH等环境变量,使bitbake命令可用。
- 创建一个名为
-
检查构建配置:
初始化后,
build-qemu/conf目录下会生成两个关键配置文件:local.conf:本地构建配置,如目标机器、并行编译数等。bblayers.conf:定义哪些层(layers)参与构建。
对于首次构建,默认配置已经足够。你可以用
cat命令查看:cat conf/local.conf | grep -E "^MACHINE|^BB_NUMBER_THREADS|^PARALLEL_MAKE" -
执行构建:
# 构建最小镜像 bitbake core-image-minimalBitBake 会开始解析元数据、下载源码包、编译工具链和软件包,最终生成镜像文件。构建过程中,终端会显示实时进度。
3.3.3 构建输出与验证
构建成功后,输出文件位于 build-qemu/tmp/deploy/images/qemux86-64/ 目录下。关键文件包括:
| 文件 | 说明 |
|---|---|
core-image-minimal-qemux86-64.rootfs.ext4 |
根文件系统镜像(ext4 格式) |
core-image-minimal-qemux86-64.rootfs.tar.bz2 |
根文件系统的压缩归档 |
bzImage |
Linux 内核镜像 |
core-image-minimal-qemux86-64.qemuboot.conf |
QEMU 启动配置文件 |
你可以使用 QEMU 模拟器来启动这个镜像,验证构建是否成功:
# 在 build-qemu 目录下执行
runqemu qemux86-64
Poky (Yocto Project Reference Distro) 4.0.x qemux86-64 ttyS0 的登录提示符。输入 root 登录(无密码),你就成功进入了自己构建的最小 Linux 系统!
3.4 本章小结
通过本章的学习,你掌握了以下核心知识点:
- Poky 的定义:Yocto 项目的参考发行版,包含 BitBake、OE-Core、meta-poky 和 meta-yocto-bsp。
- 源码下载:使用
git clone命令克隆 Poky 的稳定分支(如kirkstone)。 - 构建流程:通过
source oe-init-build-env初始化环境,然后执行bitbake core-image-minimal构建最小镜像。 - 输出验证:使用
runqemu在 QEMU 中启动构建好的镜像。