一、什么是Yocto Project?

Yocto Project是一个开源协作项目,它帮助开发人员定制基于Linux的系统,这些系统是为嵌入式产品而设计的,与产品的硬件架构无关。Yocto Project提供了一个灵活的工具集和一个开发环境,允许全世界的嵌入式开发人员通过共享技术、软件堆栈、配置和最佳实践进行协作,以生成这些定制的Linux镜像。

Yocto理论篇 | Yocto Project概述_嵌入式


二、Yocto Project特点

  • 广泛应用于整个行业
  • 架构无关
  • 镜像和代码移植容易
  • 灵活
  • 适用于资源受限的嵌入式和物联网设备
  • 全面的工具链支持
  • 执行机制大于策略
  • 支持层模型
  • 支持部分组件构建
  • 按照严格的时间表发布
  • 丰富的个人和组织生态
  • 二进制可再现性
  • 许可证清单

三、开发组件与工具

(1)开发工具

  • CROPS
  • devtool
  • Extensible Software Development Kit(eSDK)
  • Toaster

(2)生产工具

  • Auto Upgrade Helper
  • Recipe Reporting System
  • Patchwork
  • AutoBuilder
  • Cross-Prelink
  • Pseudo

(3)Open-Embedded构建系统组件

  • BitBake
  • OpenEmbedded-Core

(4)打包组件

  • Matchbox
  • Opkg

(5)存档组件

  • Hob
  • Build Appliance
  • CROPS

四、嵌入式参考发行版(Poky)

Poky是BitBake、OpenEmbedded Core(可在meta中找到)、meta-poky、meta-yocto-bsp和文档的组合存储库,所有这些都是一起提供的,可以很好地协同工作。下图说明了Poky的一般组成(注意与前面第一张图片有点区别):

Yocto理论篇 | Yocto Project概述_yocto_02

  • BitBake,它是一个任务执行器和调度器,是OpenEmbedded构建系统的核心。
  • meta-poky,这是poky特定的元数据。
  • meta-yocto-bsp,这是yocto Project特定的板支持包(bsp)。
  • OpenEmbedded-Core(OE-Core)元数据,包括共享配置、全局变量定义、共享类、打包和配方。其中类定义构建逻辑的封装和继承,配方是要构建的软件和图像的逻辑单元。
  • Documentation,其中包含用于制作用户手册集的Yocto Project源文件。

Poky不包含二进制文件。这是一个如何从源代码构建自己定制的Linux发行版的工作示例。

Poky在自己的版本下有一个固定的、成熟的、六个月的发行周期。主要发布与Yocto项目的主要发布(点发布)同时发生,通常都是在春季和秋季。

关于Poky是一个“默认配置”,意思是可以使用Poky开箱即用来创建一个镜像,从shell可访问的最小镜像一直到Linux标准的基本兼容镜像,该镜像使用基于GNOME Mobile and Embedded (GMAE)的参考用户界面Sato。

Poky最强大的特性之一是构建的每个方面都由元数据控制。通过添加扩展功能的元数据层,可以使用元数据来扩充这些基本镜像类型。例如,这些层可以为图像类型提供额外的软件堆栈,为其他硬件添加板级支持包(BSP),甚至可以创建新的镜像类型。

元数据松散地分组到配置文件或包配方中。配方是BitBake用来设置变量或定义其他构建时任务的不可执行元数据的集合。配方包含诸如配方说明、配方版本、软件包许可证和上游源存储库等字段。配方还可能指示构建过程使用autotools、make、distutils或任何其他构建过程,在这种情况下,基本功能可以由它从./meta/classes中的OE-Core层的类定义继承的类来定义。在配方中,还可以定义其他任务以及任务先决条件。BitBake的配方语法还支持_prepend和_append运算符,作为扩展任务功能的方法。这些运算符将代码注入任务的开始或结束。


五、OpenEmbedded 构建系统工作流

OpenEmbedded构建系统使用“工作流”来完成镜像和SDK生成。下图概述了该工作流:

Yocto理论篇 | Yocto Project概述_yocto project_03

