OE-Core、Poky、Yocto Project 三者关系梳理
这三个概念是 Yocto Project 生态中的核心组成部分,它们层层嵌套、互为依赖,不是并列关系。简单来说:OE-Core 是核心元数据,Poky 是可运行的参考系统,Yocto Project 是整个伞状工程。以下从定义、包含关系、功能、实际使用四个维度详细梳理(基于最新 Yocto 5.0+ 版本,2025 年现状)。
1. 定义与定位
| 名称 | 全称/简称 | 定位 | 仓库/来源 |
|---|---|---|---|
| OE-Core | OpenEmbedded Core | 底层核心元数据仓库:提供 BitBake 构建引擎 + 基本 recipe + 配置模板。是最小化、可独立存在的“构建框架内核”。 | https://git.openembedded.org/openembedded-core |
| Poky | Poky | Yocto 的参考发行版(Reference Distribution):OE-Core + 额外配置层 + BSP 示例,形成一个完整、可直接构建的嵌入式 Linux 系统模板。 | https://git.yoctoproject.org/poky(包含 OE-Core 作为子模块) |
| Yocto Project | Yocto Project | 伞状开源项目(Umbrella Project):由 Linux Foundation 治理,包括 Poky + 工具链 + 文档 + 测试框架 + 社区标准。不是代码仓库,而是一个工程标准。 | https://www.yoctoproject.org/ |
- 一句话总结:OE-Core 是“零件库”,Poky 是“组装好的样车”,Yocto Project 是“汽车标准与生态”。
2. 包含关系(层级结构图)
+--------------------------- Yocto Project (伞状项目) ---------------------------+
| - 治理:Linux Foundation、发布周期(每6个月,如 scarthgap=5.0) |
| - 工具:devtool, Toaster, runqemu |
| - 测试:Yocto Compatible Layers, OEQA |
| - 文档:yoctoproject.org |
| |
| +------------------------ Poky (参考发行版) ---------------------------+ |
| | - meta-poky:发行版配置(distro/poky.conf) | |
| | - meta-yocto-bsp:参考 BSP(QEMU、BeagleBone 等) | |
| | - 包含 OE-Core 作为基础 | |
| | | |
| | +--------------------- OE-Core (核心元数据) --------------------+ | |
| | | - BitBake:构建引擎 | | |
| | | - recipes-core/:基本包(busybox, glibc) | | |
| | | - classes/:bbclass(如 kernel.bbclass) | | |
| | | - conf/:bitbake.conf 等模板 | | |
| | +---------------------------------------------------------------+ | |
| +----------------------------------------------------------------------+ |
+--------------------------------------------------------------------------------+
↑
└─ 实际项目扩展(如 OpenBMC 添加 meta-phosphor、meta-aspeed 等 layer)
- 关键嵌套:
- Yocto Project 包含 Poky:Poky 是 Yocto 的“官方参考实现”。
- Poky 包含 OE-Core:Poky 的
meta/目录就是 OE-Core 的克隆/子模块。 - OE-Core 不包含 Poky/Yocto:OE-Core 可以独立使用(但很少这么做)。
3. 功能对比
| 功能 | OE-Core | Poky | Yocto Project |
|---|---|---|---|
| 构建引擎 | ✅ BitBake | ✅(继承) | ✅(标准化) |
| 基本 recipe | ✅(核心包) | ✅ + 扩展 | ✅ + 兼容层 |
| 可直接构建镜像 | ❌(需额外配置) | ✅(bitbake core-image-minimal) | ✅(通过 Poky) |
| BSP 支持 | ❌(无硬件示例) | ✅(QEMU、ARM 等参考板) | ✅ + 社区 BSP |
| 版本发布 | 无固定周期 | 与 Yocto 同步 | ✅(scarthgap、nanbield 等) |
| 在 OpenBMC 中的角色 | 基础层(poky/meta/) | 环境初始化(source oe-init-build-env) | 整体标准(OpenBMC 跟踪 Yocto 分支) |
- OE-Core:最小化(~100MB),焦点是“如何构建软件包”。
- Poky:可开箱即用(~500MB+),添加了
local.conf默认模板、MACHINE=qemux86-64等。 - Yocto Project:确保一切“兼容”(层必须通过兼容性测试)。
4. 实际使用与 OpenBMC 示例
-
克隆与初始化(OpenBMC 典型流程):
git clone https://github.com/openbmc/openbmc.git cd openbmc source setup romulus # 内部会 source poky/oe-init-build-env → 初始化 Poky 环境- 这里
poky/目录 = Poky 仓库(包含 OE-Core)。 - 查看关系:
ls poky/meta/ # OE-Core 结构 cat poky/meta-poky/conf/distro/poky.conf # Poky 配置
- 这里
-
构建镜像:
bitbake obmc-phosphor-image # 基于 Poky(OE-Core + OpenBMC layer) -
版本查看(确认三者版本一致):
# Yocto 版本(代号) cat poky/meta-poky/conf/distro/poky.conf | grep DISTRO_CODENAME # e.g., scarthgap # OE-Core 版本(与 Poky 同步) git -C poky/meta/ log -1 # OE-Core 子模块 commit -
OpenBMC 的扩展:在 Poky/OE-Core 基础上添加
meta-phosphor(应用)、meta-aspeed(BMC 硬件),形成完整 BMC 镜像。
常见误区澄清
- 不是三个独立工具:你不会“单独用 OE-Core 构建 OpenBMC”,总是通过 Poky(Yocto 标准)初始化。
- 版本同步:OpenBMC 主线跟踪最新 Yocto(如 scarthgap),OE-Core/Poky 自动匹配。
- 为什么有三层:OE-Core 保持纯净,Poky 提供参考,Yocto 确保生态健康。
642

被折叠的 条评论
为什么被折叠?



