目录
本章为Yocto项目概念提供了解释,这些概念超越了"如何"信息和参考(或查找)材料的表面。解释了组件、开放式构建系统工作流程、交叉开发工具链、共享状态缓存等概念。
4.1约克托项目组件
BitBake任务执行器以及各种类型的配置文件组成了开放式核心 (OE-Core)。本节通过描述这些组件的使用及其交互方式来概述这些组件。
BitBake 处理数据文件的解析和执行。数据本身是多种类型的:
-
食谱:提供有关特定软件的详细信息。
-
类数据:摘要常见构建信息(例如,如何构建 Linux 内核)。
-
配置数据:定义机器特定设置、策略决策等。配置数据充当将所有内容结合在一起的粘合剂。
BitBake 知道如何将多个数据源组合在一起,并将每个数据源称为一层。有关图层的信息,请参阅 Yocto 项目开发任务手册中的"理解和创建层"部分。
以下是有关这些核心组件的一些简短细节。有关这些组件在构建过程中如何相互作用的其他信息,
请参阅"开放式构建系统概念"部分。
4.1.1比特贝克
BitBake 是开放式构建系统的核心工具,负责解析元数据,从中生成任务列表,然后执行这些任务。
本节简要介绍了 BitBake。如果您想要有关 BitBake 的更多信息,请参阅位贝克用户手册。
要查看 BitBake 支持的选项列表,请使用以下任一命令:
$ bitbake -h
$ bitbake --help
BitBake 最常见的用法是,您想要构建的配方的名称(称为"目标")。目标通常等同于食谱文件名的第一部分(例如,名为"foo"的食谱)。因此,要处理配方文件,您可以键入以下类型:bitbake recipename
recipename
foo_1.3.0-r0.bb
matchbox-desktop_1.2.3.bb
$ bitbake matchbox-desktop
可能存在几个不同版本。BitBake 会选择按分配配置选择的。您可以在 BitBake 用户手册的"首选项"部分获得有关 BitBake 如何在不同目标版本和提供商之间进行选择的更多详细信息。matchbox-desktop
BitBake 还尝试先执行任何受抚养的任务。因此,例如,在构建之前,BitBake 将构建一个交叉编译器,如果尚未构建。matchbox-desktop
glibc
需要考虑的有用 BitBake 选项是该选项或选项。此选项指示 BitBake 即使在遇到错误后,也尝试尽可能长时间地继续处理工作。当发生错误时,无法重新制造失败的目标和依赖错误的目标。但是,当您使用此选项时,仍可以处理其他依赖关系。-k
--continue
4.1.2食谱recips
具有后缀的文件是"食谱"文件。一般来说,食谱包含有关单个软件的信息。此信息包括下载未改变源的位置、应用于该源的任何源补丁(如果需要),应用哪些特殊配置选项、如何编译源文件以及如何打包编译的输出。.bb
术语"包"有时用于指食谱。但是,由于"包"一词用于来自 OpenEmbedd 构建系统的包装输出(即。 或文件),本文档避免使用术语"包"时,指的是食谱。.ipk
.deb
4.1.3类class
类文件 () 包含可用于在食谱文件之间共享的信息。例如自动工具类,它包含自动工具使用的任何应用程序的常见设置。Yocto 项目参考手册中的"类"一章提供了有关课程以及如何使用它们的详细信息。.bbclass
4.1.4配置conf
配置文件 () 定义管理开放式构建过程的各种配置变量。这些文件分为几个领域,定义机器配置选项,分配配置选项,编译器调谐选项,一般常见的配置选项,和用户配置选项,这是在构建目录中找到的。.conf
conf/local.conf
4.2层layer
层是包含相关元数据(即一组指令)的存储库,可告诉 OpenEmbedd 构建系统如何构建目标。 Yocto 项目层模型可促进 Yocto 项目开发环境中的合作、共享、定制和再利用。从逻辑上讲,为您的项目划分信息层。例如,您可以使用一层来保留特定硬件的所有配置。隔离特定于硬件的配置允许您使用不同的层来共享其他元数据,其中元数据在几个硬件中可能很常见。
在 Yocto 项目开发环境中有许多层工作。Yocto 项目策划层索引和开放式层索引都包含您可以使用或利用的层。
按照惯例,Yocto 项目的层遵循特定形式。符合已知结构允许 BitBake 在构建到查找元数据类型时做出假设。您可以在《Yocto 项目开发任务手册》的"理解和创建层"部分找到创建适合 Yocto 项目的图层的程序并了解工具(即)。bitbake-layers
4.3开放式构建系统概念
本节对开放式构建系统(Yocto 项目特有的构建系统)使用的构建过程进行了更详细的了解。构建系统的核心是任务执行者 BitBake。
下图表示构建的高级别工作流。本节的其余部分扩展了构成工作流程的基本输入、输出、过程和元数据逻辑块。
一般来说,构建的工作流程由几个功能区组成:
-
用户配置:可用于控制构建过程的元数据。
-
元数据层:提供软件、机器和散数元数据的各种层。
-
来源文件:上游版本、本地项目和 SCM。
-
构建系统:比特贝克控制下的过程。此块扩展了 BitBake 获取源、应用修补程序、完成编译、分析封装生成输出、创建和测试封装、生成图像和生成交叉开发工具的情况。
-
包装源:包含输出包 (RPM、DEB 或 IPK) 的目录,这些输出包随后用于构建系统生成的图像或软件开发套件 (SDK)。如果启用了运行时间包管理,还可以使用 Web 服务器或其他方式复制和共享这些源,以方便在运行时间扩展或更新设备上的现有图像。
-
image:工作流生成的image。
-
应用开发 SDK:与图像一起或与 BitBake 单独生成的交叉开发工具。
4.3.1用户配置
用户配置有助于定义构建。通过用户配置,您可以告诉 BitBake 您正在构建图像的目标架构、将下载的源存储在哪里以及其他构建属性。
下图显示了一般工作流程图的"用户配置"框的扩展表示:
BitBake 需要一些基本的配置文件才能完成构建。这些文件是文件。最不需要的作为示例文件在源目录中。简单来说,本节将源目录称为"Poky 目录"。*.conf
build/conf
当您克隆Poky Git 存储库或下载并解包 Yocto 项目版本时,您可以设置源目录以命名任何您想要的。对于此讨论,克隆存储库使用默认名称。poky
注意
Poky 存储库主要是现有存储库的聚合。它不是一个规范的上游来源。
Poky 内部的层包含具有示例配置文件的目录。这些示例文件用作创建实际配置文件的基础,当您 source oe-init-build-env时,这是构建环境脚本。meta-poky
conf
采购构建环境脚本创建构建目录(如果尚未存在)。BitBake 在构建过程中使用生成目录进行所有工作。构建目录包含包含您和配置文件的默认版本的目录。只有当版本在源构建环境设置脚本时尚未存在于构建目录中时,才会创建这些默认配置文件。
conf
local.conf
bblayers.conf
由于 Poky 存储库从根本上是现有存储库的聚合,因此一些用户可能熟悉在单独的OpenEmbedd-Core (OE-Core)和 BitBake 存储库(而不是单个 Poky 存储库)的背景下运行oe-init-build-env脚本。此讨论假定脚本是从 Poky 的克隆或未包装版本内执行的。
根据脚本的来源,不同的子脚本被调用以设置构建目录(Yocto 或打开已设)。具体来说,poky 目录中的脚本设置构建目录,并(如有必要)为目录进行种子,配置文件适合 Yocto 项目开发环境。scripts/oe-setup-builddir
注意
scripts/oe-setup-builddir script 使用变量来确定要定位的示例配置文件。
$TEMPLATECONF
该文件提供了许多定义构建环境的基本变量。下面是一些列表。要查看构建环境脚本创建的文件中的默认配置,请参阅图层中的local.conf.sample:local.conf
local.conf
meta-poky
-
目标机器选择:由MACHINE 变量控制。
-
下载目录:由DL_DIR变量控制。
-
共享状态目录:由SSTATE_DIR变量控制。
-
构建输出:由TMPDIR变量控制。
-
分配政策:由DISTRO变量控制。
-
包装格式:由PACKAGE_CLASSES变量控制。
-
SDK 目标架构:由SDKMACHINE变量控制。
-
额外图像包:由EXTRA_IMAGE_FEATURES变量控制。
注意
在 conf/local.conf 文件中设置的配置也可以设置在conf/site.conf 和conf/site.conf 配置文件中。
该文件告诉 BitBake 您希望在构建过程中考虑哪些层。默认情况下,此文件中列出的图层包括构建系统最不需要的层。但是,您必须手动添加您创建的任何自定义图层。您可以在 Yocto 项目开发任务手册中的"启用您的层"部分找到有关与文件合作的更多信息。bblayers.conf
bblayers.conf
文件不是由环境初始化脚本创建的。如果你想要的文件,你需要自己创建。该文件通常由自动建设者创建:
site.conf
auto.conf
site.conf
auto.conf
-
site.conf: :您可以使用配置文件配置多个构建目录。例如,假设您有几个构建环境,它们具有一些共同的功能。您可以在此处设置这些默认构建属性。一个很好的例子也许是通过PACKAGE_CLASSES变量使用的包装格式。
conf/site.conf
使用该文件的一个有用的方案是扩展您的BBPATH变量,包括路径到。然后,当 BitBake 使用BBPATH查找元数据时,它会找到该文件并应用文件中常见的配置。要覆盖特定构建目录中的配置,要更改该构建目录文件中的类似配置。
conf/site.conf
conf/site.conf
conf/site.conf
conf/local.conf
-
auto.conf::该文件通常由自动建设者创建并写入。放入文件的设置通常与在文件或文件中找到的设置相同。
conf/local.conf
conf/site.conf
您可以编辑所有配置文件以进一步定义任何特定的构建环境。此过程由图中的"用户配置编辑"框表示。
当您使用命令启动构建时,BitBake 会整理出配置,以最终定义构建环境。重要的是要了解,开放式构建系统以特定顺序读取配置文件:并且,构建系统应用 BitBake 用户手册中的"语法和操作员"章节中描述的正常分配语句规则。由于文件按特定顺序解析,因此可能会影响同一变量的可变分配。例如,如果文件和设置的变量 1 到不同的值,因为构建系统解析后,可变 1 被分配从文件中的值。
bitbake target
site.conf
auto.conf
local.conf
a
uto.conf
local.conf
local.conf
auto.conf
local.conf
4.3.2元数据、机器配置和策略配置
前一节描述了定义 BitBake 全球行为的用户配置。此部分更仔细地查看构建系统用于进一步控制构建的层。这些层为软件、机器和策略提供元数据。
一般来说,有三种类型的层输入。您可以在"用户配置"框下面看到一般工作流程图<查看手动/概念:打开的构建系统概念>:
-
元Metadata (.bb + Patches): :包含用户提供的配方文件、补丁和附加文件的软件层。软件层的一个很好的示例可能是来自开放式层索引的元-qt5层。此层适用于桌面、嵌入式和移动的流行Qt跨平台应用开发框架的 5.0 版本。
-
Policy Configuration: :提供机器特定配置的板支持包 (BSP) 层(即下图中的"BSP 层")。此类信息特定于特定目标架构。参考分布 (Poky)中 BSP 层的一个很好的示例是元-yocto-bsp层。
-
策略配置:分布层(如下图中的"Distro 层")为正在为特定分布而构建的图像或 SDK 提供顶级或一般策略。例如,在 Poky 参考分布中,散点层是元波基层。在 Distro 层中,有一个目录,其中包含了不一的配置文件(例如,包含许多用于 Poky 分布的政策配置的poky.conf)。
conf/distro
下图从一般工作流程图中显示了这三层的扩展表示:
一般来说,所有层都有类似的结构。它们都包含一个许可文件(例如),如果要分发该层,则包含一个作为良好做法的文件,特别是要分发该层、配置目录和配方目录。您可以在 Yocto 项目开发任务手册中的"创建自己的层"部分了解与 Yocto 项目使用的层的总体结构。有关图层和可以绘制的多个层的一般讨论,请参阅本手册早期的"层"和"Yocto 项目层模型"部分。COPYING.MIT
README
如果您探索了以前的链接,您发现了一些与 Yocto 项目配合工作的层存在的区域。源存储库还显示在"Yocto 元数据层"下分类的图层。
注意
Yocto 项目源存储库中有一些层在开放式层索引中找不到。这种层要么被弃用,要么在性质上是实验性的。
BitBake 使用作为用户配置一部分的文件来查找它应该用作构建一部分的层。conf/bblayers.conf
4.3.2.1 distro
分布层为您的分配提供策略配置。最佳实践要求您将这些类型的配置隔离到自己的层中。在覆盖 BitBake 在构建目录中的文件中找到的类似设置中提供的设置。conf/distro/distro.conf
conf/local.conf
下列列表提供了一些解释和参考,说明您通常在分布层中发现的内容:
-
classes: :类文件 () 具有可在分发中的配方之间共享的常见功能。当您的食谱继承一个类时,它们会承担该类的设置和功能。您可以在 Yocto 参考手册的"类"章节中阅读更多有关类文件的内容。
.bbclass