以下是“工作流程”的简要概述:

  1. 开发人员指定体系结构、策略、修补程序和配置详细信息。
  2. 从指定的源代码位置下载并获取指定的生成代码。构建系统支持标准方法(如tarballs)或源代码存储库系统(如Git)。
  3. 下载源代码后,构建系统将源代码提取到本地工作区,在该工作区应用修补程序并运行配置和编译软件的常见步骤。
  4. 然后,构建系统将软件安装到一个临时暂存区,在那里您选择的二进制软件包格式(DEB、RPM或IPK)用于汇总软件。
  5. 不同的QA和健全性检查贯穿整个构建过程。
  6. 在创建二进制文件之后,生成系统生成一个二进制包提要,用于创建最终的根文件镜像。
  7. 构建系统生成文件系统镜像和定制的Extensible SDK(eSDK),用于并行开发应用程序。

六、一些基本术语

  • Configuration Files:保存变量,用户定义变量和硬件配置信息的全局定义的文件。这些文件告诉开放的嵌入式构建系统要构建什么以及要放入图像以支持特定平台的内容。
  • Extensible Software Development Kit (eSDK):应用程序开发人员的自定义SDK。该eSDK允许开发人员将其库和编程更改合并回图像,以使其代码可供其他应用程序开发人员使用。
  • Layer:相关食谱的集合。图层允许您合并相关元数据以自定义构建。层还隔离构建多个体系结构时使用的信息。图层在覆盖以前的规范方面是分层的。您可以从Yocto Project中包含任意数量的可用图层,并通过在图层后面添加图层来自定义构建。
  • Metadata:Yocto Project的关键元素是用于构建Linux发行版的元数据,并包含在构建图像时开放嵌入构建系统解析的文件中。通常,元数据包括食谱,配置文件和其他参考构建指令本身的信息,以及用于控制构建内容和构建效果的数据。元数据还包括用于指示使用什么版本的软件,从何处获得它们的命令和数据,以及用于修复错误或自定义软件以用于软件本身的更改或添加(补丁或辅助文件)在特定情况下。OpenEmbedded-Core是一组重要的经过验证的元数据。
  • OpenEmbedded Build System:术语“BitBake”和“Build System”有时用于OpenEmbedded Build System。BitBake是一种任务调度程序和执行引擎,可解析指令(即食谱)和配置数据。在解析阶段之后,BitBake创建一个依赖树来排序编译,安排所包含代码的编译,最后执行指定的自定义Linux镜像(发行版)的构建。BitBake类似于make工具。在构建过程中,构建系统跟踪依赖关系并执行包的本机或交叉编译。作为交叉构建设置的第一步,框架尝试创建适合目标平台的交叉编译器工具链(即Extensible SDK)。
  • OpenEmbedded-Core (OE-Core):OE-Core是由基础食谱,类和相关文件组成的元数据,这些文件在许多不同的OpenEmbedded派生系统(包括Yocto Project)中都很常见。OE-Core是由OpenEmbedded社区开发的原始存储库的策划子集,该存储库已缩减为较小的核心连续验证食谱集。结果是严格控制和质量保证的核心配方集。
  • Packages:在Yocto Project的背景下,该术语是指通过烘烤产生的配方的包输出(即“烘焙配方”)。包通常是从配方来源产生的编译二进制。
  • Poky:Poky是参考嵌入式发行版和参考测试配置。Poky提供以下内容:
  • 基本功能分布图,用于说明如何自定义分布。
  • 测试Yocto Project组件的方法(即Poky用于验证Yocto Project)。
  • 可以通过它下载Yocto Project。
  • Poky不是产品级分布。相反,这是定制的良好起点。注意:Poky是OE-Core顶部的集成层。
  • Recipe:最常见的元数据形式。配方包含用于构建包的设置和任务(即说明)列表,然后用于构建二进制镜像。配方描述您获取源代码的位置以及要应用的补丁。食谱描述了库或其他食谱的依赖关系以及配置和编译选项。相关配方合并为一层。