yocto不是个什么东东
在我们了解Yocto项目是什么之前,让我们先了解一下它不是什么。
Yocto项目不是用于现有硬件的软件开发工具包(SDK),而是用于构建这样一个工具包。
Yocto项目不是可以部署到硬件上的系统二进制镜像,而是用于构建这样一个镜像。
Yocto项目不是可以用于在硬件上安装的Linux发行版,而是用于为资源受限的硬件构建一个定制的发行版。
yocto是个什么东东
Yocto项目是一个开源协作项目,旨在帮助开发人员为嵌入式产品创建定制的基于Linux的系统,而不受硬件架构的限制。该项目提供了一套灵活的工具和一个空间,嵌入式开发人员可以在全球范围内共享技术、软件堆栈、配置和最佳实践,这些可以用于为嵌入式设备创建定制的Linux镜像。
Yocto项目整合、维护和验证了三个关键的开发元素。
一套集成工具,可使嵌入式Linux开发取得成功,包括用于自动构建和测试的工具,用于板级支持和许可合规性的流程,以及用于定制Linux嵌入式操作系统的组件信息。
一个参考嵌入式发行版(称为Poky)。
与OpenEmbedded项目一同维护的OpenEmbedded构建系统。
poky是什么?
Poky(发音为Pock-ee)是一个参考嵌入式发行版和一个参考测试配置,其目的是:
提供一个基本的功能发行版,可用于演示如何定制发行版。
用于测试Yocto项目的组件,Poky用于验证Yocto项目。
作为用户下载Yocto项目的工具。Poky不是一个产品级别的发行版,而是一个很好的定制起点。Poky是在oe-core之上的一个集成层。
oe-core是什么?
oe-core或者OpenEmbedded-Core是一个由基础recipes、类别和相关文件组成的元数据,旨在在许多不同的OpenEmbedded衍生系统中通用,包括Yocto项目。它是OpenEmbedded社区原始存储库的筛选子集,已经经过精简,形成了一个经过持续验证的recipes,从而形成了一个严格控制和质量保证的核心recipes。
简而言之,oe-core是一个经过质量保证的核心基础recipes,Poky使用它来生成一个良好且可工作的基础Linux镜像。
recipe是什么?
recipe是最常见的元数据形式。一个recipe包含一个构建软件包的设置和任务(指令)列表,然后用于构建二进制镜像。一个recipe描述了从哪里获取源代码以及应用哪些补丁。recipe描述了库或其他recipe的依赖关系,以及配置和编译选项。
它们存储在层中。实际上,Poky的分层特性使其具有极高的可扩展性、多功能性,并且易于适应各种系统。例如,可以将与网络有关的所有recipe放在一个层中,将与对应的应用程序相关的所有recipe放在另一个层中,为图形子系统专门创建一个层,依此类推!
类似地,还有被称为配置文件的文件。这些文件包含全局变量的定义、用户定义的变量以及硬件配置信息。它们告诉构建系统在image中构建和放置什么,以支持特定的平台。
配置文件和recipe通常被称为Poky构建系统中的元数据。除了这些之外,用于使用recipe和配置文件构建图像的命令和数据也构成了元数据。
我们有oe-core,其中包含由经过验证的元数据形成的有效image。进而会想到对于这些recipe,怎么使之形成目标image呢?答案是借助BitBake。
Bitbake是什么?
BitBake是一个调度器和执行引擎,它解析指令(recipe)和配置数据。然后,它创建一个依赖树来排序编译,安排包含的代码的编译,最后执行构建指定的定制Linux镜像(发行版)。BitBake是一个类似于make的构建工具。BitBake recipe指定了如何构建特定软件包。它们包括所有软件包依赖项、源代码位置、配置、编译、构建、安装和删除指令。
在构建过程中,跟踪依赖关系并执行软件包的本地或交叉编译。在交叉构建设置的第一步中,框架将尝试创建一个适用于目标平台的交叉编译器工具链。
BitBake解析器确保顶层的层可以覆盖较低层中的设置,从而在解析器向下移动层时避免任何冲突!
BitBake引擎使用元数据来创建一个被称为软件包(packages)的构建输出。这些软件包组合在一起,形成了最终目标——最终镜像。
以下是Yocto项目组件的一个良好高层次表示:
Yocto 开发流程
首先,开发人员必须决定各种高级配置,比如要为哪个平台建镜像,构建所需的任何特殊配置数据,要构建的镜像类型等。
一旦配置就绪,接下来是源代码。源代码可以以tarballs的形式提取自项目发布,也可以从Git或SVN中提取,甚至可以在工作空间中本地添加。
通常,可能需要对源代码应用补丁,以定制软件组件以适应所需的机器或特定镜像。然后应用这些补丁。
对源代码进行构建。大多数常见的构建工具,如autotools、cmake等都受支持。BitBake负责进行必要的配置和编译。
构建过程输出,然后被放置到一个临时的分段区域,在这里进行打包,如.deb、.rpm、.ipk等。这个打包信息是在我们获取源代码之前在开始时指定的配置之一。
接下来是质量保证(QA)过程。尽管说这是QA发生的第一个阶段是不准确的——更准确地说,QA活动在整个过程中都发生——特别是在BitBake引擎的运行过程中。
一旦二进制软件包准备就绪,只需要创建一个适用于所请求镜像的软件包源。
这个软件包源最终形成了最终的镜像。Linux镜像并不是构建过程能够创建的全部。构建过程还可以选择生成一个SDK,该SDK可用于对应平台的开发和构建应用程序。