Yocto
定义
Yocto是一项面向嵌入式Linux开发的开源协作计划,由Linux基金会在2010年组织设立[2]。它交付的并非可以直接烧录的成品系统,而是一整套描述如何从源码生成系统的元数据、构建引擎和辅助工具[1]。项目文档对自身的定位是:它不提供某个嵌入式发行版,而是把定制发行版的过程交给使用者[5]。
第二段占位
原理
构建的核心是BitBake,它承担任务调度与执行的角色。构建前,BitBake先解析配方与配置数据,据此生成依赖树,再按顺序完成下载、打补丁、配置、编译与打包。凡是描述软件包如何从源码变成二进制的内容,都被归入元数据,其中以 .bb 结尾的配方是最常见的一类[6]。
源代码获取地址、需应用的补丁、校验码、编译选项以及包之间的依赖关系,都写在配方里[6]。构建完成的软件先进入暂存区,再按 rpm、deb 或 ipk 三种格式之一打成包,随后用于生成根文件系统镜像与交叉开发工具链[3]。整个流程大致可以表示为:
配置与配方 → BitBake 解析 → 抓取源码 → 打补丁与编译 → 拆包与打包 → 质量检查 → 镜像与 SDK。
另一项关键设计是层模型。相关的配方被归入同一个层,层按层级叠加,后加入的层可以覆盖先前层的设置,因此硬件相关的配置可以与通用软件配置相互隔离[6]。层名通常以 meta- 开头,虽非强制要求,但已成为社区通行习惯;要参与构建的层通过构建目录中 bblayers.conf 的 BBLAYERS 变量登记[7]。若只需对既有配方做局部调整,可以编写 .bbappend 追加文件,而不必复制整个配方[7]。
发展历程
2010 年 10 月,Linux基金会在嵌入式Linux大会欧洲站宣布成立Yocto项目,定位为面向嵌入式领域的协作工作组,并同期推出 0.9 版本,其中包含若干基础构建工具的早期形态[2][8]。它的技术底座来自Poky,而Poky又脱胎于OpenEmbedded,两者此后长期保持技术协作关系,OpenEmbedded在项目的治理机构中也有代表席位[8]。
2011 年到 2013 年间,项目陆续发布 1.0 至 1.4 等版本,层模型与顾问委员会制度在这一时期成形[9][10]。1.0 版本代号 Bernard,于 2011 年 4 月 5 日发布;1.4 版本代号 Dylan,于 2013 年 4 月 26 日发布[10]。此后版本代号按英文字母顺序排列,形成一套可循的命名惯例[10]。
2013 年至 2017 年间,项目引入共享状态缓存、多配置构建与独立系统根目录等机制,并加强对 opkg 包管理的支持[9]。2020 年 3 月,项目宣布设立长期支持发布通道,每两年推出一个 LTS 版本,最初的维护期为两年,后延长至四年[5][11]。3.1 版本 Dunfell 成为首个 LTS 版本[5]。
常规版本保持约半年一版的节奏,大致落在每年 4 月与 10 月,普通稳定版在首发后维护七个月[12]。5.0 版本代号 Scarthgap 于 2024 年 4 月发布,属 LTS 版本,维护期至 2028 年 4 月[12]。
应用
由于构建过程与指令集架构解耦,同一套元数据可以面向 x86、ARM、MIPS、PowerPC 与 RISC-V 等平台产出系统,切换目标通常只需改动配置项[3]。板级支持包以独立层的形式提供,芯片厂商可发布自己维护的 BSP 层,开发者按需引入而无需改动通用层[7]。
在产业界,该项目被用于汽车信息娱乐、消费电子与工业制造等场景的Linux系统开发[9]。一些下游发行版直接以Poky作为集成底座,例如openEuler Embedded便在其上叠加自有配方层,以覆盖基础层中的软件包版本[6]。项目还设有兼容性标识,通过审核的BSP、层与相关开源项目可使用统一的品牌标识,用以标示其符合最低限度的标准化要求[7]。
面向应用开发者,项目提供可扩展SDK,其中的 devtool 命令行工具支持在SDK内新增、修改与升级配方,并把改动回灌到镜像中[7]。构建完成后可直接生成包含交叉编译工具链与头文件的安装包,供上层应用在目标硬件上开发调试[3]。
局限
构建代价较高是公认的门槛。完整从源码构建一套带图形界面的系统,早期资料给出的量级是大约一个半小时,这决定了它更适合需要长期维护的产品线而非一次性试验[4]。构建主机需要预先装好一系列依赖包,若发行版自带的 Git、Python 等组件版本偏旧,还需额外安装构建工具包。
半年一次的发布节奏对商业产品而言偏快,这也是项目后来另设 LTS 通道的原因[5]。即使是 LTS 版本,其覆盖范围也有限:只有 BitBake、OpenEmbedded-core、meta-yocto-bsp、meta-poky 与文档纳入维护,meta-openembedded 及各类厂商层不在其列,并且只在部分受支持的宿主平台上验证[5]。
社区的定位说明也指出了能力边界:项目不替代商业厂商提供的长周期支持,也不承诺修复全部 CVE,只负责整合经过测试并提交的修复;使用者自行添加的配方与定制内容更不在检查范围之内[5]。此外,项目中部分组件长期面临维护人手不足的状况,devtool、toaster、wic 等工具均在其列[13]。
参见
-
OpenEmbedded —— Yocto的技术来源与长期协作对象,两者共享核心元数据。
-
BitBake —— Yocto所用构建系统的任务调度与执行引擎。
-
Linux基金会 —— 宣布设立并托管Yocto项目的组织。
-
Poky —— Yocto的参考发行版,也是其构建系统的集成底座。
-
嵌入式Linux —— Yocto面向的主要系统形态。
参考资料
- Yocto Project Overview and Concepts Manual [引用日期2026-10-29]
- linuxfoundation.org 上的网页 [引用日期2026-10-29]
- Yocto介绍 [引用日期2026-10-29]
- Yocto-ESC-BOS-2011a(PDF) [引用日期2026-10-29]
- yocto [引用日期2026-10-29]
- 常见问题 [引用日期2026-10-29]
- 1 Introducing the Yocto Project [引用日期2026-10-29]
- Outline [引用日期2026-10-29]
- yocto PROJECT [引用日期2026-10-29]
- yocto [引用日期2026-10-29]
- Ross Burton ross [引用日期2026-10-29]
- 3 Yocto Project Releases and the Stable Release Process [引用日期2026-10-29]
- Yocto Project Status 8 Oct. 2024 (WW41) [引用日期2026-10-29]