1 Yocto简介
1.1 什么是Yocto项目?
Yocto项目是Linux基金会的一个工作组,它是一个开源协作项目,帮助开发人员创建基于Linux的定制系统,这些系统专为嵌入式产品而设计,与产品的硬件架构无关。Yocto项目提供了一个灵活的工具集和开发环境,使世界各地的嵌入式设备开发人员能够通过共享技术、软件栈、配置和最佳实践来创建这些定制的Linux映像。
全球数以千计的开发人员发现,Yocto项目在系统和应用程序开发、存档和管理以及用于速度、占用空间和内存利用率的定制方面都具有优势。该项目是提供嵌入式软件栈的标准。该项目允许针对多个硬件平台进行软件定制和构建交换,并允许维护和扩展软件栈。
Yocto提供模板、工具和方法,帮助我们为嵌入式产品创建基于Linux的定制系统,而无需考虑硬件架构。它可以根据glibc和 musl C 标准库以及实时操作系统 (RTOS Real-Time Operating System) 工具链生成定制的 Linux 发行版,用于裸机开发,如Zephyr项目所做的那样。
该项目由Linux基金会成员管理,独立于成员组织,成员组织以多种方式参与该项目并为其提供资源。
该项目成立于2010年,由众多硬件制造商、开源操作系统、供应商和电子公司合作完成,旨在减少重复工作,并为新老用户提供资源和信息。这些资源包括OpenEmbedded项目提供的核心系统组件OpenEmbedded Core。
Yocto项目汇集了多家公司、社区、项目和工具,其目的都是一样的–构建基于Linux的嵌入式产品。这些利益相关者同舟共济,在社区需求的驱动下携手合作。
为了便于我们理解Yocto项目的职责和成果,我们可以用计算器来进行类比。输入是一组描述我们所需的数据,也就是我们的规范。
输出则是我们想要的基于Linux的嵌入式产品。输出由操作系统的各个部分组成。它包括Linux内核、引导加载器和根文件系统(rootfs),它们被捆绑在一起并组织在一起工作。
Yocto项目的工具可用于所有中间步骤,以生成rootfs捆绑包和其他可交付成果。先前构建的软件组件可在不同的构建过程中重复使用(应用程序、库或任何软件组件)。
如果无法重复使用,则按照正确的顺序和所需的配置构建软件组件,包括从各自的源代码库(如Linux内核档案库(www.kernel.org)、GitHub、BitBucket 和 GitLab)获取所需的源代码。
Yocto项目的工具会准备好构建环境、实用程序和工具链,从而减少对主机软件的依赖。这些实用程序、版本和配置选项与主机Linux发行版无关,在产生相同结果的同时,最大限度地减少了需要依赖的主机实用程序的数量。它大大提高了确定性,减少了对构建主机的依赖,同时提高了首次构建的成功率。
BitBake和OpenEmbedded Core属于OpenEmbedded项目,而Poky等一些项目则属于Yocto项目。它们互为补充,在系统中发挥着特定的作用。我们将在本章和本书中详细了解它们是如何协同工作的。
1.2 OpenEmbedded项目与Yocto项目的联盟
OpenEmbedded项目是在2003年1月左右创建的,当时来自OpenZaurus项目的一些核心开发人员开始使用新的构建系统。从一开始,OpenEmbedded构建系统就是一个受 Gentoo Portage软件包系统启发并基于该系统的任务调度程序,名为BitBake。因此,项目的软件集和支持的机器列表迅速增加。
由于开发过程混乱且不协调,在需要更稳定、更完善代码库的产品中使用OpenEmbedded十分具有挑战性,因此Poky发行版应运而生。Poky最初是OpenEmbedded构建系统的一个子集,在有限的体系结构中拥有更完善、更稳定的代码库。此外,由于规模缩小,Poky还能开发一些亮点技术,如集成开发环境插件和快速模拟器 (QEMU) 集成,这些技术目前仍在使用中。
Yocto项目和OpenEmbedded项目在名为 OpenEmbedded Core的核心构建系统上进行了整合。它采用了Poky和OpenEmbedded的精华,强调更多使用附加组件、元数据和子集。2010年11月左右,Linux基金会宣布Yoct 项目将在Linux基金会赞助的项目下继续这项工作。
1.3 了解Poky
Poky是默认的Yocto项目参考发行版,使用OpenEmbedded构建系统技术。它由一系列工具、配置文件和配方数据(称为元数据)组成。它与平台无关,使用BitBake工具、OpenEmbedded Core和默认元数据集执行交叉编译,如下图所示。此外,它还提供了一种机制,用于构建和组合成千上万的分布式开源项目,从而形成一个完全可定制的、完整的、连贯的 Linux 软件栈。
Poky的主要目标是提供嵌入式开发人员所需的所有功能。
1.3.1 BitBake
BitBake是一个任务调度器和执行系统,可解析Python和Shell脚本代码。解析后的代码会生成并运行任务,这些任务是根据代码的依赖关系排序的一系列步骤。
BitBake会评估所有可用的元数据,管理动态变量扩展、依赖关系和代码生成。此外,它还会跟踪所有任务以确保其完成,从而最大限度地利用处理资源,缩短构建时间并提高可预测性。BitBake 的开发在 https://lists.openembedded.org/g/bitbake-devel 邮件列表中进行,源代码在Poky的bitbake子目录中。
1.3.2 OpenEmbedded Core
OpenEmbedded Core元数据集提供了Poky构建系统的引擎。它提供核心功能,并力求通用和尽可能精简。它支持七种不同的处理器架构(ARM、ARM64、x86、x86-64、PowerPC、PowerPC 64、MIPS、MIPS64、RISC-V32 和 RISC-V 64),仅支持QEMU模拟的平台。
开发工作集中在 https://lists.openembedded.org/g/openembedded-
core (mailto:openembedded-core@lists.openembedded.org) 邮件列表,并将其元数据存放在Poky的meta子目录中。
1.3.2元数据
元数据(Metadata)包括配方和配置文件。它由Python和Shell Script文本文件混合组成,提供了非常灵活的工具。Poky利用它来扩展 OpenEmbedded Core,并包含两个不同的层,即其他元数据子集,如下所示:
- meta-poky
该层提供默认和支持的发布策略、可视化品牌和元数据跟踪信息(维护者、上游状态等)。该层将作为一个精心策划的模板,供发行版构建者用于为其自定义发行版提供种子。
- meta-yocto-bsp
提供板级支持包(BSP),作为 Yocto 项目开发和质量保证(QA)过程的参考硬件。
第9章 “使用 octo项目开发”将更详细地探讨元数据,并在我们编写配方时作为参考。
参考资料
- 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
- 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
- python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
1.4 Yocto项目的发布Yocto
项目每六个月发布一次版本,分别在四月和十月。这种发布周期确保了持续的开发流程,同时提供了更多的测试点,并注重稳定性。只要一个版本准备就绪,它就会成为稳定版或长期支持 (LTS) 版。
稳定版和长期支持版的支持期有很大不同。稳定版的支持期为7个月,每个稳定版有1个月的重叠支持期。LTS版本的最低支持期为2年,可选择延长。官方支持期结束后,转为社区支持,最后达到生命周期结束(EOL)。
官方发布支持期结束后,如果有社区成员加入成为社区维护者,发布版本就可以转为社区支持版本。最后,当源代码在两个月内没有任何变化,或者社区维护者不再是活跃成员时,发布版本就会转为EOL。
下图显示了两个发布周期:
下表提供了 Yocto 项目的版本、代号、发布日期和当前支持级别,如下所示。更新后的表格见 https://wiki.yoctoproject.org/