# Qualcomm Linux 特性

Qualcomm Linux 特性包括：

- 元数据层
- 元数据层中的配方和配置
- 增强 Qualcomm Linux 的软件功能
- Qualcomm 推出的工具
- 如何编译 Qualcomm Linux 镜像

Note

Qualcomm Linux 基于 Yocto Kirkstone 版本。

有关 Yocto Project Kirkstone 发布版本的综合文档，请参阅 [Yocto Project documentation](https://docs.yoctoproject.org/4.0.22/singleindex.html)。

Note

当您阅读本文档时，Yocto 项目可能已经发布了其他 Kirkstone LTS 节点版本。本文档是指此版本发布时的最新版本。

如果你是 Yocto 项目的新用户，请参阅 [Yocto 项目文档](https://docs.yoctoproject.org/4.0.22/singleindex.html#document-brief-yoctoprojectqs/index)。

Qualcomm Linux 环境由多个社区维护的元数据层组成，这些元数据层提供软件包、包组配方、镜像配方和配置。Qualcomm Linux 元数据层堆叠在社区层之上，以提供 Qualcomm 开发套件所须的额外软件组件。

## Qualcomm Linux 元数据层概述

本节介绍 [Qualcomm manifest](https://github.com/quic-yocto/qcom-manifest) 中包括的分层。该 manifest 中包含重新生成参考版本所需的所有层。Yocto 项目维护的分层将在后续章节中介绍。Qualcomm 维护 Qualcomm 开发套件特定的层，开发套件依赖于社区层来实现全部功能。

下图显示了Qualcomm Linux发布版本中包含的层：

![../../_images/qualcomm_linux_metadata_layers.png](data:image/png;base64,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)

**Qualcomm Linux 元数据层**

Qualcomm Linux 元数据层及说明

| 元数据层 | 说明 |
| --- | --- |
| `meta-qcom-hwe` | 包含为 Qualcomm 开发套件编译软件组件的配方，并提供适用于 Qualcomm SoC的增值软件特性。 |
| `meta-qcom-distro` | 为 Qualcomm 开发套件提供参考分发配置。镜像配方和软件包组在该层定义。 |
| `meta-qcom-extras` | 注册用户的可选元数据层。该层支持对选定组件进行源代码编译，除此以外这些组件在 `meta-qcom-hwe` 中以二进制形式提供。 |
| `meta-qcom-qim-product-sdk` | 基于 GStreamer 框架提供 Qualcomm^®^ Intelligent Multimedia (QIM) SDK 和 AI SDK。包括一组 GStreamer 插件、多媒体示例应用程序和 AI 用例。 |
| `meta-qcom-realtime` | 为 Linux 内核提供补丁和配置以实现实时操作。 |
| `meta-qcom` | 包含 Qualcomm 终端支持和上游开放源码软件组件。 |
| `meta-virtualization`<br><br><br>相关详细信息，请参阅[元虚拟化](https://git.yoctoproject.org/meta-virtualization)。 | 包含用于构建 OpenEmbedded 虚拟化解决方案和虚拟化堆栈（如Docker 和 Kubernetes）的软件包。 |
| `meta-selinux`<br><br><br>相关更多信息，请参阅 [meta-selinux](https://git.yoctoproject.org/meta-selinux)。 | 启用 SELinux 支持。该层包括参考 SELinux 策略并提供必要的工具。要为 Qualcomm Linux 启用 SELinux，请在 `meta-qcom-distro/conf/distro/include/qcom-base.inc` 中将变量 `DEFAULT_ENFORCING` 设置为 `enforcing`。 |
| `poky/meta`<br><br><br>相关更多信息，请参阅 [poky/meta](https://git.yoctoproject.org/poky)。 | 提供编译工具和配方文件，提供嵌入式操作系统分发包所需的各种软件组件。 |
| `meta-openembedded`<br><br><br>相关更多信息，请参阅 [meta-openembedded](https://git.openembedded.org/meta-openembedded)。 | OpenEmbedded 编译 系统的层集合。 |
| `meta-security`<br><br><br>有关详细信息，请参阅 [meta-security](https://git.yoctoproject.org/meta-security/tree/README?h=kirkstone)。 | 提供 Linux 内核的安全工具和强化工具以及实现安全机制的库。 |
| `meta-updater`<br><br><br>有关详细信息，请参阅[元更新程序](https://github.com/uptane/meta-updater/blob/kirkstone/README.adoc)。 | 使用 OSTree 实现无线更新 (OTA)。OSTree 是一个具有回滚功能的原子全文件系统升级工具。 |

有关机器人层的信息，请参阅 [Qualcomm Intelligent Robotics Product (QIRP) SDK 层](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-265/architecture.html#component-layers-of-the-qirp-sdk)。

## Qualcomm Linux 元数据层

以下层表示 Qualcomm BSP 元数据：

- [meta-qcom](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#meta-qcom-section)
- [meta-qcom-hwe](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#meta-qcom-hwe-section)
- [meta-qcom-realtime](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#meta-qcom-realtime-section)

`qcom-wayland` 参考分发版在以下层中定义：

- [meta-qcom-distro](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#meta-qcom-distro-section)

可选的 Qualcomm^®^ Intelligent Multimedia（QIM）SDK 由以下层定义：

- [meta-qcom-qim-product-sdk](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#meta-qcom-qim-product-sdk-section)

可选的 BSP 由以下元数据层定义：

- [meta-qcom-extras](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#meta-qcom-extras-section)

### 在 Qualcomm Linux 元数据层中使用 BitBake OVERRIDES

Qualcomm Linux 元数据层使用 BitBake 的 OVERRIDES 机制来实现两个不同的 BSP 变体，称为 `base` 和 `custom`。

启动 Qualcomm Linux 编译时，将 `QCOM_SELECTED_BSP` 变量设置为 `custom` 或者 `base`。此变量在 `conf/machine/include/qcom-base.inc` 中定义并设置为 `custom`，默认如下：

QCOM_SELECTED_BSP ??= "custom"
    Copy to clipboard

设置的 `QCOM_SELECTED_BSP` 值转换为两个 BitBake 覆盖。下面是对应BitBake OVERRIDE的 `QCOM_SELECTED_BSP` 映射表：

| `QCOM_SELECTED_BSP` 价值 | 对应的 BitBake OVERRIDE |
| --- | --- |
| `base` | `qcom-base-bsp` |
| `custom` | `qcom-custom-bsp` |

BitBake OVERRIDE 的有效值有选择地设置变量，从而将包包含在镜像中。

Note

要熟悉 BitBake OVERRIDES，请参阅[条件句法（覆盖）](https://docs.yoctoproject.org/bitbake/2.8/bitbake-user-manual/bitbake-user-manual-metadata.html#conditional-syntax-overrides)和 [Yocto 项目文档](https://docs.yoctoproject.org/singleindex.html#term-OVERRIDES)。

要利用 `base` BSP 的变体以及在编译时如何设置 `QCOM_SELECTED_BSP`，请参阅[编译base镜像](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/github_workflow_unregistered_users.html#build-base-image)。

Note

在此发布版本中，`base` BSP 支持 Qualcomm 参考设备，用于使用 `qcs8300-ride-sx.conf`、`qcs9075-ride-sx.conf`、`qcs9100-ride-sx.conf` 进行编译。

最终的镜像构成取决于您是否为 `QCOM_SELECTED_BSP` 变量选择 `base` 或者 `custom` 值，请参阅[概述](https://docs.qualcomm.com/doc/80-70017-27SC/topic/intro_yocto_linux_qualcomm.html#purpose)。

要查找这些 OVERRIDES 如何选择要编译的软件组件的示例，请使用 `qcom-base-bsp` 和 `qcom-custom-bsp` 搜索 `meta-qcom-hwe` 代码库。

### meta-qcom

该 `meta-qcom` 元数据层托管于 [git.yoctoproject.org](http://git.yoctoproject.org)，并提供了编译 Qualcomm OSS 的配方。软件镜像是使用 `meta-qcom` 层的配方编译而成。

| `recipes-devtools/qdl/qdl_git.bb` | Qualcomm 下载（QDL）刷写工具与显示 ID 05c6：9008 的 USB 设备通信以上传刷写加载程序并使用它来刷写镜像。 |
| --- | --- |
| `recipes-support/pd-mapper/pd-mapper_git.bb` | Qualcomm pd-mapper 是保护域映射器服务的一种实现。该服务配置和管理保护域，确保应用程序和各种远程处理器之间的安全通信。 |
| `recipes-support/qrtr/qrtr_git.bb` | Qualcomm Router（QRTR）是 Qualcomm SoC 中使用的进程间通信机制。它使用用户空间中的套接字样式编程接口，实现系统中不同处理器（如应用处理器和调制解调器）之间的通信。 |
| `recipes-support/initrdscripts/initramfs-module-copy-modules_1.0.bb` | `initramfs-framework` 模块用于将内核模块从 `initramfs` 复制到 `rootfs`。 |

### meta-qcom-hwe

该 `meta-qcom-hwe` 元数据层可在 [GitHub](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone) 上使用。它为启用 Qualcomm 设备提供了额外的软件支持。

> 
> 
> - **BitBake 分类**
> 
> 
>     有关 BitBake 分类的介绍，请参阅[分类](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/classes)。
> 
> 
> 
> 
> 
> 
>     | `classes/qimage_types.bbclass` | 使用 `mkfs.vfat` 工具实现 `oe_mkvfatfs()` 以生成虚拟文件分配表（VFAT）镜像。 |
>     | --- | --- |
>     | `classes/qprebuilt.bbclass` | 实现使用预编译软件包代替获取和编译源代码的逻辑。对于继承 **qprebuilt** 的任何配方，该分类对打包在 <cite>tar.gz</cite> 档案中的二进制文件进行解包，并使用 BitBake 任务提供这些拟进行打包的二进制文件。 |
>     | `classes/qmodule.bbclass` | 默认情况下，Qualcomm BSP 通过启用内核中的 `CONFIG_MODULE_SIG_FORCE` 强制签署内核模块。但是，某些树外模块可能未正确签名。为了避免模块加载问题，`qmodule.bbclass` 检查所有提供内核模块的软件包，如果尚未签名，则对其进行签名。 |
>     | `classes/image_types_ota_sdboot.bbclass` | 该 bitbake 分类根据 OSTree 无线升级系统的要求实现镜像创建。 |
> - **机器配置**
> 
> 
>     Qualcomm Linux 机器配置文件在 [GitHub](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/conf/machine)。
> 
> 
>     位于 `meta-qcom-hwe/conf/machine/include` 目录的文件定义并设置所需的 BitBake 变量，这些变量可以被 Qualcomm BSP 定义的机器配置通用。下表概述了这些文件。
> 
> 
> 
> 
> 
> 
>     | 文件 | 说明 |
>     | --- | --- |
>     | `meta-qcom-hwe/conf/machine/include/qcom-base.inc` | 该文件设置了 Qualcomm BSP 中定义的所有机器配置共享的 BitBake 变量。例如，`SOC_ARCH`，`PREFERRED_PROVIDER` 和 `IMAGE_FSTYPES`。 |
>     | `meta-qcom-hwe/conf/machine/include/qcom-qcs6490.inc` | 该文件将 `SOC_FAMILY` 变量设置为 `qcm6490`。这使得 Qualcomm Linux 配方能够使用 `qcm6490` OVERRIDE 来实现特定于 Qualcomm BSP 的更改。该文件还定义了所有基于 QCS6490 的 Qualcomm 开发套件共享的配置变量。 |
>     | `meta-qcom-hwe/conf/machine/include/qcom-qcs9100.inc` | 该文件将 `SOC_FAMILY` 变量设置为 `qcs9100`。这使得 Qualcomm Linux 配方能够使用 `qcs9100` OVERRIDE 来实现特定于 Qualcomm BSP 的更改。该文件还定义了所有基于 QCS9100 的 Qualcomm 开发套件共享的配置变量。 |
>     | `meta-qcom-hwe/conf/machine/include/qcom-qcs8300.inc` | 该文件将 `SOC_FAMILY` 变量设置为 `qcs8300`。这使得 Qualcomm Linux 配方能够使用 `qcs8300` OVERRIDE 来实现特定于 Qualcomm BSP 的更改。该文件还定义了所有基于 QCS8300 的 Qualcomm 开发套件共享的配置变量。 |
> 
> 
> 
>     **基于 QCS6490 的开发套件的机器配置文件**
> 
> 
> Note
> 
> 
> 对于 Qualcomm Linux 1.2 和未来版本，您必须使用新的计算机配置下表中列出的文件。上一个计算机配置文件，`qcm6490.conf` Qualcomm Linux 1.1 已替换为 Qualcomm Linux 1.2 的机器配置文件。
> 
> 
> 
> 
> 
> 
>     | 配置文件 | 说明 |
>     | --- | --- |
>     | `conf/machine/qcm6490-idp.conf` | 该文件适用于 QCM6490 的集成开发平台（IDP）。 |
>     | `conf/machine/qcs6490-rb3gen2-core-kit.conf` | 该文件适用于基于 QCS6490 的 Qualcomm^®^ RB3 Gen 2 核心开发套件。 |
>     | `conf/machine/qcs6490-rb3gen2-vision-kit.conf` | 该文件适用于带有低/高分辨率 CSI 摄像头的基于 QCS6490 的 Qualcomm^®^ RB3 Gen 2 机器视觉开发套件。 |
>     | `conf/machine/qcs6490-rb3gen2-industrial-kit.conf` | 该文件适用于基于 QCS6490 的 Qualcomm^®^ RB3 Gen 2 工业开发套件。 |
> 
> 
> 
>     **基于 QCS9075 和 QCS9100 的开发套件的主机配置文件**
> 
> 
> 
> 
> 
> 
>     | 配置文件 | 说明 |
>     | --- | --- |
>     | `conf/machine/qcs9100-ride-sx.conf` | 该文件适用于基于 QCS9100 的 Qualcomm^®^ IQ9 Beta 评估套件（EVK）。 |
>     | `conf/machine/qcs9075-ride-sx.conf` | 该文件适用于基于 QCS9075 的 Qualcomm^®^ IQ9 Beta EVK。 |
> 
> 
> 
>     **基于 QCS8300 的开发套件的主机配置文件**
> 
> 
> 
> 
> 
> 
>     | 配置文件 | 说明 |
>     | --- | --- |
>     | `conf/machine/qcs8300-ride-sx.conf` | 该文件适用于基于 QCS8300 的 Qualcomm^®^ IQ8 Beta EVK。 |
> 
> 
> 
>     **在** `meta-qcom-hwe`
> 
> 
>     Qualcomm BSP 使用 BitBake OVERRIDES 定义了两种不同的编译 BSP 的方法。
> 
> 
>     元数据层在 `meta-qcom-hwe/conf/machine/include/qcom-base.inc` 文件中从 `QCOM_SELECTED_BSP` 衍生 `MACHINEOVERRIDES`，具体如下：
> 
> 
> MACHINEOVERRIDES =. "qcom-${QCOM_SELECTED_BSP}-bsp:"
>         Copy to clipboard
> 
> 
>     `meta-qcom-hwe` 中的两个 MACHINEOVERRIDES 为 `qcom-custom-bsp` 和 `qcom-base-bsp`。这些 OVERRIDES 由机器配置文件、配方、和 `meta-qcom-hwe` 元数据层内的其他配置文件使用。配置文件和配方使用这些 OVERRIDE 构件来有条件地设置变量并根据需要附加任务。
> 
> 
>     配方和配置文件中 MACHINEOVERRIDES 的使用决定了最终镜像是由 Qualcomm 定制的 BSP 软件组件还是上游软件组件组成，这取决于编译时有效的 OVERRIDE。
> 
> 
>     例如，`egl`、`libgl`、`libgles1` 和 `libgles2` 的 PREFERRED\_PROVIDER 设置如下：
> 
> 
> 
> 
> 
> 
>     | 有效覆盖 | PREFERRED\_PROVIDER 为 `egl`、 `libgl`、 `libgles1`、 `libgles2` |
>     | --- | --- |
>     | `qcom-custom-bsp` | `adreno` |
>     | `qcom-base-bsp` | `mesa` |
> 
> 
> 
>     在 BitBake 代码片段中，OVERRIDES 有条件地设置变量，如下所示：
> 
> 
> # Provider for Graphics Library.
>         # qcom-base-bsp uses 'mesa' as GL provider
>         GL_PROVIDER ?= "adreno"
>         GL_PROVIDER:qcom-base-bsp ?= "mesa"
>         
>         PREFERRED_PROVIDER_virtual/egl      = "${GL_PROVIDER}"
>         PREFERRED_PROVIDER_virtual/libgl    = "${GL_PROVIDER}"
>         PREFERRED_PROVIDER_virtual/libgles1 = "${GL_PROVIDER}"
>         PREFERRED_PROVIDER_virtual/libgles2 = "${GL_PROVIDER}"
>         
>         PREFERRED_PROVIDER_virtual/egl-native      = "mesa-native"
>         PREFERRED_PROVIDER_virtual/libgl-native    = "mesa-native"
>         PREFERRED_PROVIDER_virtual/libgles1-native = "mesa-native"
>         PREFERRED_PROVIDER_virtual/libgles2-native = "mesa-native"
>         Copy to clipboard
> 
> 
> Note
> 
> 
> 在此发布版本中，`qcom-base-bsp` OVERRIDE 仅针对 `qcs9100-ride-sx.conf` 和 `qcs8300-ride-sx.conf` 而编译。
> 
>     - **内核命令行**
> 
> 
>         `meta-qcom-hwe/conf/machine/include/qcom-qcs6490.inc`，`meta-qcom-hwe/conf/machine/include/qcom-qcs9100.inc` 和 `meta-qcom-hwe/conf/machine/include/qcom-qcs8300.inc` 包含文件使用 `KERNEL_CMDLINE_EXTRA` 变量来设置内核命令行参数如下：
> 
> 
> Tab qcom-qcs6490.inc
> Tab qcom-qcs9100.inc
> Tab qcom-qcs8300.inc
> 
> 以下代码片段来自该 `qcom-qcs6490.inc` 文件：
> 
> 
> # Additional Kernel cmdline parameters for debug builds
>             DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','earlycon page_owner=on qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage;FZPU','',d)}"
>             
>             KERNEL_CMDLINE_EXTRA ?= "pcie_pme=nomsi kernel.sched_pelt_multiplier=4 rcupdate.rcu_expedited=1 rcu_nocbs=0-7 kpti=off kasan=off kasan.stacktrace=off no-steal-acc ${DBG_CMDLINE} swiotlb=128 mitigations=auto net.ifnames=0"
>             Copy to clipboard
> 
> 以下代码片段来自该 `qcom-qcs9100.inc` 文件：
> 
> 
> # Additional Kernel cmdline parameters for debug builds
>             DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','earlycon reboot=panic_warm page_owner=on qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage;FZPU','',d)}"
>             
>             KERNEL_CMDLINE_EXTRA ?= "pcie_pme=nomsi net.ifnames=0 pci=noaer kpti=off kasan=off kasan.stacktrace=off swiotlb=128 ${DBG_CMDLINE} mitigations=auto kernel.sched_pelt_multiplier=4 rcupdate.rcu_expedited=1 rcu_nocbs=0-7 no-steal-acc vfio_iommu_type1.allow_unsafe_interrupts=1 fw_devlink.strict=1"
>             Copy to clipboard
> 
> 以下代码片段来自该 `qcom-qcs8300.inc` 文件：
> 
> 
> # Additional Kernel cmdline parameters for debug builds
>             DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','earlycon reboot=panic_warm page_owner=on qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage;FZPU','',d)}"
>             
>             KERNEL_CMDLINE_EXTRA ?= "pcie_pme=nomsi net.ifnames=0 pci=noaer kpti=off kasan=off kasan.stacktrace=off swiotlb=128 ${DBG_CMDLINE} mitigations=auto kernel.sched_pelt_multiplier=4 rcupdate.rcu_expedited=1 rcu_nocbs=0-7 no-steal-acc arm64.nopauth  fw_devlink.strict=1"
>             Copy to clipboard
>     - **包括 DTB**
> 
> 
>         为了确保包含正确的设备树二进制文件 (DTB)，`KERNEL_DEVICETREE` 使用 OVERRIDES 机制有条件地设置变量。在 `meta-qcom-hwe/conf/machine` 中每个单独的机器配置文件中进行管理。
> 
> 
>         在机器配置文件中，对 `custom` 和 `base` 变体，将 `KERNEL_DEVICETREE` 设置为不同的值。以下示例来自 `conf/machine/qcs9100-ride-sx.conf` 显示机器配置文件如何选择 DTB：
> 
> 
> Tab linux-qcom-base
> Tab linux-qcom-custom
> 
> 以下代码块展示了如何将 `KERNEL_DEVICETREE` 设置为 `linux-qcom-base`，从而得到 `base` 使用上游 DTB 的变体。
> 
> 
> KERNEL_DEVICETREE:pn-linux-qcom-base = " \
>                                  qcom/qcs9100-ride.dtb \
>                                  qcom/qcs9100-ride-r3.dtb \
>                                  qcom/sa8775p-ride.dtb \
>                                  qcom/sa8775p-ride-r3.dtb \
>                                  "
>             Copy to clipboard
> 
> 以下代码块展示了如何将 `KERNEL_DEVICETREE` 设置为 `linux-qcom-custom`，从而得到 `custom` 使用上游 DTB 的变体。
> 
> 
> KERNEL_DEVICETREE:pn-linux-qcom-custom = " \
>                                  qcom/qcs9100-addons-ride.dtb \
>                                  qcom/qcs9100-addons-ride-r3.dtb \
>                                  qcom/sa8775p-addons-ride.dtb \
>                                  qcom/sa8775p-addons-ride-r3.dtb \
>                                  "
>             Copy to clipboard
>     - **包括其他 DTBO**
> 
> 
>         要包括拟覆盖在内核设备树上的附加设备-树覆盖层 (DTBO)，请使用 `KERNEL_TECH_DTBOS` 变量列出 DTBO 名称。
> 
> 
> Note
> 
> 
> Qualcomm Linux 仅支持 `custom` 变体的设备树二进制覆盖层。
> 
> 
>         来自 `qcs9100-ride-sx.conf` 的以下示例展示如何使用 DTBO。
> 
> 
> KERNEL_TECH_DTBOS[sa8775p-addons-ride] = " \
>                sa8775p-video.dtbo qcs9100-graphics.dtbo \
>                qcs9100-ride-sx-camera.dtbo \
>                "
>             KERNEL_TECH_DTBOS[sa8775p-addons-ride-r3] = " \
>                sa8775p-video.dtbo qcs9100-graphics.dtbo \
>                qcs9100-ride-sx-camera.dtbo \
>                "
>             
>             KERNEL_TECH_DTBOS[qcs9100-addons-ride] = " \
>                sa8775p-video.dtbo qcs9100-graphics.dtbo \
>                qcs9100-ride-sx-camera.dtbo \
>                "
>             
>             KERNEL_TECH_DTBOS[qcs9100-addons-ride-r3] = " \
>                sa8775p-video.dtbo qcs9100-graphics.dtbo \
>                qcs9100-ride-sx-camera.dtbo \
>                "
>             
>             KERNEL_TECH_DTBO_PROVIDERS = "\
>                qcom-graphicsdevicetree \
>                qcom-videodtb \
>                cameradtb \
>                "
>             Copy to clipboard
> - **固件配方**
> 
> 
>     Qualcomm Linux 固件配方文件在 [GitHub](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-firmware)。当 Qualcomm Linux 源代码同步时，固件配方可在以下目录中获得：`<workspace>/layers/meta-qcom-hwe/recipes-firmware/firmware`。
> 
>     - **关键启动二进制文件**
> 
> 
>         需要关键启动固件镜像来启动设备上的内核。以下固件配方提供了硬件 SoC 特定的启动固件。
> 
> 
> 
> 
> 
> 
>         | `firmware-qcom-bootbins_1.0.bb` | 处理对兼容目标的关键启动固件二进制文件的获取、解包和部署。基于 QCS6490、QCS9075 和 QCS8300 的机器所需的启动固件由 `QCM6490_bootbinaries.zip`、`QCS9100_bootbinaries.zip` 和 `QCS8300_bootbinaries` 文件提供。 |
>         | --- | --- |
> 
> 
> 
>         生成编译版本后，可从以下目录中找到这些 zip 文件中的固件二进制文件以进行刷写：
> 
> 
>         `<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/<machine-name>/<image-name>/`
>     - **子系统固件二进制文件**
> 
> 
>         Qualcomm Linux 包含在相应子系统上加载并运行的固件二进制文件。当 Qualcomm 硬件 SoC 启动时，各个子系统在重置后执行固件。
> 
> 
> 
> 
> 
> 
>         | `firmware-qcom-hlosfw_1.0.bb` | 处理子系统固件二进制文件（例如 aDSP、cDSP、modem 和 WLAN）的获取、解包和安装。基于 QCM6490、QCS9075 和 QCS8300 的机器的固件文件打包在 `QCM6490_fw.zip`、`QCS9100_fw.zip` 和 `QCS8300_fw.zip` 文件中。 |
>         | --- | --- |
> 
> 
> 
>         该 `firmware-qcom-hlosfw_1.0.bb` 配方执行以下操作：
> 
> 
> 
> > 
> > 
> > 1. 根据SRC\_URI从远程服务器获取子系统固件二进制文件。
> >         2. 解压 zip 文件。
> >         3. 在 中 `rootfs` 安装固件。
>     - **DSP 库**
> 
> 
>         用户空间实用程序是指 DSP 库，它必须在 `rootfs` 镜像中。以下固件配方提供特定于硬件 SoC 的 DSP 库：
> 
> 
> 
> 
> 
> 
>         | `firmware-qcom-dspso_1.0.bb` | 处理对 DSP 库的获取、解包和安装。基于 QCM6490、QCS9075 和 QCS8300 的机器的库打包在 `QCM6490_dspso.zip`、`QCS9100_dspso.zip` 和 `QCS8300_dspso.zip` zip 文件。 |
>         | --- | --- |
> 
> 
> 
>         该 `firmware-qcom-dspso_1.0.bb` 配方执行以下操作：
> 
> 
> 
> > 
> > 
> > 1. 根据SRC\_URI从远程服务器获取 DSP 库。
> >         2. 解压 zip 文件。
> >         3. 在 中 `rootfs` 安装 DSP 库。
>     - **安装启动、子系统和 dspso**
> 
> 
>         在编译 Qualcomm Linux 时，编译系统使用固件配方根据 `MACHINE_EXTRA_RDEPENDS` 配置变量部署预编译的固件，其在机器配置文件中设置。例如，在 `qcom-qcs6490.inc` 中，请参阅 `packagegroup-firmware-qcm6490` 包括在 `MACHINE_EXTRA_RDEPENDS` 变量中：
> 
> 
> MACHINE_EXTRA_RDEPENDS += " \
>                packagegroup-firmware-qcm6490 \
>                "
>             Copy to clipboard
> 
> 
> Note
> 
> 
> `packagegroup-firmware-qcm6490` 配方在 `<workspace>/layers/meta-qcom-hwe/recipes-firmware/packagegroups/` 目录中。它将固件配方分组以生成镜像。
> 
> 
>         在编译 Qualcomm Linux 时，根据机器配置中的配置和软件包组配方文件，建立 `<workspace>/layers/meta-qcom-hwe/recipes-firmware/firmware` 目录的相应固件配方。
> - **内核配方**
> 
> 
>     Qualcomm Linux 使用的 Linux 内核配方在 `<workspace>/layers/meta-qcom-hwe/recipes-kernel/linux` 中。
> 
> 
>     Qualcomm Linux 支持长期支持 （LTS） Linux 内核 v6.6.x。在该 `meta-qcom-hwe` 层中，有两个不同的内核配方：
> 
>     - `linux-qcom-custom_6.6.bb` 配方支持 `custom` BSP 并从托管在 `git.codelinaro.org` 中的 `qcom.git` 获取内核源代码。
>     - `linux-qcom-base_6.6.bb` 配方支持 `base` BSP 并从托管在 `git.kernel.org` 中的 `linux.git` 检索内核源代码。
> 
> 
> 
> Tab linux-qcom-custom\_6.6.bb
> Tab Linux-QCOM-Base\_6.6.bb
> 
> inherit kernel sota
>         
>         COMPATIBLE_MACHINE = "(qcom)"
>         
>         SRCPROJECT = "git://git.codelinaro.org/clo/la/kernel/qcom.git;protocol=https"
>         SRCBRANCH  = "kernel.qclinux.1.0.r1-rel"
>         SRCREV     = "d3ed32bf7ee64db22653833d4c3d9a80dd76896d"
>         
>         SRC_URI = "${SRCPROJECT};branch=${SRCBRANCH};destsuffix=kernel \
>                  ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', ' file://selinux.cfg', '', d)} \
>                  ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', ' file://selinux_debug.cfg', '', d)} \
>                  "
>         
>         S = "${WORKDIR}/kernel"
>         
>         KERNEL_CONFIG ??= "qcom_defconfig"
>         Copy to clipboard
> 
> inherit kernel sota
>         
>         COMPATIBLE_MACHINE = "(qcom)"
>         
>         SRC_URI = " git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git;protocol=https;branch=linux-6.6.y \
>                     file://qcom.cfg \
>                     file://vm-configs/qcom_vm.cfg \
>                     file://qcom_debug.cfg \
>                     "
>         # Apply qcom patches
>         require ${BPN}-${PV}/configs.inc
>         require ${BPN}-${PV}/devicetree.inc
>         require ${BPN}-${PV}/drivers.inc
>         require ${BPN}-${PV}/dt-bindings.inc
>         require ${BPN}-${PV}/tools.inc
>         
>         KERNEL_CONFIG_FRAGMENTS:append = " ${WORKDIR}/qcom.cfg"
>         KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${WORKDIR}/qcom_debug.cfg', '', d)}"
>         
>         S = "${WORKDIR}/git"
>         Copy to clipboard
> 
> 
>     机器配置文件使用 OVERRIDES 来选择适当的内核配方变体。当您选择 `base` 变体时，`qcom-base.inc` 文件选择 `linux-qcom-base`。如果您选择 `custom` 变体，使用如下所示的片段中的 `linux-qcom-custom` 配方编译内核。
> 
> 
> PREFERRED_PROVIDER_virtual/kernel ?= "linux-qcom-custom"
>         PREFERRED_PROVIDER_virtual/kernel:qcom-base-bsp ?= "linux-qcom-base"
>         Copy to clipboard
> 
> 
>     **内核配置**
> 
> 
>     Qualcomm Linux 内核配方 为 `base` 和 `custom` 变体使用一组不同的内核配置和片段。
> 
> 
> 
> 
> 
> 
>     | 版本 | 配置和片段文件 |
>     | --- | --- |
>     | `base` | `defconfig`，`qcom.cfg`，`qcom_vm.cfg`，`qcom_debug.cfg` |
>     | `custom` | `qcom_defconfig`，`qcom_addons.config`，`selinux.cfg`，`qcom_debug.config`，`qcom_addons_debug.config`，`selinux_debug.cfg` |
> 
> 
> 
>     下表提供了用于 `custom` 变体的 `defconfig` 和 `fragments` 的描述。
> 
> 
> 
> 
> 
> 
>     | 内核配置文件 | 说明 |
>     | --- | --- |
>     | `<kernel_src>/arch/arm64/configs/qcom_defconfig` | 与产品/性能需求相符的默认配置 |
>     | `<kernel_src>/arch/arm64/configs/qcom_debug.config` | 调试配置片段 |
>     | `<kernel_src>/arch/arm64/configs/qcom_addons.config` | 在上游一致base软件之上添加 Qualcomm 增值产品 |
>     | `<kernel_src>/arch/arm64/configs/qcom_addons_debug.config` | Qualcomm 调试启用 |
> 
> 
> 
>     Qualcomm Linux `custom` 变体配方 `linux-qcom-custom_6.6.bb` 进一步支持 `perf` 和 `debug` 变化。使用 `linux-qcom-custom_6.6.bb` 编译内核的默认方法是 `perf`。
> 
> 
> 
> 
> 
> 
>     | 编译版本 | Defconfig/config 文件 |
>     | --- | --- |
>     | `Perf` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_defconfig</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_addons.config</span></code></p></li><br></ul> |
>     | `Debug` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_defconfig</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_debug.config</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_addons.config</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_addons_debug.config</span></code></p></li><br></ul> |
> 
> 
> 
>     要使用 `linux-qcom-custom_6.6.bb` 编译调试内核镜像，在您使用 BitBake 命令编译镜像的 shell 中将 DEBUG\_BUILD 设置为 1。
> 
> 
>     此选择在以下代码中有效：
> 
> 
> KERNEL_CONFIG ??= "qcom_defconfig"
>         
>         KERNEL_CONFIG_FRAGMENTS:append = " ${S}/arch/arm64/configs/qcom_addons.config"
>         KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${S}/arch/arm64/configs/qcom_debug.config', '', d)}"
>         KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${S}/arch/arm64/configs/qcom_addons_debug.config', '', d)}"
>         
>         # Enable selinux support
>         SELINUX_CFG = "${@oe.utils.vartrue('DEBUG_BUILD', 'selinux_debug.cfg', 'selinux.cfg', d)}"
>         KERNEL_CONFIG_FRAGMENTS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', '${WORKDIR}/${SELINUX_CFG}', '', d)}"
>         Copy to clipboard
> 
> 
>     要为 Qualcomm 平台自动加载内核模块，请更新 Qualcomm Linux 内核配方中的 KERNEL\_MODULE\_AUTOLOAD 变量。例如，CoreSight 和 STM 模块按如下方式自动加载：
> 
> 
> KERNEL_MODULE_AUTOLOAD += "coresight coresight-tmc coresight-funnel"
>         KERNEL_MODULE_AUTOLOAD += "coresight-replicator coresight-etm4x coresight-stm"
>         KERNEL_MODULE_AUTOLOAD += "coresight-cti coresight-tpdm coresight-tpda coresight-dummy"
>         KERNEL_MODULE_AUTOLOAD += "coresight-remote-etm coresight-tgu"
>         KERNEL_MODULE_AUTOLOAD += "stm_core stm_p_ost stm_console stm_heartbeat stm_ftrace "
>         Copy to clipboard
> - **许可证**
> 
> 
>     `meta-qcom-hwe` 中的配方许可证列于 `<workspace>/meta-qcom-hwe/files/common-licenses`。
> 
> 
> common-licenses/
>         ├── BSD-3-Clause-Clear
>         ├── GPLv2.0-with-linux-syscall-note
>         └── Qualcomm-Technologies-Inc.-Proprietary
>         Copy to clipboard
> 
> 
>     Yocto 可以根据图像创建自动创建 SPDX SBOM 文档。若要启用此功能，请按 `local.conf` 如下方式继承 `create-spdx` 类：
> 
> 
> INHERIT += "create-spdx"
>         Copy to clipboard
> 
> 
>     继承该类后，就可以用 BitBake 命令重建镜像了：
> 
> 
> bitbake qcom-multimedia-image
>         Copy to clipboard
> 
> 
>     可以在以下目录中找到 SPDX 输出：
> 
>     - 对于每个配方，生成的文件在 `tmp/deploy/spdx/<machine>` 目录中。
>     - 顶级 SPDX 输出文件位于目录中 `tmp/deploy/images/MACHINE/<image-recipe>-<MACHINE>.spdx.json`。

### meta-qcom-distro

该层为 Qualcomm Linux 提供了参考分发配置。镜像配方和软件包组在该层定义。

- **BitBake 分类**

    下表介绍了 BitBake 分类，见[分类](https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/classes)。

    Qualcomm Linux 支持用于设备访问的 SSH 和 UART 串行 shell。您可以选择 SSH 或 UART 来访问设备。您还可以使用 ADB 来调试 IP 接口关闭时的问题或传输大文件。

    | `image-adbd.bbclass` | `meta-qcom-distro` 中的 `image-adbd.bbclass` 分类在镜像中安装 adbd。adbd 守护进程保持禁用状态，除非 `IMAGE_FEATURES` 包含 `enable-adbd` 特征。您可以通过从 `rootfs` 手动删除 `/etc/usb-debugging-enabled` 来禁用 adbd。 |
    | --- | --- |
    | `image-qcom-deploy.bbclass` | 部署 `<workspace>/build-<distro>/tmp-glibc/deploy/images/<machine>/<image-name>` 中可用的镜像文件。生成的镜像部署在子目录中 `<image-name>`。 |
- **分发包配置**

    下表介绍了分发包配置，见 [GitHub](https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/conf/distro)。

    | `conf/distro/qcom-wayland.conf` | 此分发包配置文件定义 `qcom-wayland` 分发包。您可以在下面的示例命令中使用 `qcom-wayland` 分发包。<br><br><br><br>> <br>> <br>> MACHINE=qcs6490-rb3gen2-core-kit DISTRO=qcom-wayland QCOM_SELECTED_BSP=base source setup-environment<br>>         Copy to clipboard<br><br><br><br>`meta-qcom-distro/conf/distro/include/qcom-base.inc` 配置定义了常见的 DISTRO\_FEATURES。该 `meta-qcom-distro/conf/distro/qcom-wayland.conf` 配置增加了以下功能：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">wayland</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">vulkan</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">opengl</span></code></p></li><br>> </ul><br><br><br><br>Yocto 项目文档在[分发包特性](https://docs.yoctoproject.org/4.0.22/singleindex.html#distro-features)定义了这些分发包特性。 |
    | --- | --- |
    | `conf/distro/include/qcom-base.inc` | INIT\_MANAGER设置为 `systemd`。有关 INIT\_MANAGER 的 Yocto 项目文档，请参阅 [INIT_MANAGER](https://docs.yoctoproject.org/4.0.22/singleindex.html#term-INIT_MANAGER)。启用的其他 DISTRO\_FEATURES 包括：<br><br><br>DISTRO_FEATURES:append = ” pam overlayfs acl xattr selinux ptest security virtualization tpm usrmerge sota”<br>        Copy to clipboard<br><br><br>要了解这些 DISTRO\_FEATURES 的用途，请参阅[分发包特性](https://docs.yoctoproject.org/4.0.22/singleindex.html#distro-features)。<br><br><br>该文件选择 `systemd` 作为 INIT\_MANAGER，`udev` 作为 DEV\_MANAGER。 |
    | `conf/distro/include/qcom-security_flags.inc` | 该文件包含[安全标志](https://git.yoctoproject.org/poky/tree/meta/conf/distro/include/security_flags.inc?h=kirkstone)中定义的安全标志。 |
- **软件包组**

    包组在 和 `meta-qcom-distro` 中 `meta-qcom-hwe` 定义。这些软件包组可帮助您了解 Qualcomm BSP 定义的功能。

    | `packagegroup-qcom.bb` | 包含所有基本软件包的软件包组。 |
    | --- | --- |
    | `packagegroup-qcom-multimedia.bb` | 包含用于启用多媒体支持的软件包的软件包组：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-container</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-audio</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-camera</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-display</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-fastcv</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-graphics</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-k8s</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-opencv</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-video</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">python3-docker-compose</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-iot-base-utils</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-location</span></code></p></li><br>> </ul><br>> <br>> Note<br>> <br>> <br>> 在 `meta-qcom-extras` 元数据层中定义了 `packagegroup-qcom-location`。 |
    | `packagegroup-qcom-test-pkgs.bb` | 包含测试包的软件包组。 |
- **镜像配方**

    `meta-qcom-distro` Qualcomm Linux 元数据层定义了镜像配方，见 [GitHub](https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/recipes-products/images)。下表列出了各种镜像及其 `IMAGE_FEATURES` 以及镜像的功能：

    | 镜像配方 | 镜像说明 |
    | --- | --- |
    | `qcom-minimal-image.bb` | 定义要引导到 shell 的小型 `rootfs`。<br><br><br>启用如下 `IMAGE_FEATURES`：<br><br><br>IMAGE_FEATURES += "splash tools-debug allow-root-login post-install-logging enable-adbd"<br>        Copy to clipboard<br><br><br>更多信息 `IMAGE_FEATURES`，请参阅[镜像特征](https://docs.yoctoproject.org/4.0.22/singleindex.html#image-features)。 |
    | `qcom-console-image.bb` | 通过添加更多软件包并启用更多 `IMAGE_FEATURES` 扩展 `qcom-minimal-image`：<br><br><br>IMAGE_FEATURES += “package-management ssh-server-openssh”<br>        Copy to clipboard |
    | `qcom-multimedia-image.bb` | 需要 `DISTRO_FEATURE` wayland，它包括所有多媒体包 `rootfs`。 |
    | `qcom-multimedia-test-image.bb` | 包括要测试 `qcom-multimedia-image` 的 `rootfs` 测试包。 |
    | `qcom-multimedia-crossesdk-image.bb` | 生成 eSDK `qcom-multimedia-image`。 |
    | `qcom-guestvm-image.bb` | 基于内核的最小虚拟机 （KVM） 镜像，支持启动到 shell。 |
- **QDL 刷写工具**

    QDL 是一个刷写工具，可以与 USB 设备通信，将刷写加载程序上传到设备。刷写加载程序将镜像刷写到设备内置的通用闪存 (UFS) 或嵌入式多媒体卡 (eMMC)。更多信息 `QDL flashing`，请参阅 [QDL](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/flash_images.html)。

### 编译 Qualcomm Linux

`meta-qcom`、 `meta-qcom-hwe` 和 `meta-qcom-distro` 部分描述了机器配置、分发包配置、镜像配方 和 OVERRIDES。

[此表格](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#qcom-selected-bsp)列出了可以为 `MACHINE`、 `DISTRO` 和 `QCOM_SELECTED_BSP` 设置的支持值。若要设置环境，请使用这些值并运行以下命令：

MACHINE=<machine configuration name> DISTRO=<Distro name> QCOM_SELECTED_BSP=<variant name> source setup-environment
    Copy to clipboard

下表列出了可能的镜像配方，以根据所选的 `MACHINE`、`DISTRO` 和 `QCOM_SELECTED_BSP` 选择和生成镜像，运行以下命令：

bitbake <image recipe name>
    Copy to clipboard

| `QCOM_SELECTED_BSP`<br><br>（由您选择） | 有效的 BitBake 覆盖值<br><br>（派生自 `QCOM_SELECTED_BSP`） | 机器配置<br><br>（由您选择） | 参考 DISTRO 配置<br><br>（由您选择） | 镜像配方<br><br>（由您选择） |
| --- | --- | --- | --- | --- |
| `custom` | `qcom-custom-bsp` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-core-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-vision-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-industrial-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-idp.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs8300-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs9100-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs9075-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs8300-ride-sx.conf</span></code></p></li><br></ul> | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-wayland</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-robotics-ros2-humble</span></code></p></li><br></ul> | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-minimal-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-console-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-multimedia-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-multimedia-test-image</span></code></p></li><br></ul> |
| `base` | `qcom-base-bsp` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-core-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-vision-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-rb3gen2-industrial-kit.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs6490-idp.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs8300-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs9100-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs9075-ride-sx.conf</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcs8300-ride-sx.conf</span></code></p></li><br></ul> | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-wayland</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-robotics-ros2-humble</span></code></p></li><br></ul> | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-minimal-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-console-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-multimedia-image</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">qcom-multimedia-test-image</span></code></p></li><br></ul> |
|  |  |  |  |  |

要了解有关编译 Qualcomm Linux 所支持的组合的更多信息，请参阅 [Qualcomm Linux 发布说明](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-241225194606)。

有关详细的编译说明，请参阅[未注册用户的 GitHub 工作流程](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/github_workflow_unregistered_users.html)。

### meta-qcom-realtime

该 `meta-qcom-realtime` 元数据层可在 [GitHub](https://github.com/quic-yocto/meta-qcom-realtime) 上使用。该层为编译 Qualcomm 设备的实时内核提供额外的软件支持。

- **内核配方**

    Qualcomm Linux 支持 LTS Linux 内核 v6.6.x 和实时扩展。通过 `meta-qcom-realtime` 层位于 `recipes-kernel/linux` 的 `linux-qcom-custom-rt_6.6.bb` 和 `linux-qcom-base-rt_6.6.bb` Yocto 配方对其进行维护。[Realtime](https://wiki.linuxfoundation.org/realtime/start)中包括了待处理的抢占式 RT 补丁。这些补丁获取后将被打到 `linux-qcom-custom-rt_6.6.bb` 层，该层公开托管于 [Codelinaro](https://git.codelinaro.org/clo/la/kernel/qcom.git)。

    要为 Qualcomm 设备编译实时内核：

> 
> 
> - 如果选择了 `custom` OVERRIDE，那么 `conf/layer.conf` 会选择 `linux-qcom-custom-rt`。
>     - 如果选择了 `base` OVERRIDE，那么 `conf/layer.conf` 会选择 `linux-qcom-base-rt`。

    **内核配置**

    两种配方都按如下方式附加 `qcom_rt.cfg` 片段：

KERNEL_CONFIG_FRAGMENTS:append = " ${WORKDIR}/qcom_rt.cfg"
        Copy to clipboard
- **在build中** **启用** `meta-qcom-realtime`

    要在build中包括 `meta-qcom-realtime`，将 `meta-qcom-realtime` 层导出到 `bblayers.conf` 中的EXTRALAYERS，具体步骤如下：

    1. 用source设置环境。

        以下是为基于 QCS6490 的设备和 `qcom-wayland` distro获取环境的示例：

MACHINE=qcs6490-rb3gen2-core-kit DISTRO=qcom-wayland source setup-environment
            Copy to clipboard
    2. 打开 `build-qcom-wayland/conf/bblayers.conf` 文件并更新 EXTRALAYERS 变量，如下所示。

EXTRALAYERS ?= " \
              ${WORKSPACE}/layers/meta-qcom-realtime \
             "
            Copy to clipboard
    3. 运行编译命令来重建 `meta-qcom-realtime`，具体如下：

bitbake qcom-multimedia-image
            Copy to clipboard

### meta-qcom-extras

该层是已注册用户可选的元数据层。该层支持对选定组件进行源代码编译，除此以外这些组件在 `meta-qcom-hwe` 以二进制形式提供。如果有权接收该元数据层，则可以使用 [Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/build_addn_info.html)中分享的步骤。

- **固件配方**

    该 `meta-qcom-extras` 层为 `meta-qcom-hwe/recipes-firmware/firmware` 的 `meta-qcom-hwe` 层中定义的固件配方提供配方附加文件。这些配方附加文件，扩展名 `.bbapend`，如下列代码片段所示。固件配方附加文件具有您可能想要使用的 zip 文件的 `SRC_URI` 设置，而不是随此 Qualcomm Linux 发布版本分发的默认 zip 文件。

    按照 [Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/build_addn_info.html)的步骤来编译 cDSP、aDSP、Boot的固件，并生成可使用提供的配方附加文件来集成该 zip 文件。

    | recipes-firmware<br>        └── firmware<br>           ├── firmware-qcom-bootbins_1.0.bbappend<br>           ├── firmware-qcom-dspso_1.0.bbappend<br>           ├── firmware-qcom-hlosfw_1.0.bbappend<br>           └── firmware-qcom-partconf_1.0.bbappend<br>        Copy to clipboard | `meta-qcom-extras` 中的配方覆盖来自 `meta-qcom-hwe` 的配方中的 `SRC_URI`。该 `meta-qcom-hwe` 层默认使用预编译的固件二进制文件，而 `meta-qcom-extras` 层编译用户提供的固件 zip。<br><br><br>该 `meta-qcom-extras` 层忽略默认 .zip 文件中预先编译的二进制文件。这些配方搜索 FWZIP\_PATH 中用户提供的 .zip 文件集，如下所示：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">firmware-qcom-bootbins_1.0.bbappend</span></code>：在变量 <code class="docutils literal notranslate"><span class="pre">FWZIP_PATH</span></code> 定义的路径下搜索 zip 档案。</p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">firmware-qcom-hlosfw_1.0.bbappend</span></code>：在变量 <code class="docutils literal notranslate"><span class="pre">FWZIP_PATH</span></code> 定义的路径下搜索 zip 档案。</p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">firmware-qcom-dspso_1.0.bbappend</span></code>：在变量 <code class="docutils literal notranslate"><span class="pre">FWZIP_PATH</span></code> 定义的路径下搜索 zip 档案。</p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">firmware-qcom-partconf_1.0.bbappend</span></code>：在变量 <code class="docutils literal notranslate"><span class="pre">FWZIP_PATH</span></code> 定义的路径下搜索 zip 档案。</p></li><br>> </ul> |
    | --- | --- |

### meta-qcom-qim-product-sdk

- **BitBake 分类**

    下表列出了 `meta-qcom-qim-product-sdk` 元数据层中定义的 BitBake 分类：

    | BitBake 类 | 说明 |
    | --- | --- |
    | `qim-prod-sdk-pkg.bbclass` | <ul class="simple"><br><li><p>提供打包任务，将 Qualcomm Intelligent Multimedia Product (QIMP) SDK 的 artifacts打包为一个档案。它由 <code class="docutils literal notranslate"><span class="pre">qim-product-sdk</span></code> 配方调用。</p></li><br><li><p>配方编译完成后，易于安装的 artifact 档案位于 <code class="docutils literal notranslate"><span class="pre">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/qim_prod_sdk_artifacts</span></code> 目录中。</p></li><br></ul> |
    | `qimsdk-pkg.bbclass` | <ul class="simple"><br><li><p>提供打包任务，以将 Qualcomm Multimedia SDK 软件包和易用的安装脚本一起打包到归档文件中。生成的归档文件包括了相应的软件包，可以分别用于开发、部署和调试。</p></li><br><li><p>易于安装的artifact归档文件位于 <code class="docutils literal notranslate"><span class="pre">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/qimsdk_artifacts</span></code> 目录。</p></li><br><li><p>在编译过程中由 <code class="docutils literal notranslate"><span class="pre">qim-sdk</span></code> 配方调用。</p></li><br></ul> |
    | `tflitesdk-pkg.bbclass` | <ul class="simple"><br><li><p>提供打包任务，将 Lite Runtime SDK artifact 打包成多个归档文件以供开发、部署和调试。在编译过程中由 <code class="docutils literal notranslate"><span class="pre">tflite-sdk</span></code> 配方调用。</p></li><br><li><p>配方编译完成后，易于安装的artifact档案位于 <code class="docutils literal notranslate"><span class="pre">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/qim_prod_sdk_artifacts</span></code> 目录中。</p></li><br></ul> |
- **Distro配置**

    | `layer.conf` | 使用以下信息配置项目层：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>配方文件路径信息</p></li><br>> <li><p>支持的 Yocto 版本</p></li><br>> <li><p>支持的 Qualcomm<sup>®</sup> Hexagon<sup>™</sup> 处理器版本</p></li><br>> <li><p>支持的 Qualcomm<sup>®</sup> Neural Processing SDK 版本</p></li><br>> <li><p>支持的 Qualcomm Neural Network（QNN） SDK 版本</p></li><br>> </ul> |
    | --- | --- |
- **镜像配方**

    | 配方 | 说明 |
    | --- | --- |
    | `recipes-gst` | 由上游 GStreamer 配方更改 （`.bbapend`） 以及 Qualcomm 配方组成：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-good_1.20%.bbappend</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-base.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-batch.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-metamux.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mldemux.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlmeta.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlmuxer.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlqnn.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlsnpe.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mltflite.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvclassification.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvconverter.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvdetection.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvpose.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvsegmentation.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-overlay.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-qmmfsrc.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-socket.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-tools.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vcomposer.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vsplit.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vtransform.bb</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-qcom-oss-sample-apps.bb</span></code></p></li><br>> </ul> |
    | `recipes-qcom-ml` | 包含两个配方：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">qnn.bb</span></code>：用于打包 QNN SDK</p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">snpe.bb</span></code>：用于打包 Qualcomm Neural Processing SDK</p></li><br>> </ul> |
    | `recipes-qim-product-sdk` | 该配方用于安装 QIMP SDK，其中包括了QIM SDK、Qualcomm Neural Processing SDK、QNN 和 Lite runtime SDK。 |
    | `recipes-tensorflow-lite` | Lite runtime 配方为以下版本编译和安装 Lite runtime：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>2.12.1、2.13.1、2.14.1 和 2.15.0</p></li><br>> <li><p>默认版本：2.15.0</p></li><br>> </ul> |
- **软件包组**

    | 软件包组 | 说明 |
    | --- | --- |
    | `packagegroup-qcom-gstrecipes-gst` | 用于启用上游基本 GStreamer 以及 Qualcomm 插件的软件包组：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-base</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-tools</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-batch</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-metamux</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mldemux</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlmeta</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvconverter</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvclassification</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvdetection</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvpose</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlvsegmentation</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-overlay</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-qmmfsrc</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-socket</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vcomposer</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vsplit</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-vtransform</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-qcom-oss-sample-apps</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlsnpe</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mlqnn</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-qcom-oss-mltflite</span></code></p></li><br>> </ul><br><br><br><br>该软件包组还用于打包上游 GStreamer 软件包：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">cairo</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gdk-pixbuf</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">liba52</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libdaemon</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libgudev</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">lame</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libpsl</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">librsvg</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libsoup-2.4</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libtheora</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libwebp</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">mpg123</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">orc</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">sbc</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">speex</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">taglib</span></code></p></li><br>> </ul> |
    | `packagegroup-qcom-gst-basic` | 用于启用上游 GStreamer 的包组：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-base</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-good</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-plugins-bad</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">gstreamer1.0-rtsp-server</span></code></p></li><br>> </ul> |
    | `packagegroup-qcom-qim-product` | 用于将以下软件包与安装脚本一起打包的软件包组：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-gst</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">packagegroup-qcom-ml</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">install.sh</span></code></p></li><br>> </ul> |
    | `packagegroup-qcom-ml` | 用于打包 Qualcomm ML 框架的包组：<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p><code class="docutils literal notranslate"><span class="pre">tensorflow-lite</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">qnn</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">snpe</span></code></p></li><br>> <li><p><code class="docutils literal notranslate"><span class="pre">libgomp-dev</span></code></p></li><br>> </ul> |

## Qualcomm Linux软件组件

本节介绍关键软件组件，如初始化脚本、调试工具、systemd-boot、分区工具以及对容器和 Kubernetes 的支持。还介绍了日志记录和二级虚拟机等功能。

## 系统初始化脚本

添加到 `meta-qcom-hwe` 镜像中的系统初始化脚本如下：

| 系统初始化脚本 | 说明 |
| --- | --- |
| `var-persist.mount` | 将 `/dev/disk/by-partlabel/persist` 磁盘分区挂载到 `/var/persist`。 |
| `android-tools-adbd.service` | 在设备上提供adbd守护程序。 |
| `logrotate.service` | 对旧日志存档。<br><br><br>在 Qualcomm Linux 中修改了 `rsyslog.logrotate` 配置文件，以管理设备上的日志。修改后的 `rsyslog.logrotate` 文件位于 `meta-qcom-hwe/dynamic-layers/openembedded-layer/recipes-devtools/rsyslog/rsyslog/rsyslog.logrotate` 目录。该文件覆盖由 `meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate` 提供的默认配置文件。 |
| `pd-mapper.service` | 配置和管理保护域。`pd-mapper.service.in` 文件已更新，从而以系统用户身份而不是 root 用户身份通过 Qualcomm Linux BSP 层中的 `pd-mapper_git.bbappend` 运行该服务。<br><br><br>do_install:prepend() {<br>        # convert the service from root user to system user<br>        sed -i "/ExecStart=/i\User=system\nGroup=system" pd-mapper.service.in<br>    }<br>    Copy to clipboard |
| `property-vault.service` | 提供 `property_get` 和 `property_set` 功能。有关此服务的更多信息，请参阅[特性](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#properties-section)。 |
| `persist-property-vault.service` | 运行 `set-persist-prop.sh`，该脚本设置 `le.persistprop.enable` 标记为真。此属性允许使用persist属性，这些属性存储在文件系统中并在重启后仍然存在。 |
| `resize-partition@.service` | 根据分区的大小在启动时调整文件系统大小。<br><br><br>ExecStart=/bin/sh -c "/sbin/e2fsck -n /dev/disk/by-partlabel/%i; if [ $? -gt 1 ]; then /sbin/mkfs.ext4 /dev/disk/by-partlabel/%i; fi; /sbin/resize2fs /dev/disk/by-partlabel/%i"<br>    Copy to clipboard |
| `rsyslog.service` | 根据指定的配置重新定向日志。 |
| `sys-kernel-debug.mount` | 当已编译 `perf` 变体时，`sys-kernel-debug.mount` 单元被屏蔽。该 systemd 单元的条件屏蔽是在 `meta-qcom-hwe/recipes-core/systemd/systemd_%.bbappend` 的 `do_install:append:qcom` 任务中完成的。 |

## 调试工具

`<workspace>/layers/poky/meta` 目录中定义的 `packagegroup-core-tools-debug` 增加调试工具作为 `rootfs` 的一部分。该软件包组配方附加在 `<workspace>/layers/meta-qcom-hwe/recipes-devtools` 目录中作为 `packagegroup-core-tools-debug.bbappend`。该Append文件将 `ltrace`，`perf`，`sysstat`，和 `valgrind` 工具添加到该软件包组。更多信息，请参阅[调试 Linux 用户空间问题](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-12/using_open_source_debug_tools.html)。

## systemd-boot

systemd-boot统一可扩展固件接口（UEFI）启动管理器提供控制启动流程的选项，并加载用户选择的启动加载器。配置文件、内核镜像、initrd 镜像和其他 EFI 镜像必须驻留在 EFI 分区上。

要将Linux内核直接作为EFI镜像执行，请使用 `CONFIG_EFI_STUB`。systemd-boot支持两种配置：

> 
> 
> - Type1：
> 
> 
>     Type1配置使用引导加载程序规范（BLS）描述文件。您可以在 `/loader/entries/` EFI 上的目录中找到这些文件。
> - Type2：
> 
> 
>     Type2配置使用统一内核镜像（UKI）。这些镜像将内核、initrd和内核命令行合并到单个EFI可执行文件中。Type2提供了更好的安全性，因为UKI包含设备启动所需的所有信息。对UKI镜像进行签名可保护所有包含的实体。如果启用了UEFI安全启动，则系统仅加载已签名的镜像，因此需要签名。

有关详细信息，请参阅 [systemd-boot](https://www.freedesktop.org/software/systemd/man/latest/systemd-boot.html)。

Note

如果使用启用了安全启动的设备，则需要签名。

- **UKI**

    UKI 是单个 UEFI 可移植可执行 (PE) 文件中 UEFI boot stub 程序、Linux 内核镜像、initrd 和其他资源的组合。UEFI boot stub 在 UEFI PE 二进制文件内部搜索用于内核调用的各种资源。这允许在单个 UKI 镜像内组合各种资源，然后可以使用 sbsign 进行签名。Qualcomm Linux 使用 sbsign 来给 PE 文件签名，而 OpenSSL 用于签署 DTB 等非 PE 文件。

    有关 UKI 的更多详细信息，参见 [unified_kernel_image](https://uapi-group.org/specifications/specs/unified_kernel_image/)。`uki.efi` 内容如下表所示：

    | uki.efi 文件的组件 | 内容 |
    | --- | --- |
    | Initrd = Init ramdisk | `initramfs-ostree-image-qcs6490-rb3gen2-vision-kit.cpio.gz` |
    | Linux = 内核镜像 | `Image` （因为 systemd-boot 需要未压缩的内核） |
    | Uname = 内核发布版本 | `6.6.52` |
    | Efi-arch = 架构 | `aa64` |
    | Stub = System-boot efi stub | `linuxx64.efi.stub` |
    | OS-release = 操作系统发布版本 | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">ID</span> <span class="pre">=</span> <span class="pre">qcom-wayland</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">Name</span> <span class="pre">=</span> <span class="pre">“QCOM</span> <span class="pre">Reference</span> <span class="pre">Distro</span> <span class="pre">with</span> <span class="pre">Wayland”</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">VERSION</span> <span class="pre">=</span> <span class="pre">“1.0”</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">VERSION_ID</span> <span class="pre">=</span> <span class="pre">1.0</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">PRETTY_NAME</span> <span class="pre">=</span> <span class="pre">“QCOM</span> <span class="pre">Reference</span> <span class="pre">Distro</span> <span class="pre">with</span> <span class="pre">Wayland</span> <span class="pre">1.0”</span></code></p></li><br></ul> |

    **镜像配方**

    `meta-qcom-hwe/recipes-kernel/images` 包含以下配方：

    - `linux-qcom-uki.bb` 生成 `uki.efi`。
    - `esp-qcom-image.bb` 生成 VFAT 镜像，`efi.bin`，其中包含 `uki.efi` 和 `systemd-boot`。

> 
> 
> `meta-qcom-distro/classes/image-qcom-deploy.bbclass` 调用 `esp-qcom-image`.

- **EFI 镜像**

    EFI 镜像，`efi.bin`，是存储在闪存的EFI分区中的VFAT文件系统镜像。该 VFAT 文件系统包含 UEFI 将执行控制权加载和转移到 systemd-boot 所需的镜像。为了将执行控制权转移到 systemd-boot 管理器，UEFI 挂载 `efi.bin`，加载 `bootaa64.efi`，并执行它。systemd-boot 管理器解析 `loader.conf` 并加载内核镜像，并将控制权转移给它。

    有关 EFI 结构的更多信息，请参阅 [EFI 系统分区](https://wiki.archlinux.org/title/EFI_system_partition)。

    以下是来自 Qualcomm Linux 的 `efi.bin` 的示例结构。它包含 `/ostree/poky-<sha256-sum>` 目录下的 systemd-boot `bootaa64.efi` 和 Linux 内核 `vmlinuz-<version>`。

> 
> 
> ![../../_images/efi-bin-ostree.png](data:image/png;base64,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)
> 
> **生成的 efi.bin 文件 （支持OSTree）**
- **签名**

    安全启动是 UEFI 标准中的一项功能，但在 Qualcomm Linux 中默认情况下并未启用。启用后，安全启动会通过维护在设备启动时运行的加密签名二进制文件列表（如果成功通过身份验证）为预启动过程增加了一层保护。这可确保设备的启动固件和 Linux 操作系统启动组件（例如启动管理器、内核和 initramfs）未被篡改。

    UEFI 安全启动使用数字签名来验证其加载的二进制代码的真实性和完整性。所有密钥都存储在 UEFI 安全变量中。UEFI 安全启动是通过使用平台密钥（PK）、密钥交换密钥（KEK）、数据库（DB）、禁止签名数据库（DBX）实现的。

    要使用安全启动，需要密钥 PK、KEK 和 DB。虽然允许多个 KEK、DB 和 DBX，但只允许一个 PK。

    仅当在系统中注册PK时，才会启用UEFI安全启动。建议在安全启动启用过程的最后一步预配 PK。有关 Qualcomm 如何实现 UEFI 安全启动功能的更多信息，请参阅[安全启动](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-11/secure-boot.html)。

    **主机工具signing\_tool.py 用于对 Qualcomm Linux 版本生成的 Linux 操作系统镜像进行签名**

    启用 UEFI 安全启动后，必须对 EFI 和 DTB 镜像进行签名。为了简化此过程，使用主机签名工具 `signing_tool.py`。该命令行 Python 脚本在 Linux 主机（Ubuntu 20.04 或更高版本）上运行。它通过两个独立的操作自动完成 EFI 和 DTB 镜像的签名。该工具还支持合并 DTB 文件的功能。

    主机签名工具可在 [GitHub](https://github.com/quic/host-signing-tool) 上下载。

    **主机签名工具概述**

    主机签名工具在安装了Python3的Linux主机上运行。它可以在单个操作中对 EFI 镜像或 DTB 镜像进行签名。要签署 EFI 和 DTB 镜像，您必须使用不同的输入调用该工具两次。

![../../_images/host_tool_design_wbg.png](data:image/png;base64,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)

    **具备OpenSSL和sbsign的Linux计算机**

    host tool 需要将未签名的 EFI 或 DTB 文件以及证书和密钥作为输入。调用后，该工具将解包未签名的镜像，使用提供的密钥和证书对可用项目进行签名，然后重新将镜像打包，将未签名的版本替换为已签名的版本。

    要合并 DTB 文件，您必须遵循与签名过程不同的流程。使用该工具将新的 DTB 文件与现有的 `dtb.bin` 合并或从可用的 DTB 文件列表中创建一个新的串联 `dtb.bin` 文件。

    **主机签名工具的工作原理**

    - **运行该工具的前提条件**

        若要运行此工具，请在Linux主机上安装以下内容：

        - OpenSSL、sbsign和mtools实用程序
        - Python3
        - pip、subprocess、shlex、socket、glob和shutil Python模块
    - **主机签名工具配置**

        在开始操作之前，您必须配置主机签名工具。

        - `config.ini` **文件**

            主机工具需要在 `config.ini` 配置文件中提供必要的信息。该工具读取此文件并对镜像进行相应的签名。以下代码片段显示了配置文件中的变量：

[common]
                # Section - 1: Common Selection
                # Select operation: 1. sign_image or 2. combine_dtb
                operation = sign_image
                # This option is useful for both operations(sign_image & combine_dtb). Possible values for file_path are 1. remote or 2. local
                file_path = local
                # This option is required for both operations(sign_image & combine_dtb) if file_path == remote
                local_machine_private_key_path = /usr2/<user_name_for_machine>/.ssh/id_rsa
                
                # Section - 2: operation == sign_image related common selection
                # Possible values for image_type are 1. efi or 2. dtb
                image_type = efi
                # This option is required if operation == sign_image & image_type == efi
                loader_conf_timeout = 20
                
                # Section - 3: operation == combine_dtb related common selection
                # Possible values for combine_dtb_type are 1. combine_with_old_dtb, 2. combine_without_old_dtb
                combine_dtb_type = combine_with_old_dtb
                
                # Below options are required to fetch file from remote linux machine in the same network(i.e. if file_path == remote)
                
                # This option is useful if operation == sign_image & image_type == efi
                [efi_config]
                efi_remote_hostname = <remotemachine_ip_or_hostname_where_efi.bin_available>
                efi_remote_username = <username_on_remote_machine_where_efi.bin_available>
                efi_remote_filepath = <full_path_of_efi.bin_file_on_remotemachine>
                
                # This option is useful if operation == sign_image. Both image_type requires this option
                [keys_config]
                keys_remote_hostname = <remotemachine_ip_or_hostname_where_keys_available>
                keys_remote_username = <username_on_remote_machine_where_keys_available>
                keys_remote_filepath = <full_path_of_keys_directory_on_remotemachine>
                
                # This option is useful if operation == sign_image & image_type == dtb
                [dtb_config]
                dtb_remote_hostname = <remotemachine_ip_or_hostname_where_dtb_available>
                dtb_remote_username = <username_on_remote_machine_where_dtb_available>
                dtb_remote_filepath = <full_path_of_dtb_on_remotemachine>
                
                # This option is useful if operation == combine_dtb.
                [combine_dtb_config]
                combine_dtb_remote_hostname = <remotemachine_ip_or_hostname_where_combined-dtb.dtb_available>
                combine_dtb_remote_username = <username_on_remote_machine_where_combined-dtb.dtb_available>
                combine_dtb_remote_filepath = <full_path_of_combined-dtb.dtb_on_remotemachine>
                Copy to clipboard

config.ini 文件中的变量

            | config.ini 中的变量 | 值 | 说明 |
            | --- | --- | --- |
            | `operation` | `sign_image/combine_dtb` | 使用此配置可以选择对镜像进行签名或合并DTB文件。 |
            | `image_type` | `efi/dtb` | 如配置 `operation == sign_image`，请使用此配置单独选择 `efi` 或 `dtb` 签名。 |
            | `combine_dtb_type` | `combine_with_old_dtb/combine_without_old_dtb` | 如配置 `operation == combine_dtb`，请使用此配置选择要执行的DTB合并操作类型。<br><ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">combine_with_old_dtb</span></code>：与旧的 <code class="docutils literal notranslate"><span class="pre">dtb.bin</span></code> DTB结合使用</p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">combine_without_old_dtb</span></code>：合并一组 DTB 文件</p></li><br></ul> |
            | `file_path` | `local/remote` | <ul class="simple"><br><li><p>本地：密钥和 efi.bin/dtb.bin 与脚本位于同一路径。</p></li><br><li><p>远程：将 efi.bin/dtb.bin 和密钥从远程 Linux 机器复制到当前路径。</p></li><br></ul> |
            | `local_machine_private_key_path` | `<path of id_rsa file in local machine>` | 如果 `file_path = remote`，此文件将与远程计算机建立SSH 连接。 |
            | `loader_conf_timeout` | `<timeout in seconds>` | systemd-boot等待时间，让您选择对二进制文件进行身份验证。此选项是签名 `efi.bin` 所必需的。 |
            | `efi/keys/dtb/combine-dtb_remote_hostname` | `<ip or hostname of the remote Linux machine>` | 如果 `file_path = remote`，则主机工具选择远程机器的主机名，使用 SCP 复制从远程机器获取文件 `efi/keys/dtb/combine-dtb`。 |
            | `efi/keys/dtb/combine-dtb_remote_username` | `<username_on_remote_machine>` | 如果 `file_path = remote`，则主机工具选择远程机器的用户名，使用 SCP 复制从远程机器获取文件 `efi/keys/dtb/combine-dtb`，前提是用户名是在远程机器上创建的。 |
            | `efi/keys/dtb/combine-dtb_remote_filepath` | `<full_path_of_file_on_remote_machine>` | 如果 `file_path = remote`，则主机工具选择远程计算机上的一个 `efi/key/dtb/combine-dtb` 文件的路径，使用 SCP 从远程计算机复制该文件。 |
        - **使用 config.ini 文件进行配置**

            1. 操作选择：通过设置 `operation` 变量指定必须执行的操作。选项为 `sign_image` 或 `combine_dtb`。
            2. 镜像选择：如果选择 `operation == sign_image`，则通过设置 `image_type` 变量来指定要签名的镜像。选项为 `efi` 或 `dtb`。
            3. 文件位置：使用 `file_path` 变量指示未签名的 EFI/DTB 镜像、密钥和证书的位置。

> 
> 
> 如果在配置文件中进行选择 `local`，请手动将 EFI/DTB 镜像、密钥和证书文件复制到本地工作目录。
> 
>                 1. 在与脚本相同的路径中创建一个 `unsigned_binaries` 目录，然后将 `efi.bin`/`dtb.bin` 镜像复制到该目录中。
>                 2. 在与脚本相同的路径中创建一个 `keys` 目录，然后将 `db.auth`、`db.crt`、`db.key` 和 `KEK.auth` `PK.auth` 文件复制到该目录中。
> 
> 
> 
> 如果希望脚本从同一网络上的远程 Linux 计算机自动复制所需的文件，请在配置文件中选择 `remote`。
> 
> 
> 在配置文件中，提供以下变量的信息：
> 
> 
> 
> > 
> > 
> > - `local_machine_private_key_path` （必填）
> >                 - `[efi_config]` 节（如果 `operation` 是 `sign_image` 并且 `image_type` 是 `efi`）
> >                 - `[keys_config]` 节（如果 `operation` 是 `sign_image`）
> >                 - `[dtb_config]` 节（如果 `operation` 是 `sign_image` 并且 `image_type` 是 `dtb`）
> >                 - `[combine_dtb_config]` 节（如果 `operation` 是 `combine_dtb`）
> > 
> > 
> > 
> > Note
> > 
> > 
> > 该脚本支持在同一网络内通过 SCP 从另一台 Linux主机复制文件。
            4. 加载程序配置超时：如果 `image_type` 在配置文件中设置为 `efi`，请更新 `loader_conf_timeout` 变量。
            5. 组合 DTB 选择：如果选择 `operation == combine_dtb`，则通过设置 `combine_dtb_type` 变量来指定必须执行的 DTB 组合操作类型。选项为 `combine_with_old_dtb` 或 `combine_without_old_dtb`。

> 
> 
> 1. 如果选择 `combine_dtb_type == combine_with_old_dtb`，则在与脚本相同的路径中创建一个 `unsigned_binaries` 目录，`dtb.bin` 并将镜像复制到该目录。
>                 2. 对于这两个选项，请在与脚本相同的路径中创建一个 `dtb_files` 目录，并将必须合并到该目录中的所有 DTB 文件复制（与旧的合并 DTB 一起 `dtb.bin` 复制，或者仅与彼此合并）。
            6. 处理缺失的配置：如果缺少任何配置信息，脚本将运行，并通过命令行提示您输入缺少的详细信息。
        - **运行主机签名工具**

            1. 启动主机工具：完成代码编译过程并获取未签名的 `efi.bin` 和 `dtb.bin` 镜像后，启动主机签名工具。
            2. 准备主机：将主机签名工具文件（`signing_tool.py` 和 `config.ini`）存储在Linux计算机上。确保两个文件位于同一工作目录中。
            3. 配置工具：根据配置说明对主机签名工具进行配置。
            4. 运行工具：运行以下命令从命令行启动主机工具：`$python3 signing_tool.py`
            5. 交互过程：主机签名工具在屏幕上显示您的选择和操作命令。它还会在命令行中显示错误。
            6. 签名镜像：它会创建一个在同一工作目录中调用 `signed_binaries` 的目录。签名d `efi.bin` 或 `dtb.bin` 镜像存储在目录中。该工具会在签名后删除用户创建的其他目录。
            7. 对两个镜像重复上述步骤：按照此过程操作两次，一次为 `efi.bin`，一次为 `dtb.bin`。每次签名操作后，请先删除 `signed_binaries` 目录，然后再开始新操作。
    - **主机签名工具工作流程**

> 
> 
> 下图显示了主机签名工具的工作流：
> 
> ![../../_images/host_tool_workflow.png](data:image/png;base64,UklGRg5PAABXRUJQVlA4TAFPAAAvPgKYAFUL47ZtJEnpv+v13DP7jogJYHvjJVj3SncQQ1VVUscMFRs4Aj1MV4Z17PD6zjPUmJ10ngGJ2ztBz5jrFi9XUJfY7lPtYg8Cv9zRSVEuz7f6/0fWXTkTwphjXnNMmDBhwoR5TZgwj3nM0Ypaa61gwjwmTJjHPB5HDzVHXH0v5at2V/27qvemeKnJCP5eUcXRV61NZW6/DSRBqw1YTIBmUeQAs6n89sasKGj+smgDKdA9WFxIgW6NiqOofmkUVRztUPnXoqoRefRao2e+/jVrzXpzoGZFcendfxRUcRwYJ44X1GQE8GoE4ih8ubDaYwpVI0yqCJoiBi2KmkyANJsih2PW2hk0lVsmI5BxHFAEwAheCiTABOo6jSTbVvoqTghI5JPkHwUS+eSTyOHvNJJtK2o+VYxEIpHkHw1yJSFct/2fAE35/+mxbTd36KGHhmBIgWAoGQZChoFgCBkGgod3GADvaXWvXmufF+9wKSZiIiZiIiZiUkj+LDaSZiImGoVGMRETMRETMSkmfxRG0kzEpJjo+eYNRjEREzERk2JSoBYTMdET0f8JwHL9/2LLcq5suWXJkiVLlixZsmTJkiVLliy5ZcmSJUuWLFmyZMmSJUuWLHfE3nPO6d6zzumjp9dYnnbDPBNmZmoXpl51VJgTeV2YOakThlcwV/ZaYU7UrGDLMLQK1lpXh5mZmTlxzDlhcpwMh44KMzMzMzPHMjMNz6ig22Fo2Tn3hJkZFDO57B1mxuFRYaYTBjugwpxXQK3imaG/oWF4Bb3DcG4YO8xoGYbpBYSTiy5MLe+qARVm7uvCzPgqmJmZmZnTl8a1TYIkK6w+q88mMDAwsf4/XUyMa4Fx7WuLa1YEsBEkSRJrsRFbszU0DDj/RwMT+piPeZmXaVn/J+C35jflV+fX5Obm+jdcfjC/GV/Ee7jJ+eJX4ldf3stXOL6Cm5u/Ey/x3fi1lpz8mo+bmuRL+p78Wuufy/YrPm5qyu/01D7sy37rDc3H+bL/ciPz9+QN5ui1FKAyNxW4dgJUvsLOuXkvimsmqBwpr/EBfvV8J+bgL5/38yo/FN4LrpWgXxHKB2nfxbvJ52JU5wdHwbWS0K3ewXv1Ct+XHzrk9/C34EOs3kleUXB9BKHLp5hzdIjqgYLrIuhW2ndm4Fx1eZ1QcF0kjNOSM1S9p/pJ0sxfhmP2MnJUXAtB+UPzbq34+N7Nj8g/OL0Tjf0c/Vfx6/A8bSjXRMLzu0z1BPPf/tuH/nUl2NgC9ZAf2Tf5Stv+IYlW10j7pTzJOYGAKIAo0rxrFUQBVBVQ01m9UZV7bkD1jqoUiCpoWLN8gOvoa6m4JmpWvIppb8uryjDVMnd/+fswMW+K7s6YBh3+5t25jOyrcelenM31bxTImzFlC/hhdXN23393RflAOVWU6yDoUd6j4kqqcx3iUgrRaDLvPh6MV2ZyY+OWQ+rzdFWW7RqbNaSi8nSxfFWQ12vc124mm3Wqpzy+unL8yFAP10jrq3kdsHWewSntOQFjn7EKXA7KINAuE0hXFrnOwxqE+pxBgyEtDbem5MNDdo3UXM2wKhx9Kphf+x1Izd45cEFhf1fTtJ/mzgDURsX1ClRd1vXaM0jv5Cdchtl8zEcX3bu8U3+7ahhi89C+ihoHsC0WO3Sm+Z8CpjvxmrMP7t77EFXhTgTqVcX1CgxdBpLrvISfbK8H+kRclfldF0nvwC4O1i7D/BoBkY+wvWewoUQVmldLv/58iybDERLRKLYP1SFjyIxnNZVvB/tZjla2Lk5bORetN6NR8tqNYx88KY57b5TtHEb9eeaHFppawY+WaRdIpTmYR0XGNR77DtRmyDA558ZcIHsDzLVA3txaWdDaucqCVmaTn2dfXfhk4ck3CH7Up6ZTKz/ljjo/Q+v5B9jL/DNOYpee4bvheXnWZ23B/ozDJnmGJPu8ZmmfNZqfbaneLeiNNvU+TZaUddot4C0kK03tb+So92myN959x8mCzOPuC/I0NnLT/2Tbg1s3Ye8tuezL5d3NuBivs0+o2ZDoquu8DtDYl917OW7q16/X0qCxM6GbgDkE063255vtKtQLe7BsSytNt4v0r13bxaF9BeX3Zn0IQn3OMne13Mj4mlSoulk1Li3+clnbzslPt3y5DBSsl6JmR00UGIyK2aA0CnXIxEURN1I4nTPYZQDyWVGfCRhP/7PrC09GE8KYi7blyHU3o2YDRlcgZRRoTML1i3jsn8cP618ztMsESBcZQgaac/7Z1RRPht8Wkwv24MprFNRUj5V34rpZTit5gv0D09k+p74mshA2qyuA/VdzI65KR4LntfvhvOEjH2LPCPhzZHy3QNXZp5R1dX20yuVJbGO1es03bF05jpPe2VaVvkKcE5j6hEW6LIp+fNj5PdoscZk0mcuSOuPzdFawPaFo3L1eF5XvaoYnKnsTdmEylv0qqxhcFjcCdamyjkiMAs068jAtV/usSR4iQxcadLjM1bfA3AdzVQr1+iGJThTYayG9dU37JOS58YBafFcDzbvBKqAWrELOgFqO9Ynk+Y3+IZR2VpDUzMptno8EoFY+cphe1XWRhfCVpPGTPNq+olVbXYknV8+XiUtO0+ZhXzeZVhTYayI93q/S8spkDy6uZubphyxv8+hMjydRNF4fWQhln67dFYE9miPzick5Pif0+LmOKgrsdZGFUIqpWQ+JPlUA0U8UkuI8nAzxMm1/i1Bgr48shBxWWRa58qvnzdLreZRl7QcklC+xXy9pJ2RSHr5800z9B3Lw+vnfF1IusNdJFgo50o/FsqMfpVPY6yULCxXv/ye+l5aO4n2Fwl43WWvh/f/1/zn9OMdO4XkLex3l/YfsIvip/57676n/nvrvBoP8Tl8slo4CeyMDKmSxFMoFNzEg90Pb1unyfYpFcCODSbrb7XZvx7yRYSFcP5B393pTY6x3u9dLCuxNDAvhr5/dbinUmxtj/XpJgb2RAb1seWqEP1SK6wxcYVCAdsLXkqUx2SmCAK4w/OFBVXl8VQWAAADtyA+/K7/vaToJZe4BgKrK46sCQIgDoCoi23s+4e1RRBXAnIN25DpdOR7S9mspwBwDoCJyvOUT3h5FRAGEMVhARY4kb5997b8ff7IoVvtVURSHzeiE5FFEAYv5BRW6Nu2F5CaLBopiPsECKnJLUlxS9kVx2u9Pnyz68jW5juStiAJAyIJCRUhxw2HVZA82eZPnURZldbT8+GYUcisCxbyCHll9oS750CSfzvwamwDzB1CI3JMuORfLKMuyLMqbJv9CFmV1lp/OP8WR9yKqQIgCtJM7cjx/pzRZ1ha//igT9xVGHj5uDsU+q5s2ToSUTjGfIHf8YOom4SPdKl0L5YJ5A9VOSDesl1HdnNbx4OSRrorXq6aOlsXgyGOnCoQl6EVI2ZyiOj+VI6/SDes2i/ZnR8oFFvMHQvl4und83D59Ob+FKBdgrkA7IZPD8l2K9odEeIWSxKuofl/6ijx2qghFgHZHslzWUbHhLF8bfV43B8c7gWK+ABC6vytd8wnLuqkoF8UcwUXIpIiyNnacoTvvs+xUkdIpEH6gKmS5rPPYceabfd0chNIp5glUhUkznfnEVVOX3HaKeQHIHb+vTllWJJx5so7enVVFChQhB9Dunt837bQshZ4cVnW+IQWYH9DuyM1bUcUrdG3ak51iPkCF0tfZOqEnxz6q1x2lU4QaqArduo7OQs+mdlolFMW8gHbkIW1HXqms01VHAeYB5I6bZjol9Oy4/mhUkhJqoN2R1XszrUd6WeKsLkkB5gEAoZzSQnjV5ylPKArjAUIp0uVAT1dtenIUIMQIGb9TTUWvj/u0EMoF5oOqMMmnmDOsojc33AoMh4swWU4HocclnvKfQlGEFQilSE+OPuzT5UgxH7Q7csiygTMdl+mBFBgNF+Emiwb6cIjqkscLEEYAodtPMf25eTNKKDActCPjdDlyxlKkJ0eBwXA58jy1I33p9umBdxdF+IAKx2W9oV+TJhsoMBoglCJdCWcfT98yUgAYCpctD+lJ6NciXfOuU4QNaMcxzwb6d1zWAwUwFy7Cr23TAz05vJUNlIvCSNAt+7Sgj/u0IEMHVOh+XFbRz67NKorCVLgIq6je0KNJPn2Yd53CQFDhp9I1fR2na24VoQLaUT5TD/S3y6OEncJMkDuepzyhZ90pLYQCGEh4Tgv6vE9jSsi4bHmaNvT7GOWOncJEEMo6fVmOXj6k7Ui5AIaBcJhO9H0xlRSECuEhjen/ql7xeDEPAKH7H9OeHi/rqKJcFEaBcIxaGnBfJxSEBwiHqaAJz9OBcoFhoBfhT2nqkp5P8vrMu05hEFyO0majCdwXm1zuLggLULooFyOwmAaKYaDdluX/GVX0odunv7pIMQhUuE43NOIwnSiKsCA8TQnN6PLcUWESaEf2aTvSn326dxTAENCO/35a0JCH9INipwgFEL6a9EBTDlNPMQkglL/rO2ot9Ot5yhPKBYa43EneiCmk/YJjpwgBuNzJFysXY7CoKwpMAagwyaeYPq6auuRWYAKo8JCWNOYwrSmwwQ8qPEwDzanZXo4KM0Bly8143jwHKrrepgdSAN9BOybZigYt6oSCwAft6KITTRpPA8UM0I48TJs3BRUuRbp6RrkAPrMQFnVlkjH6XDgQHurKKBKtzABchO6UFpg7GE/Lv4hyUfgLwr8oO9Go6/qzFAQ8aEcX7cUoPNQ/hQLfQS/Cv2iZxpy7OETZh8Rtp/BbXydmGbPPBz8LYVwPNKuLThSFz6DdkUNWb2jIcTnFpPgKShe9PGjYIksoCHa4bKVdimFYZI6dwlfQjozfoTzhFccPsiGOcnpHTqTAT8KyHkyT1O9X0IN2rLKepq3qV/AbIGTxfOX46PixTazDNsX70wwrTmAErSGOPKS/70gBfHS/asQ0XLayVQQ5C2H/icQ4smwpvoIKXZv2fMyQJ/tQIA3OrkxE82tuaWcLTK+iZbavNornZ3BxU0d/MEXhEwjH96SnceO6ogQ6KN1yT/MesoSdwi+AHllFdcnHLUaTS2v0bjZtSKEExA/q9RzQc0mm1wFgpno9L9lgvQ+xnZLNdPgd9bxMb70OoMn+yzBTvdY8Jnn9CvwmAfzyo+rEPC7rg56wymIDVVnsI6h8DTxPecLHTcRsunNJKA2xCpcl+bVeipblAp7M2+7b01uxgMSO48MMzIubqvuQvEHLQ5cVoQig0/ITbdn1j2uKGnyeGDJElTOD2OGPmkdZpWuhXOCT/ZIG3i8l8P2oujKQy08Uv0A7yjrdOz6+EVMgpU5vlQPPL/jyLcOocxlarcz1syRzmQh8eV9OaS51P5ooVsH1oQhhwthTsafp2PGx1LAoWqs+ACH2LmTpmBTsH5o34fkSx4RCGWpmxpebiobNI/t07ygXwHPQY9cUJuqjkYrgBj3K90ouBuIp79gp/AAI3T5d80k7i3EkTa7UUSDBjI+wcCrRZP+q2ZQq7L+MM2P8Eoz4SMnpTHI5h9YL13J+zFTUv4As0fLjKrYXpVkDiJ9h/cR+8GKJhFQV6wdGNoHYz5awrKOKx4vCc8KhLk1UZSUl0NE1K5r4FZNV/gAuwqqpz7xC1634Fmi+c0H7RBiF1ebJdgyXtAr6b+PbMX5FouZHLEVRAjaP9qP2+WMu+3iafgCQFuNjO86yDEKcwZNhyY4gxHm550OmjE7AiiEZbmWLWDV1ybtOv+y3eq+vRxNJsw52wiTrjTREP4oC63mobFnWUcWrNaIHkUaVFh+1+F3dfFWa0TJ1GzljvjqRT1NiUTr3q3oCexXg2Bj5Zjm2s9wMgg+70gTdlnKU6F2AFX1U3o2W0e3TnhQfrHIx0n4f9DZZaaSxKfwA7cg+bUdeYWw/ADzvQQGt6p+pjaACpRPG/DyK2ZQiqL8BIHqPP812LQnp6N73ZjrLPRoBWreQ8nn8/s7nRab0ztairNPVMwoAr8Ba6FG+ZWUkrht3f0GQi7PfwswuH9M07S3kY5qmKeFQysxc/ndR8KCXAKGc0kJ4hdG7UlJemQsdWDsz2vkIzcSxU9bAhjWc0Wz6Dz9DMPcTvi8dx6os0SLmabSa/v/PzCm4lIqZ5NiDa5j5FSBV4ayGAXC8SUK96QJFbgEW5nfuxhJJvRIwswmGW9ka5HnKE4rql/1Wb0AB7eiynjOVedobL0Ca9qmZ9qlFj2mf9bPi+k9mpwhwRSSza87bKEyv8zzPidjpp3H/PuROVeQrrLDwqIUKk3yK2aqplh74w10Vm14L8LgSllkfOmdhTeRmLsvwW4DrK2InURC/sluIH+txjHl2fsNRIMJKsX8odYYjAJ26748yFtKKBxRV7vmxIXMSsGP+0+tsHQ5RtuG2+4oPeFKOItoxqc+zsd3rXHrTwHier/d5nhXN+1yufp9RG1Kg+8myyjn7/T1ZnzLU78Z6r/zD8gWKZmQnpADqUciWmzobeNWReXS4aABA5+7ufh/QW88B9O7u7vcBwCyj+wDEDwIgWuQoDYHRfVkfZqo3gJnqsf20Et0y/ctJgXqxE1Ke8dVkm9n4c7B+Xs+J7G31nqzP7O9J03oOs/HmHymwAQ16lH3rhZensH55bsvuC/RNQjL5xrNI51EhD2k+cm5KkZ4cpfPg7fiNZ+E9y2yY0VIDak4L7K8WYH/N0C7xbKyZAl6795b9OocoYdLXbxf0rpz+s5NwnsbpMqEnXf3tp2UpPEfVrEaA47UD9b0Wmm4zm7zuge722XLlgem9DnHLsL/2eW71a8RReajf/na8XbjRq9V+OnDObqJmM3rx+6be7V4sN32UeCJ3UR55V812bZytrmOgu3f5yRNLuJyF/X2Zfk1fo5yev73b7XZTnr83nszz9PWSc9dNL5r8v5953ry+2+12L6Zm9IR27pHp3cf+LJNZbYHu1hv768g5C+yvKbVJv8a5brPdbvf2Mo4P3ow/N+3d3Omnffypw8zjPt3tdq8vl5E3bBd5YH9NNs/dUmY0Brpj91L2nkgU1i/L7ZeIo5/i+nq3W9O7mzoa5otrP3agJ5/VuzeWpcRR4onp1Tw2A9WLYSZ5rYOdvJzWE/5eKohfoY8SclzXax7Fq0z+++k8T6qoLrkVD3LM81LIc1bNqgZy3+XHWiDOyuwBb7X0wnc9z3MS6neRO7/AuvmTKeSYyFf8wKtC9xema3nUnmi0I1VcavoZq9pgKOsmoSg8KK7qeCcss2FGZznPk+lmbr7ngu9tnsfXnjO1pglwFsJT5IGje53nq1SmyxcM4QuccsdOhPcK61UI+fF07x6xKjpYnBpyEhtrjfpbpcn+EfN4VSS2Xp/uHQWwHoRwK9pxqMvZ2PA6F1O23DZXe3Ms53n2o5tN6ueA12dudprmeT485CQFNvHpsmy5vQCisN6FbFlOTVWu0yNDI+IHQJIB6M3LbDArk9SzLCup95eLnxW8+ZvhMAOQ1PNm1BvANftQDiT1LMuQ5EBfM9w+7UmB9SZEoR3H+jAbSfM/zpli9Xqj7XzMmRnPwbNTBLhX9DdWs/shXfOdRIG1gPUyLsIqqseV2ROVWAksP4Vp74q8YzOUu6v5soSo9BSIH1tuCTeZXxqKGuD4PNkCF7hAVdkNnyvThyMJN5gDWJ0aS8DEklsWFf1wOCJusqCwpLyMz5Pj/kQUnFJi+OkbNbicJ1vgAheoTjSOQoFss8x9Yq31luWS/P98BW479YoFLPT+WVPM5sfd+xzwquhspCrqH+J1XIRje5LrKAnYhcPnR/HsNE6u+XCCX4GaTlgW7Sia73rLCCPxZFFbvAFpsiswguFJE4aZjS0s9I7aBXBcoWMdt3zoVieA+LHlQ/Pokbq0NvJ7omBh9MMijzSeZg7gHfg4fjStvnZHKfctq9ftxQx8yxZyPjuidWZW9DRBZqiICoc0q/1qJZs6qni8KKyXIdy3YqTNyVZhA9wYrY1U1qUvLCCUqzrJkXVgT8hDvQra6dcyK/PoHSqWnvoM6PmRS6czfYYaorcZP6Uq/1xmIqpfsE5Pt3dQ86OVYRH7zMYJXd0AUslbvNWNCMvmbFM0RPwcn8NMLQmAH0Nx1fsApPx3vN4w43zfcJaw85tumXi0f9Fu1lLhLKO6DQDXPbUj5UvsgPVaETkTifsXBDa46Vba1kh9lrBTeM9aCDHT1HMZjcDnDPUqFHMoVDCBfea5cj3AyY82W1XotHgqbnNIQO6X29nM0pwM7KQcRhGMUiGbGn3nRMVM8VbxlgCWePjizUi/MC/ST78FQM8mLb8aQJccu6vyyJPydON+ptuJ78rMjjt5yW36DJjRFMKvBOSzjGU4RPa2J1kIBbAeh/CcvYaJ/mO//6GzEPbRaCDZt/fHC6wvIfsIz7CM8XN8KXlU4k9gTzieXA9wsg/droxwIocV7+hZSOcS+l3vAW7J733A/+RdfH7fUFyMHDnyBmolYszVrggjSLdxE8A/v5bXCQCdj7jHpOk0pxfOzqN7xMAHfNq/8f7juuf7L+8/+er9Jl+6fu/0fMVxjMspJjuF9cFvkexgojJ7lcBX1hsDjdGaAutT9GSYsnnTaZzjMaqa40QfulNh558/dG6hyf7PpaV5DfkMt+EJo84V6BTz4zq7AUyPEtGbr9ePgEvHylVAcmOn894AshypcIaZbPoX4tmfGaacfr4dHvV9i3zEuzwfPPp/s4FHUVjv6fE2X5moiJ5tNeB9X6LCQJtsw07hE1utZsiuioQHge8F9cxr7TwOguVK9wG3S4LOjd+4vhlGadxB9D/1G/kRwAeI5nPRFG+JAyIBudMRbEAD7NGWAkjlGGJTX3lirxpDbGgdzp7OvhatMgfg+RVBa2Hbcb4PGg9Wwk0NM+MPQX/A0/8Df+tv0cn//4vmfPV2k9/p+n2Hud7xONuRooD1IYRF9EMxUL6iwAY5Pd6ucmeeopH7C6xvqz0NwIT/kJeitRnLWQYj7Mleql2AG80Bmxo/p8ZN5UzikgWKk/129FR1qO0tZDVKZS01/Di7sTTEm5xRDgBruvZdVSv7Q1pO08Ak2nTvKwKAgCemaXiSWLyVVM6VVLV5H6ra1Oz+0D/upf351j/rE/8D5Z9743uVUADrSwhfzTtHaZ7XqD+YgGchfIV6Y5zfYkQFBdbH1Z7GK8EBlrFAF979GpLAHJiACL6zYYgfXM7VhcuA2LYd5ePkfgDk+JiqcAQE8LirO3mUD+hxgZgj8ehx3grlt8ohri4SkKxp93f0xKR5AF/a3nfsz7/8x1Tf+kN5ib/mU6TA+hR66/KVeYpopAY6aMcxOhmnrF+FncJHw6s9n/tKCAznMt4xo+X7zMWyk+7AN5tu2n2BNQyZ+8zlMqq9W/f/9ee8vN/fSlZR/aHwa+jUNxbCdeZMI184UWCDnIUKT9FoGGnz26PC+rpa/dwM9ZEneVVZi+D6CfTYZTCgKr0lhlSPK7ivbBl/xstd/yn5CnWeUC4K66fXUsemKetN4LMQDm/GhhmmmALr92o1Q7aOk5xYbxE2eGfrmbClGHI3eGfr+ewtZZ2uHAWA9ZFupW3EMG3uqIHvcuRLapxZVo27Vf8NH17N9hHjxr/s6BZVpNunPSmw/obwJ02xWTZTTIENetpx+ObYKMn0l1NgTVjtyXD9zzh+XOUlTV1y26nvdCvt+4yYRNrGhQALFbaRM8k++lqqGYZXqxnql3yS66i0sm4qiiqs3yH8uVNsknKKKbCBz0JYTb1B2immwBqy2tMApj3JS65X1DrS1lEAWP9dttJGzhwuX8rdJQxYCNdTYgxdl3Knxhhe7WlsNWaaei6jKycbeZKfFHYKa0Box6QuzHGYBnYaDvTeRa0x9mugwJqz2vO5r4T1LHD8qEqZci5Td5sUhTUiVPiN9WCKpD5RFDYMWAjL6WCIdI0UWJNWq5+boT7xJK+7MkYtY4Fz4NgprCGhW8lzZwZpI8cuLFgIi2kwgq5O2ClMMnx4tSdDdlUn+bb1CtjtqZs3BZkqrDk6VvXJDOt0Q1HY8OCWkTPBqv4sRWENC+3IeFqOXpNTWtxSAFhzQoXxx84mKNOeAtiwYCFM6peM+K9PSwpgjQtV4RBlg7fGNj2QAmtW6JGnafBfVX+GdwobIi7CzTevxG9x2lMusAYGIBzzKfbSEGUbSqemsVDKsq789n1HlDt2ocLiIjynhc/OacHjBdbQEMopLbxznvKEclFY40Lomijxl2uikaKwYcLiIjyka1+d05XcXWCNDSEPUzt6ZJ2uHOUCWANDmERR4qcxzyoKYMOFxUV4SE8+itOVfJPCGhyy5SaLKi+4fdrfUgBrZgiTKKr8kzRZRYENpP6y0CPjaS8+kXVaCAXW6FBhktfn2VXNmyXvBNbYEI55vfHLEDUJBTaEWOiRZZ1XvnD7tCc7NZwFhG6VrmVGZd0kFIU1OISunQ7ii7hejhTYUGKhwqqpYx8MUf1t3HYKa3wI2ad7N5M+3TsKYI2mHaVI96P33Ck9CQU2pFhA2K0+tko85vopTygXhZ2DkC3Luqmuzq3SNSmwhofKPc91VHpt09QxKbChxUI78pxlB/HSJn/nWAsFgJ2LuAirpi6vKsnrkttOjWehnTBpp33ipXE1LSseOw0zFtoJk9WUl57x/zItB7JT2HmJi9D9j2l/NZssqigXhTU/9CJk/Il67b6K69966yAUVdgwY6EXITfvy7QsPZGGYGKhdAo7P6FC+eWVnuQK4qkdKRfAzkMAcsexqKM6fwXXR9MqIQWADTcW0O5IV7ZTfhhlNnoM1zplfpNAYecpIHc818vxSeSUFkIB7NzERcjPFn0/JvkcGYqs3g2kdAobaM1gLVTlnrLZ19m+TORJktvNhLJREIWFnbPQI4co2zzeuJxiUmDnKSBC2toEt3t9lvo+r6NPJrc8ChQ2DFkAKlsy6Zd11I6tt/qQZJv2Yb3W0QuIAHYOQ4VjO32geZwhigYeBXbOAiKgc2WCq5pk9TG1/thcyPalI0UUFjYcWWsBFSFvq0Mb1XXUnvrDIS7jw6Ev9vknsmi53nTkURSw8xkQ3hZpIY84T8uRorDzFxC5Jcfy1GR1lq/Wh8OhPB8Ov/5Yr5ZRFjWr80jeigCwwdck1gJQEZLu5x6KfRNFWf18yv7GKGqLvhxJbkUUsPMbcsd4ep/GB6RIT0IB7FwGVIQkq3i9eq+iKKvT9K0s+hvz1a+fuLolKaKADcRmsdYC2onwQfe1SVLWhyQZ3T1JinQKwM51XI4csmggXTsdyE5h5zWgXSdbkhQ3JlW+TJLRCUluRToFbEA2jrVQaNd1ciTJ5D3TzyXJrXRdp1DYuY+LMMnrMmne+rncdgo7x6EK7ToRPrhf8UHpuk4BhQ3MBrKwUFVo1z1jFZ0pXXeBqsLCBkBA6E5TukwoF4Wd64CFKrTrujtp9/fbrutUVWEtbJiz1gKwUO0epgoLwAZFCO8PxUi5AHb+Axaq+jBVBQAbrA31UDwKsIES2h3JewFsUAQeBdjgPR9swISqiMIGyMex1yIWD9obHMHTeDAUrssAhZkVuBaDyvErrGY+/mTBNRiEFGPfKq67AGGyWrZmfilteSu43sJFmET13lD7dC9bxXUWLsLkb4wSmnrfXnPhIkyyKKG59tddwiSLEt7UgDDJooQ3NSBMsijhTQ0IkyxKeEMDECZZlPCGBi7CJItG3tDARZhkUcIbGrgIkywa+bj/yWx5ZaXLu/O8I02YZFHCx/71zz9JEUqVtUTm88/0d5xBmGTRyMd/eXtpRTCqrJT9LKg6ziD8bBaNfMLvtL2sIpiA7TYsfFuVJ688CZavBGrKFQGeW7PdPGU5F4AAsy0TJ8rGL68lNlcGvtNp5WUSj7ctm6cu/RW2SnfO6XAlujgRjgBcwLNIG+6YOxZVHWYQJlk08irUswQkjIUFTdAW57LAVZALpSoPfPZy8hfRNLOxTHg+rJuXNoeMK6y0zobuPVY0SbgrXXte4nN4Hi980Vaxm2FrT+gPpIUg88DuCZO3Ac+XcTPiAnndMUpTHWUQJlk08krUM3NtuOHkkn50xzJ71fgoxcfu8+k08Bs7UayHI2EmwxH+mRUewIumAOOfzFP1NK0MOkpC2Fs0/QA3P5I06+0o/R015XZkZn4E6NxMX5JW+ROZzSbcYlcHGYRJFv0W8GrUHNpqe/GlLE6tl8OKppZ2FeLHHvy387wgpQt69lu6E7ur5DCKjR3Q8v9jHaZZ9ClYbmoJOl34bzXMHuj1LoD+oEwBXgwZvNCQx3mrN4GUOyeoOsagty6PRl4VjdpehH89UKzKYXvTS+fm6m55srQWcAVKmQc7hgbYlWB3ZXpnruVHwPxKBM5FAGSLQCoJsZLv5Hs/rAK0CWVGkCH71gyst3YTSLnPHWPQjlVd8soWvzFc3UDxVol7yzrfH5od/atj0/I8yDmCwjI8rT8E9Pyo1c9jbib7RC7tivxL6aDW7wLmpUzlJXvCRsv1gCb7hz0nzOs4i66IHW0WlLNl1Kocj0aLe2GcPxfvVvSaPgVS6Qcle8XyUjW/rSPlvg/lFvsF4iyenS1EYoma3935N7oM78Wf4AXQB0pnjhFfYt2KH5wDqXRL11iMGeQQuzq2gJl9Ugto4eZC7hvc5p/d3uXsJqz46D1huDk87tD1ycSMZe0Yec9o6LFXBAA+l3PTyz97vwJjE0L4Xb6lxKxCwOV9vvfHReFopck2G4L4HIIIZuXT7rKGo3BMNXS6Zn8FXMC4cIULsMyX4Yse8EP7zKe/JRaSyPa52H4rQoC7tFdbfbRA2QA2AXPlL10gWGUO8edABDtAKALXaOGW8kxH4RnzNho0iGPuQEgBZtPq4d/QcVJXuIgMHpdOy5X9qMwgBO2CuGLOQLpNRfkSO/yQGDEMzQl/wsDi6ofQfhEG8a1irkDv3b4dKRf4APDoRRkGy9RAuwUibgzgIgrPP+BLpSuK9/NTKP6o7OAD5bBs8sDdFO7+op5/hE/5XxWbYf1ZyuJB+EumPg7c7Zsj5eh5Srsnjz6lK0pu1gllAdE3DN7nTyR85n3p2lbkmU9lPH0w5GadUBYRLnjF6XdiXfgxigr/ntqB5GadUGb2aQYUCYMrsf1Uo7lRG9oXlRs//sTNptz4tSwrIcnNOuHMtLP37JUGl+VD0W8pK5c0tK8VzuvN+rMz03PHDK5EzNnhs8WQu7BaurnFzTpJZnYr8P008nSQ2rwioC1uFO/yaqcDdFqwO8KaNPiQrVENQJfBpbGUYl9dBVIbWzSrpq3N0WWR3tLmvoI/6lDjpv+2mfmtkDt/VhmMujT22GfkeezyLkcQDu1mDs+HpHfM47Du2/twtXUbAKL3VE6BKKyWYE1Gr1XvXeaF8W+pT+TnwyQ+dCq7sjs61jic6s1sKNabCmeZzR2G7f29RmW+zyvh+zX9/hWyua4VQcuP2txhJfszzxL1HADug4/hq4bBiC6A2mQsRHYvSSqe5WPmTyisztn6OthYTuVMjNzVTDp5X0Ly3qSkSat/FSGGUm5MP01aLDPlcsWu/CC/V+kIRiibbt/+9nddFNu1JGAECZxg/AyTlvvlGKzXUtLP6ktou0/+DKTymQO9lJ95Wd4sK5YUeNPuDQdomjbqoVf3+z/KpKpi/ZR0CdFHcrar47KFznh+gIBzFur8PsTrVrs63Fy8jmYzYbItcDF851YnSjY9ucx6vS9DImWLHU9NW4b1F4AdVXNuYKfKbN+RnG3XRbFdSwLc6NH//jHX/ZD9HWyuP1cz0nMIz71bFUErN2u2N0EWq851x32zJ9RgRT8Naf6nvPNfjv1k7WgS/vcyV8JVnS3esgBpU+d6J2I2rVjtx9Dpbxk618rccn0s35cZTSAZy4QWH7m80LQY8wjcYLufWOuoYYDJnca0U+gqxm6IM0+SKsJROa5fN1Yn5REUJx/qlVmTOJ+jVSuHzi1H50sR52N5iPtFsbCakc8zwQ9Bl0E/LRIXq61VyLQYBiTiWXorHAEhrQdUwByuCKXJg9hSDnSa4VMumn4C6LJod5UPlatP68KPq1Xh39NfNpJ0fSzbmbU85ByteitH5S6u4s2H4v1N2fxDm83P9enm3Jak62O5f+Y5I5swOZXoeIhG+vLlrOhfKUq69ycWdp3nPN6iGkMf/unf268kVh7J+TGrX0LbJE9I2InnvwZp9/db8SldsZE+ljtV71V4UGtnKUitfOjf1QJH6Ef9IvNoadf5AdmiFNmtRcuadrSflV1w/jkKj+vDFL5U/tAU53Msd4rFSOzsjfYlH16DkvvVW/kiQ5eYr+ORaO4cZ432FfUyQ5s+Y+sOq8+ynn4c60Mo3aot5e5L7FiQHOd0M5/Nx3IGf058WbXCHB4aVorFKmoq1Ar05WeshifOoaNb97y7wC5I8uUEqLoM0oy1B7zXelebsPG91umwgMy2KNXjpOQjA9p45BjHQyC3WpSbcUw3pTbVAWhrC3Krur+68chHBvSwRdJsYws6Ld02/+5ZqDo5XmA9lfrmcNkKETzH5rePqBYPOUTQ2Me+b2EzcTF2W7Vd/vIKTRiAozsKduPKpVTbbcC0zFL15XqOMAVfYJ2JfXdAdcV+OUdIYS84Qqv993sZ0jUCe9cW5Ni5/qrJ7vu9bL9/FnorF1hvnRnr95B5y6wYknqRdtJ87jB3DWzXLNb0me27TF4qozKdldWhsxA7W3AcKtNrwl0ZKYPK1IoOZ2K67uxebN8r1btKPp4t6Spqrhl/GW/FXRlxQW+kWhq11TljQ5/yHwALBazHVmUQzkYr+LRG/VA7SYwTqqDo5UTZ3ontskC1KuncoT0nbKi4/S8AdqmYzhl/jRQ2r4YpFBVWi2XoFey54UPREVoIDpjOGd+N3NquBPISwRieOI8s7EM9sjojfFVLicT0X54JSF3sVZ2nbjRMJ+/RjsVX3q0uhUPgAhzwLfEv7uoaddoQPwnANZp2VzXtFj9tf/uEsbPSD2C7pSzLEDzbKnfaswYxK0c3FyBNLM17Q7tI0yXIeyzDa37Eb2W5XJnBAboMH5ACDQNT5wtStwN6rTf6x+CR3ogwYtx4YS01lvmlR6tV5qkWM1YQTvDxucmgoeZSkKhjzSTAt/wJLI6ItLsS8RxtWiGLO2B+Ihjhmng/bsjbFRzEchNr7ZS0NKlr4Z8Wl9q2tbAZfYy6y5XRAhmu8ajPDWLIcQU1/T4Pr+OBdJXNbDr7OVTBlo6ipS5wf8zM/JZ/3+jd0pBNJeaF56fpYr3Mj2F8tXqZkj1oVaz8EDea9FP7wY4mPOxOiGcGmWasO97z+Q2o8TGTgaJXzWalB0A7RVZXrQLaOYo/5q/BjBTabgN/VtB2dV/Dcc4wPbR1CrGzVMFCOuuPXAVtt4W9yC4OsGf1x8z1JmmpwxdzbJhOz4jnZ2HjVv78tN8GEjmHVcb1g4P/NWkKR0F6nFgifMupVoTw7+gDuSt/7wcNpV41mp04y/YK++s9AozLmHxzCFV/M/TK/B4BGd5XKtLeJD/8pQJZz8tCWirfmu+DvfPM3cF+TrZZFkv1y82tuSzp2tF+oOlmxHRzUnDvkIukOkc/r5eFvv/jlZi+B0EvlYlw9aV0ekZE7wqxtCQvOByrCFqpdJa1ivsHB/9r0rwywjleFe0vDDDH8rzciqaMgvhTJ7mJ/W05PHh19ursjYyXMaEWxvJmLJV07QDz9ypFHFdfVn0N7MsAMHZrHPqZZrW0ZkZj54Zy/StjrEwIM/i1Qd3IvCZoQxczTN+Ru7pdJqwtULpPAAIK8JWaL0HMGFu/i1YF14d1FCfO/X/CIVLpLLvVLG4rEjHApOV505+DsDGtvn7aHG04iIjMgJQoTkeTBP5qAbIFTfkmLTX3fTNLzoCmfENqklhFvaBeQebGihWs0jYWEK9gM+oF8EcC5uW4B6k5FMB7niYiCCYe7Un4GDpHqopt6OPnhxNNuj9yHQYwZ39zFnFiiXC25F3kedPvArt6gi20FqfThvChfMmHI2UGX7C67AO/lWXQRz73Adny3gk8PE/MXJbmzP/3IU5n9DYdV6zCAM+PGq6Qg2lAnYwW0pkJq0ST/W/R4jzY/hU8zjrhvmNVb4nAj847oNyI74AffWkMzJqciTaDH+9/KKvT9xXpn7/2Fb+1Nox8JXKzfyUUL8+RCDbdKvyifhPP+bdz4Z5Y6C5n2V3tNGm6S5d3500/IF2eIyHg6dTpwKbvvIbnNOnZY1shT60MF1PW9HDire42wQdFnza7qUj4fvwi/0F/czTJFxrlIy/p9Td6enw/L5qZvDet/IwsK35DrZaJ1rwC0qHdbMQPfF8mVq5q+qEtkP3y+VBKX75CvdvtpvUf7pff9/g9ifcvdru3V5vS283cwamsnRPl9bXRpKaotUqXEnMzqz7uy+dNc6EN8FOmF/Xkx3p6fffg3xfEzunz3YPP68nL9fQf7Dlv4NNFQl381Zxo5c5fHqmANx0JaAtU2frVbHxZZrvdLv38KojF2aF9sdu9sRo23s7393On8udEtKFPo910qhgHssixfB+v73p6fL+wOFM6H9661aoi2QezhJRzG7Pz8p20iwz1oXwJjjyKcXJ+VjvmO3OMXqzga/tjdaQ4US8vOOBH4VbUOBqcPGlcUlG6TJ2G4Gmu9gfr5E7g5YWH9SFUAePIuD/tvDMuHqYt/wYoFNbDiygLWM8p2AzYlIusBQXRGxUQBRGsBdTbImulXnxBjl3KiEITbnKyBeoT8R7s3BrmxyrYWOs5Gae9i8i+mr4BtOpCPW1KO2Tw7kDqEabxCH1mdms/KrBf3RaLtHp/L1HnQYsat/a7QFuueew9O7em1XluZm3IcKerdsZunIeuQaozbuWrV5rg4fgeEbfC9uqrUecuzmNXwXS6LZ5dgTTXK05SX7Zg6rZ563Zs744+lqD0tXlaz83n6/tjmMCdCXy3AaYnvSqwXS80xsL8qpFYwvieQM0KjEvWYEDKpQCqS6Hub5JcA+AuSecEeReELFQlGTZzc/gtJJ+GDQ/iInC8y72uu4vmfYC48LGtz2C7sNf1enq7bEB9b+jsA/a17uMeFlV3jSM9PNcsvsQunKf3ChsuBJr3OlZV1dC8btZnmAx+ucaqqmqxSwWMz/Gvfqyqahfydk2HgGSh3TxV2PBxvHdEgObd3Av+AxbsEhEBPsW+RkQozM2LKiBZ6DyFNZyFsIo+GB4/PU/8Uiqoks5SpT17oT1r0ep7R0oHW29B12BBM2qCxff3YkGwNFeSsCpoRjOc3tiYTSjtnj9dTGAxT63poGQS/VxSMB/WUoCmW8dqbaB+ucqdRhC3DKXrdsQ5qG5IIYzjOgrz0leuD+nOYmG86Vrmy4zbupPKaqyXznTcr0i5wADz12AQF69PafuN//comAvNcUMbyzhakN0NswsCuXKjPVpoGpgnBbBVGasEzGXZ2MkWHaNCuyt+t5CGstwsupfl2tFkn5Zhvc7erY+vPyKfXiBA72S/ezBy9xfMgSevN7+3PoCw/A92u93ujTMFiwML4eZ/3e12b8QU2Dml5o+R3rv8gcZRFwV44LLlarfbNbLVBzCPZKr/8MBaC+FPen23e72kwFqL0AdAAUA7Ds93b5wpqgAUFnOHFAYZwEIBaHcny90uf0ZVAAoLhDdYqGonIrIluXo7vyfvjyLSKRQW82YeewdQhXYiciS5efF6SXIrIp1CFSENUGjXCR8UN/5FcbpOxtHxwaN0CgUWA4Bq18kdSd67cayirBpHJyR5J12ngEX4gmonQvLZ903ZF/9jnkfZ8zrK8/bUx4MjuZVOFYsAqHZCkuPmA1mvlnkTpWmU59+yWh/KREiKXKAIW9BOSCbnIo+irGlXxXrdr9fFad9kWdas4oGkdAqEPUC7I+k2fdtEn4iWq9N63ffr9Wm1jLIsWvalI++kU4QqQIT82riN6nx1GBLHx5VxiE/L7G9c9gl5FAXCHCByy/uheG9TR+26rEbhY4qrynUbZc3pI0KKAKEJECFfyyl7d7PsNyOv1g3xPqvbkjyKIrQBKqQ75HVzKhNecVIWTd30X0uKAmEIgAhZraZoPTjOUqpDPi1L4VGAcAaVe7pDVP/j5ciZjuWqztYjKYrwA70Imazq5gNm5OxduXxXlh8hRRHGIEfKIapXlXDmkhR11jtuBQg50E7ovrGOYkdvyua9mlYJ7wShCxByk0+rih5NiikqhXIBwo2QZTMVjt6VOMsOQgFCFXARjqspH+jhapnuR8pFEWIglHW6rOjt8ZTuR8oFIQp62XKI6gM9HmfRhnedIrRAOLbT19P75zoaKBeEJmh3x798yhN6flymPdkpQgqEVZRt6Mcqn848KkKTkJ9PC0cfSpGuhBJSINzUeUJ/ulV64FYxm1yC1/mKIJT9FNOn5+l9chSEEQjLunX0qxTpmneKWfyStOgD97K+Egjd71uX9O1QNwkFoQMQltNK6ONDuuZRMYMhqrN3J1hn9bRyVwChW9YDfVxFzV9EQcjARThMK6GvD+mBcsEVWYg8cwFcRBX28SGUth7o6yTKHQUhQ1jVraPP+28+Uy64IgvZ3gbvewFgHx+XO1lNA31e1a3cKcIEhGOUO/q+mAaK4oosNIjDPikg7NOSvh+mz/OoCA/QO9nXCf0vy2hkp7giiyBunxQqLNMDDRinZwoQHoS/JC1pwiRr5e5yZSEQ2jF5s6URT1NFUYQECIepoBnL9EAJMZftfftnj2ZweePYKUIBdCt5Lobgqf4pFIQUqPCQfsjQkMO0poQDqLBPB5rSRfv7rSKUQDsmb65ozPVHK3aK4AftmNQFzXlOz5SwIlxliTnGqJXjJRQI95EzCNvG3StCCLTjpj7QoOeppAQ/aMfq/zzQpNX0YUo42cpnGmcSWf6+cqcIfBfh90rkjMK2ka0ihAiHjx5o1LIuKUEP2jGp1zTrZiop4QN6lFXjzCJNK3eKoCcsssQwsmwpitAhTOqeho3rgRLsoB1ds6Jp4zphpwgfhzoxjYuKoGchLOuzccbs4xTYcAk9yrKlcVeNoyLIQY88Nc44smrkThEyhFV9Ns9Q/yRKsBOOzYnmLeuBnSJs9JEzjzSn4LfJSgMlWR9Glnsa+NTIURHsfkmWGMi1ex4voQJ6P2a9ic5ZQglw0K20S5q4j0Z2ijAhLOvBRGN2CHbCMSqMVGYbCmy4KDJnIslXQa/KYiNV0SF87JdiIp6WclQEuTIbZieac84KojnnLBQ3u7E5hQvoVv6hP4iz1Zy1QHLOmnNW0Jz10/rIsVMEuD5zs2tdCOHahNaFEMKZ61ZmJsuWW0VogHYc68NscgyhrxqFPYTehBBG0hqC2/OMznUS8L6XIs5+/+5j6Xah/jaxLDfMX7iZcZU7Srio6nI2/uxiLJc105Qx/MXEcmL/ZWJcVjebISsDHPQoq9wLL09h/bLctqkH1s3IThEWLISbbJjRUgPNuSqwvxLA/mphP8+zSaKYAhvg9q23fMHSC32UhI3zu8erY1YjwPaeC9qiGVIXz+ZPjPpAt5V274km2yxf7BBVYSOOEk+kpQLqewd5MONsxmYd6G7d8uSB6X0uS+9hf7shVpU34mwIG/+3R7Rz8sD07uP1rjlb1xQB78cVHtjf1bQ3+mevj0Y/DNNedodZnQLecuWFV6Kwfnluw9khSjzRniMP7K8ZZJ3GGRWB7ijt3lCHqAobcVR5onqnDzG+vpnJ2PQBb996K32dvknCxjkbZlVD3s9BPuS7epxJEh0C3ir3wndYjamU8V2Uv/DAuhnDBLTjJtvM6LWs69oNws33XPDrWk0fSs4oDnAWwiKS2aXKObeOQlvlgvgks1stOypsmEjq82x0K11Zt8Jt2uyNH5xzteVsN/WGnSLAHbJxdsgtgPBlJd/zGDJc1s8GRIQPi4jw2XGdBLxNtPHAjzhGBQU2PEK3kp9kRj/qOnIBL4kORhqyOFxYCFdLM+2XclTYwKZ0zclI53oIH33kTCTRiQIb4I6yWoqJisixU4SLTTaYqKp/VKCzEMZ1YiCXrygKGyb03kVrEx2yJPANWWygKjuwCxcWws8sTbTK5aiBTunylYHi7Ps2YSSuR/O4aE2BDXAWwiJKjCP7JY8KGzaSNw/mKesh4EE7DnVsnKSOKbAhEyJtbp79j3O3GvTun+U/3ziHemSnCB2M68o0Y9ZTYIOchQr7ejCMNHuKwoaPMStM02dJCOg4Rv+EYeJpoMCGTgiLejSLa05y1IBncRH2WWKWpqXAhpKkLsxyyCoKbNDTjv/Vm4VRynoIJxbCok5MMjbfKxQNfBYqXE+VQSTay1HDCLRjUhcm6euKXQiw0Fv3xWkNsp4GCmwYhQr7/30wR5UVFIUNfhbCMj0bI6kLCmxI6fhzmqUYY/+JkV04sBCuMmcIaaMxtFiocDMdTFGmZ4rChoUxaw3RpyUFNqwCwqKuzJBke24vsOHAQlhOvRE+khY8XsKLxWUreeNMIHnk2Gl4UOH6YxsDjNG3yN0FNsRox6RemaD42EBR2LBgIZS2rnznltnITsOMhQrP6dp/h/RTFMCGBwuha6LEZ9LWA0VhQy0g/L/Tg9/OaUFR2DBhIRyjZvSVrKYNBbAhF7plkcb+KqcV7xQ2XFgIq6xJfOT2U0mBDb9Q8pTGfjpPe2EXPiyEr01RVvnGLaeSAhuKOrJIe/80H1sJRWFDh4VwzOuNT5KmHiiwoRgqd+zTk/hknf7yE9kpbAixELrPTL0vznVUUTQkWeByZDwtEz+M7XTgtlPYUGIhlH5qR89Jke5HygU2NONy5PCF+uy9Mos23F4UNqRYyDdxE2UHj23y+nBLucCGaFyE4yrdJ94aT9P/OFIugA0tFioc//BpOXhoXE1txa0ANlQDQjlH7xq9847EWRYL5QIbXE1gASE3+bQaxBvJus5ioShs6IZsORZTc3becOd8Wv2DvBPAhhtrIUI5RPV+42YmVZHVxcitADaEQ4Uc2qmJk9mNcT4tN6QobKA1hAVkS4mbaXmoZpLEbZ2t/yJSFDacAyLksK+jU+lmIWURfbTdkCKADUPWQuWO8kqzz6L2sHFXIkP850f18v3NSIoANrQDIuRQNH9sXvyRydUkZZHX0WkgRQAbdM1hARWS1aGN6mZfxIOTrzh5mLik7E/LN7O8GISUTmFDPbQT0pWrps7aU78ZRR4mMm4ORRu92bysf+lrSekUNvgaxFpo1x1JqV6hyKMsy6KmfTCPsiyK8lM8OPJOOlXYkA/VTkiOm76NsiyLomXbtu0yyrIo+pFtvxlJSqcKG64sVLWTO5IuGc59UZzyF9GqKNbxRxJHkiIKBWzoB1Q7OZKUsSoPRfH5fZruT0XRl9UoJI/SqQI2bFkAChURPlyG6Cx8+FGkU8DCLgQBhYrIHR/u2r3c86F3IqJQwAZjw1hrYQFA5aH8KVHJozyoCijsAhEWAFQeytvP7PnT5aEKABY2KJvn4XhQO1bRmYKHWwu7eMRD9U7a/f1W8VAbrE314OPYRefj2AD+1H9P/ffUf0/995Rfz252XOSeSVSScllw4HIk9ytSFIsE6MVJFf1L4p4pFhzqxH1mL+IuiwTorTs10Yu6acf7CxYZEH5b0zx/3kTnW8Ei4Sinb8eDSznqomN4fbfb7V7fcLHQcax3u93zP5gCu9DQI08PrLjVoAezqrB/Y7fbU2DWoACjCpN0t0srCow6j6Bi1o5jvXvxqiiGRSAAxKxHfn63+8O5FbMCcwfa0biH79CcaFxBAMBFaNpxShOaVi6YO5+W5F+KPxyb9Nynp/OHY6OeKxEEAHGbD8dGPZ//xux8jo36ozZO5o4eefqi0Rg2b/LGsGn+Q6d7xbyDcJiyvDFq/t40eWPUPEsHCubNVtrm+2LaMTHtPnLsFPOvrMvEsOOYGLZMy/nUMuium4Dwk6KEATep59Qy8BRB4edmVdAZnvrvqf+uVlv9vGSQq9OkX6uqrl3sFqsWfJyeNvft521rfl7TtV9K8kiuWZLpyt54Uhifd82fYfcMVP0nTK/5a0XTdUvsPNJaELkReUr7iDwgBc17vjEFck8eac4CeYY8hU19zSImCLdyJJCmGrZqws86xVrvhPmIg7+xYxyOgrmKo4XWfK9VW9RWcUuAHlXc/I3dyma6yfswzEDb2qrSG523YfOAP3SKtd7Mcdhcu7C9R7mxYUPGUJW/Xps0XbmapdSCtjOrWYIHb0Jcl1GQultjCImm++5MUzB1ZujDDHsfq6u3YM1p1uvVktd+c1cDY3Bh9TeTidXVe5i6cjVLqdB0l2leRNctuXyZRsCaDXtuEJ3SvKOV+j0XvYwnLVHEBQ/bOTOflWAvIzSvQ4TKqO2ikk3ItC2ks0aGpcWvr5bq8jBcmfp7yCo3bQt+2aB5Ryvje8Z2a5bzi+y6BZ36t7NkM5LeE9QmM10JbGgK5msGyk7tuQH5rKhOC4ynp3nNcDO9PDC9Z0Cs7wY0rEBzthpWm/z4mhkvy32x/oowXR58aDjeE7Cpr11At+9YoGH1RzcIU/CQzZ3QArHLbdcAukSJRoHpbGleR9F2ZaB5NejonHlv6OUKUr6WsizN6hlNvqO1c+Y9wNRbsKbheE0g1zJIuOTGOlf2MVNkP5bO/eYciFcG9jPRvOaicbE375nYNWleqgfa3LlsrVUeGpbJz12EKfiHeO2iVkCvnpujb71XPrZsIL2RfDpgPifG9wxShkzzvtO8G6BarFwD2BsTBLZXK72h+AENEfIH2vcG43Td4l3c97hM2FBhwxKH2Ah7l8CGqejVjfNwHrAtWzt1q2JDaNrhnCAt7kgMIevaNe22jIi75hR/VTC94jxer5lmiW1b70IVbJGU3ZyGXxH27iY0aHnuR/siCwVqBdAsz1NVLRC9i6jqHzFp+mUJDeQ44U2sx6obOUoLOc4FaZjKPuyA1L0J0QLehb6fAPYrTOyDYmNvQi2Q1r6syx2kDn1shhaa3piwwx61CO/6si5rOEoLOc5gy8sU/SoE6G6MO2Dq5qcl1wc3zkAyoV9NH6Ica9/HwwUuUO8VQIV4AfS9iAKoFIiiyVKYW0+xT0qh9YIqgG8zt5I8ogA2CSqAppQBVe5L8oiCKIAKIMmSjsFvW+JYDsrh0tOm774s13MTUizX7865TeK3G9y5CmAPD6/J+/3a+UMY4OwSASvcVbknD5wJ8vYaAXI3ApSXIi4dA12uTOnMLv/M488bwFceUlz7PjQyTWm9Kr3XApguA7bbCroM9VQFOsR6b/mDGOAkvke9OboZH8p5+NUnGV5uiGf8wH4eN8sdL35tJdgFygBHLl9hVziumfr04EaI5yzEJT/Wnvsj8e3KZSl5AwBm93aZOczsi0dMhUQHNL39jHPcx74ebgTA+D0WpKU8yq69ETjMB/ZzfqS8MvjnS7kZoO9YMLkxxpY7zUf6Sx/qLNBMLqzJPx/4GZjfdUFl2mTlGQly9dp56FKYX28lXORckFv9vGmUopTkT97cm3XtXOboZtqzc87UIqW5CXe+w7qabqeoKvg26xqiiqFC3VCwn8fnDb0WSB/0T57MZd9vCn60jOvctuPZ0OxAGrXAx9XEPVGo43FzlKtxk2PIuEyB3+3nVaaIppE/eSCq3Aq6RMCeNQiAUCyiwn2hUFQFPwacsBaICirYpIBkAbKiVgCrRava1gKqoEpuc4FtkwKqeC9Zb1T/7Dwq5VXPk3OW3/Bg1K4tW7X3rzWBdS3oOtJeOxx9W7CZ3byvA8YoTHFyZzhAa2OCSbDHvetTWQHeTH+e0LqMZZX5s3d0B8PbTXtnlBQOyN2AlEvWEKXove6T6TyDEfa32SezeOyw+zkYZXz3daNDZ2F/zX+iAOE3PhjNYWboPIydx/dzEbaLVbAUVl2CdI5Uq7CfDczLgQDsr0R9HsD8mhBn9M/Vb35wiqVAY9JDNOd5cGcVyFcs6i1404DM42bOxNgroL3DdjU/55zC8ZH59Z4f0Jvhji/S2FdjvyRGkwHGLk+X/5nmPtLchOZONuVq9E6vYLuqKNxplkaoz8TYF9iuLkt+ppmcbWa+ZuJ60yfy5VS37wrZOp/OTQq2d6W6nS2DEeqCvmE/W8nrK7GFAuLSNT/T1u9lOdcid4f6NGvsN9quhmFJBVVY3XpuMKwPWdNVQ+gSY190fnty12gyb9tW7eQm084C9lCgGXZNibQr5L2obXM9TALtDL5R0MOCHavDNpl0SMGYtrxGM3H8vLzRIVEmNzv6DW90ePmp/55Ool2YRIGnmle5iDOpiBNnVJFTFBDKehBnVBERZ1T5q6d5dLxdvWhMGzWmTfNnwWBIs7wJtHn2fDN/ILfVJ0+fM2qxf7EsPv85k56Kza0o7LyHuL/8dPqcSYvPT3VRfM6kp9PBCeycsdB73tOk96yikma9JwWw8x9C3tOo8j/+XTSuwM4dCzEtq+jbeBTDwgZCiGEp7Z4/XQwLO4cszKodq+hMgWFtQIRZ9U7a/f1WYVY7l8z6OHbR+Tg2gD/131P/PfXfU/899QZCGbAwAhRhXBULIqh2Esa7ToFFELQ7MqTLRbH4wUXIZFOG8MHxrlMsfoTVso7+ofwfCtl5k2Vr4eIHwiqLDpshhJendCVHxWIHev9zltHIkB6nZ8qiR1jVPUN73t4vgMpsE95OkWwVi55zNoS5biG0eeq/390FwENp189qJy1Q/bFU7kjTPkP0K9jdFsk+TKqKHMfnYUEDVTxJGe1NW9mPjYv/rOHKNxrX/CO1XX1HzSAfk8HYL9Ccc1G9xKk1G+KcfBYECxnIPUWeoH/PN3uXPradD80xPyF2BTJWP5QvG2gGKeAJdZW/wqtIryjYYfoKIhQsSJ5QXDKST3B4tzdTSCCQtUgz43KjOQOyvVsVQLMWqTJcBYiCCJIFJEuB5lykOasKoFmLRAUQuRFQQeNiFVkrVB+QrIAogGZVFQRUiyTnIs1ynAWSlkoFFaQsbzRrgeQsHxDyTx4FD11o/EuUJ72TVfSjHJ/g9YAdfR1Cc9OEUA+LR5tyNaNSn786M8NcrqYBZL/C7u40ozKPKXbR5upyHrQpVzMqkOLa9+GAuVzXoyCXDWhVA/VI3maq1/flPGt1rGGXIj+s7oBmU6Rxa98bK+Pc9GESwA+rGRVoTbeNRSl8n/3B2NxJcTW7gK1WN8kjQiZFVlIevsjY8Arb3Rv52W2uKHUmRrMc0CwmludiaV3VVMtGE97r0NJ0QxO7CfZzje4dioY+M50mlp1xsexWpXVVUy0j+KtsyndoabqqGbrmRnsn+O+gSOfw18jevV3lWRc3rOdYkI2Zxh2qYGm6rTFvlzVc5bCeE/hgmrEbhLYLseyKfPm+YiuhKmpD2VTdKOL6qd71gYbJJ+vd2z+Xj/kX7m8XE9Of2V9httvt3sjbbLiaxSnS96KhF9SdnpyB4VL200IOESiD5K6E3F9FlclMrxHqXxU0XUu2QLyU8cyI29EwAGtQgG2xNK9upr0OfF9D1QFiLg+r0Zv5nLjdTGYNkMxMDiEjoYQYBKbTi+syDEXkZQM1W9G6AtVidRl5ePzoatrtdm/s+0d/49Ry4WCht6796FtPnGUvdrvd7u30qsIBVKfaswLqxQO2mcyVqc8E6XTTPvWLptcODA/twcL+StCGA7BNY65coKYivdy0T9eSb+alkcqZkTHkomFRkLUCxjXf5PXa8x0ToL0acl8DQynaX9M+De9ZQwkcd+xSPYAu/bRP6ztJ2dX2oT/++W63272dZtlbD83q+kCBXTBYXMQl1RMnyXK3ezv6UYds86i+qPnAcjMuHq3WslyCFrVnqIYhjtKeN/EZLcxhRitTlmfItEs5rV1L++qrYYi13EgY8npsTlyUjwjUrgBbdX1zYxnPbb9MJvcjUEXRcFbDEKtc1DzHLlc1DHHL5O26Jrm3RcMp3e3eOCT/X/XIxAnswsFCeKXtLvrU17J8nMN7vtk6SwoNMJxqz3v7udscr0x9emhfo6oKFA0f8A/t52RzvDL7OsbYQnqNqioUV+thdO/n0PCE8Q6kdbFsJjPErawsjxlVVdDggOM5+YyqKtx695of+JFkdXr+RsnHlcsiwkK6Jz+6X9KPJM+Pk3RORfy1Kul0igaHhl7J5rRUl0XNzTuBvZyACLZzir2eMcN8zQxXRs2VGdbWW4HclQIiRfPSl3hjjAUfbs4MYgrWAlXY3y1bn8UMyWe5N5RC2VlAENdZNL6K/PmI0PcKKKLQfE8PRB3JodjcS/dohV1EWOgVXoQUeTzuZ+/cFRKkrivr9WqhOd1Yhs5zLGVTnVem7cw203Rur90O9VmOruttwdBn9stD/b7pDo6lbKozWOazc27dhaZzU+0mKdDrV424X6XcjHCcbkxihhtT0MZx741SBcv4Cm51MzkUKT6Eei8rpV36MfbdUfQaQEOFOCe0l9n3chQbx8n0/qGtHElR6KNhFxMWV/kVVhE8CbMLfZWB1O/1GluAZnW7ry00rtyPUeFYXQtt6dzggX11TdpzQVMr7ZihjRb85qFZy70ZVTbXpnY7D5hL5wZP8V56mN0M5HEGJhM9dQPMu97o6NyW4ahV3ZDa2XVexhloJgFbra48gNatta9TQa4a0PFA9glI0bnYIrtzleUxVZFPw+LRdlFxpQCe7MEUDp4pfFD4qgKg5wCkcwcQvrpQfLwPoH61fFD4gkKx8GgBABsG55K1dgZtNz3lxxZ31c2+unzz4/pgpqbuN/3ID1tkw2HgsFv6zSHXZSw3yw/uqxjLXfnpQaGJdXQ04Dg6GnOhFY6f/mq42fGT3izD26qR4+IneesU2iQ6UWAXOyosptiFs3FfVwsfC6Xbp8vTaRW6T6uoPlNgFz4d7+M2D+WrigK76LHQbku6MN6RArv4sVCVI0O5dLoQsgC0C+WqsAshay00lAN2YWQRym24nHfXwE/9dzPghuYDv+aS86fLTc07tn/nr77k5P1NTbL97vz6y//a3uR8/kvzg/iN+bX4tbm5+U/9hvzmAAA=)
> 
> **主机签名工具工作流程**
> 
>         - 主机工具需要 `efi.bin` 和 `dtb.bin` 路径（绝对路径或网络路径）。
> 
>             - `efi.bin` 支持 OSTree 的包含 `vmlinuz-x.y.z`（Linux 内核镜像）和 `bootaa64.efi`（启动加载程序镜像）。
>             - `dtb.bin` 包含 `combined-dtb.dtb`。
>         - 主机工具需要 `certificate` 和 `key` 的路径（绝对路径或网络路径）来对镜像进行签名。
>         - 主机工具将 `dtb.bin` / `efi.bin` 装载到 FAT 分区上，该分区提供以下目录结构并遵循其单独的签名过程：
> 
> 
> 
> > 
> > 
> > ![../../_images/1_efi_bin.png](data:image/png;base64,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)
> > ![../../_images/efi-bin-ostree.png](data:image/png;base64,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)
> > 
> > **带有 OSTree 支持的 efi.bin**
> > ![../../_images/1_dtb_bin.png](data:image/png;base64,UklGRkAEAABXRUJQVlA4TDMEAAAvVkEoAAXdbNvq6NFbwlcCJRA6dEgJCh0qdKhwQ0qgBEpQSAmEG1ICHXBdv/gOGs942ONE9B+2JLlxm4Ffbu8C1AE5wQeMj7FRljH+1MAyxo9lxv2xgPHTxPexgNE+/vM/E0RQW1ICUJaUA9SW9eGP/3z85+M/f1WIiP88QEgyfQvloVSg3hBkMHiTDZvF028caOYKEB5KAcrDBOF2FgOCxdP7oBHSc5FAD4eQ3gZqPBcReDhA/KeHshNoKzPnRoA/2gyh9uhAe/uStwH+lIgO4GoJSZSJjZ8E9OgheRpMlIhN0IY5gmJQT9YGuDhTwaLM9J2uVL06GXPk6QyNiaDMXCaadfQ4C4qMwzO1fJEymW6WWSeqg6yuMRm7iCZIQzOoZncK7w1IqaqvTQF8HT2CvtiBo42eCagzQOx9Bwi+jOqBLuhpo3igMiSZIxPctPbdtFnVjZUvAGlcqmQUQcod3aCarDbaBpjugPLsvb80ntku/soFE12B/YKvTgf4Picrcz1cn0Zm5bg2/cQzGrANyVXzMoogBd2gUn+aHCUbVJmk/Mo0iKe6O9AFBTMHM4M+lLodPK/OJIfttD1PwbwJHlz8KaMIUtANSnRBjjchHHf2J+MhMbkXUmvqlRJQ5yxxhkYUXNrkzEAM2VWRUQQp2AzqwoOESdKLIq9/YWGJCfv1NBFvIbHD42+EJwmJ8bRUadGM8XbJQBHw8p326xkyd+68Kar8kg0kKHDjFuKhyt/BwcvsXPz5hVWQgm5QKUe8/5IOHC/9Y49jZ1/VTZtM4kWOd0Hmp2R3OOSySa4qXdwTlKYDjW7QlKwdDMKhflAEykuTgHC1IYRp0SHObYjrt0Hs4yRQv0MjUGxj1OTSXATKo6ttiE1QAfbRTpPBAM8WwNau/oYTriKejbchoycgvPhPk7vY2FbPRLg67iF0pjiHGbbsedcsyiDljlHQZD8YDUJO1nYwTrFpzphdtFf/xTcHgPY5jz2FK5GpD+WqdAKp13LafB2lqnIS11GlSzwIzNRo7NqLQ+X5tQq6TLmoGFS/I3vA55GxjfnmgXBtkXDT1uOOvqx/n/Dxn78y0PcFjG8WFjGWllWNj/98amHDppFAj5vVtzQEBI0IGAGiTAHCClGB+mAaIa0QBSiPQI1/ZLkx+U4Y8QIw6qSpM+7N6qsg9q/g/X1jnXxnIjNNnXFrVl8BMs0q3/jNOPnOdAf+HD0CG0ef1acAypPK/X3vym2T7yzwBb8BjWGe1SePcQlw7xvj5DsTnW9Imd3RZ/UpnPwIuwj3y523Gc45zGO6ZL3lX4Q0IN5/yQmcDH1W32pwa/JdBU71gwKoM/RZfYuCcfLdVcSeeRtSRttZ2SKo6bP6FgXj5LtDapoD0+TZTh9Fn9W3KFgn30UHuiQk7OO8NKXB6kzNPKtPvuxeQeP/7WIAAA==)
>         - 对镜像进行签名后，主机工具会将 *Auth* 文件复制到 `efi.bin` 和 `dtb.bin` 的目录 `/loader/keys/authkeys` 中。
>         - 主机工具必须在加载程序配置中 `systemd-boot` 配置等待时间。此等待时间将停止内核加载，并允许您查看和选择 `systemd-boot` 菜单选项。该 `loader.conf` 文件必须在更新的 `efi.bin` 文件中可用。
> 
> 
> 
> > 
> > 
> > Note
> > 
> > 
> > 不遵循 `dtb.bin` 文件的签名过程。
> 
> 
>             - 主机工具将配置 `/loader/loader.conf`。
>             - `loader.conf` 的句法是 `timeout x`，其中 x = 超时（以秒为单位）。
>         - 对镜像进行签名后，主机工具必须从 FAT 分区中卸载。`efi.bin/dtb.bin` 将已签名 `efi.bin/dtb.bin` 的主机存储在与目录中的主机工具 `signed_binaries` 类似的路径上。
>         - 以下是已签名的 `efi.bin` 和 `dtb.bin` 的目录结构：
> 
> ![../../_images/efi-bin_and_dtb-bin.png](data:image/png;base64,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)
> 
>             **efi.bin 和 dtb.bin 文件的目录结构**
> 
> 
> 
> `efi.bin` **签名流程**
> 
> 
> 
> > 
> > 
> > - 主机工具使用 `sbsign` 实用程序对 `uki.efi` 或 vmlinuz.xyz 和 `bootaa64.efi` 镜像分别签名。
> >         - `sbsign` 需要 `certificate` 和 `key` 用于签名过程。验证以下句法，其中 `dsk1.key` 为密钥、 `dsk1.crt` 为证书，输出文件名与输入文件相同：
> > 
> > 
> > sbsign --key <key file> --cert <cert file> <efi file> <output file name>
> >                 Copy to clipboard
> > 
> > 
> > 
> > - 示例：
> >     - - sbsign –key dsk1.key –cert dsk1.crt bootaa64.efi bootaa64.efi
> >                     Copy to clipboard
> >             - sbsign --key dsk1.key --cert dsk1.crt uki.efi uki.efi
> >                     Copy to clipboard
> >             - sbsign --key dsk1.key --cert dsk1.crt vmlinuz.x.y.z vmlinuz.x.y.z
> >                     Copy to clipboard
> 
> 
> 
> `dtb.bin` **签名流程**
> 
> 
> 
> > 
> > 
> > - 主机工具需要文件 `dtb.bin` 的路径。
> >         - 主机工具需要 `key` 和 `certificate` 的路径（绝对路径或网络路径）来对镜像进行签名。
> >         - UEFI 安全启动需要使用 PE 格式的文件进行验证。无法使用 `sbsign` 非PE文件（如 `dtb`）进行签名，因为此签名工具需要 PE 格式文件作为输入。
> >         - 主机工具使用实用程序 `openssl` 对 `dtb` 文件进行签名。验证以下语法，其中 `dsk1.key` 为密钥和 `dsk1.crt` 为证书：
> > 
> > 
> > 
> > > 
> > > 
> > > openssl cms -sign -inkey <.key file> -signer <.crt file> -binary -in <dtb file> --out <output .dtb.sig file> -outform DER
> > >                 Copy to clipboard
> > 
> > 
> > 
> > 
> > - 示例：
> >     - openssl cms -sign -inkey dsk1.key -signer dsk1.crt -binary -in <foo.dtb file> --out <foo.dtb.sig file > -outform DER
> >                 Copy to clipboard
> > 
> > 
> > 
> > 
> >             此命令将 DTB 文件的签名添加到单独的文件 (`foo.dtb.sig`）并且不修改原始文件（`foo.dtb`）。因此，主机工具必须同时保存两个文件，`*.dtb.sig` 文件在 UEFI 安全启动验证期间使用。
    - **用于合并 DTB 的主机签名工具工作流程**

> 
> 
> 要使用主机工具合并 DTB 文件，请执行以下操作：
> 
>         1. 准备 DTB 文件：将要合并的新 DTB 文件放在 `dtb_files` 目录。
>         2. 选择操作：在 `config.ini` 中设置 `operation=combine_dtb`。
>         3. 与旧 DTB 组合使用：
> 
>             1. 要将新的 DTB 文件与 `dtb.bin` 中现有的 `combined-dtb.dtb` 合并，请设置 `combine_dtb_type=combine_with_old_dtb`。
>             2. 确保旧的 `dtb.bin` 在 `unsigned_binaries/` 目录中 。
>             3. 主机工具从旧 `dtb.bin` 文件中获取 `combined-dtb.dtb` 并附加目录 `dtb_files` 中的所有 DTB 文件。
>             4. 然后，主机工具创建一个 `dtb.bin` （vfat），从旧 `dtb.bin` 文件/目录复制所有旧文件/目录，并将新创建 `combined-dtb.dtb` 的文件/目录与附加的 DTB 文件一起包括在内。
>             5. 主机工具将更新 `dtb.bin` 的内容放在 `unsigned_combined_dtb_bi` 目录中 。
>         4. 在没有旧 DTB 的情况下进行组合：
> 
>             1. 要仅合并目录中 `dtb_files` 的新 DTB 文件，请设置 `combine_dtb_type=combine_without_old_dtb`。
>             2. 主机工具从 `dtb_files` 目录中获取所有 DTB 文件并创建一个 `combined-dtb.dtb` 文件。
>             3. 然后，主机工具创建一个 `dtb.bin` （vfat） 并包含新创建 `combined-dtb.dtb` 的。
>             4. 主机工具将更新 `dtb.bin` 的内容放在目录中 `unsigned_combined_dtb_bin`。

> 
> 
> ![../../_images/Create_sign_DTB.png](data:image/png;base64,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)
> 
> **创建/签名 DTB**
- **多DTB支持**

    Qualcomm 支持基于同一硬件 SoC 的多个 Qualcomm 开发套件。例如，QCS6490 开发套件变体包括 RB3 Gen 2 Core 套件和 RB3 Gen 2 Vision 套件。

    每个 Qualcomm 开发套件变体在内核中都有自己的 DTB。在启动期间，UEFI 根据特定的 Qualcomm 开发套件变体选择适当的 DTB。为了实现这一点，所有共享相同硬件 SoC 的 Qualcomm 开发套件的 DTB 都合并并存储在 DTB 分区中。

    **生成组合 DTB**

    为了实现多 DTB 支持，所有支持的 DTB 会逐一附加，从而生成一个组合 DTB。

![../../_images/combined_dtb.png](data:image/png;base64,UklGRhIEAABXRUJQVlA4TAYEAAAvz0IPAI/iqrZtVVlHnmsEf2gS+kISlxAMPr2Gq9q2VWUdea4RFCcBNCXQS4BDCAaf7qq2bVVZR55rAncgwYtAer69AgUYzH8A//+/NE1FUURViQhVZWZEhJlxd2VZUlVmRkSIiCAIiAhVJSJEhIiI49jz2WAEnKxZsAHcscbrdROGdyzBFEvABHDBDXCid/X9/jweX03TqetaXdfMjIhwd3Vdc/9gwABgdgfcJwPghjvgihtPHAGTDYI94MAIuNj9wR1wwoARbLcLmLF+OC6vmGJ/BUewB+sDO0CibdtpGz11sMzMTZkhndB4HCgFZ+b//yZ+evLTulpLg4novwO3kRQpfYyV6cWDDxi5bi4DrKvLEOv6MsiK2Zaa/HXxaTnA+jAZoOr02HKA9X48Yls6cZqf8x0TYI1fBqh6/dEEWEtnEdvSs7OR/4z8Z+Q/v6156BOvuc6XjGKfxFovCcEaqzWB+z2iZlkNlmvx+EdKRKs1NViuj0eWqxa4lpqXNAtVjji+kVCbpSyHTLMsB1kvcQ5T8gKU62sqxNQC5doSh1sHVEulma0ZidBaOcfCyxGszW4dEPkByrVFQiVKUF3bOnBaalGgGGQjW6vvpzRMYC+chCUVoz2MckBWlh7RW9cLUK6v9WxL4YkvpHVAubYamet9n7mqgGopXwM2diMQu4XUqObFytIsZ6xVTM8LSK529TyA6PqaqkFT7Q2TFCIQaRW7oUKaoDwB5CpQ8ACQq4MNowJMtZUFiEGkCOsl3co4MV4BcnWcbBgdeK7FZ7ZE14GjagdJTCQirG5zYVXjq/ELmqv9PokSGFdHkLWq0YGlWsiCRiSmp4W2Kn7BcXWeK8FxFWlsV5RAqb6mw3AxTdbe8BD9CixECDA9R5B2APBUPaYYxVfaxvrEbMPrFTjXArEtaC1442vuBkxXdQVJtWUliuKHSLF8PgTJVTyqQRtfOxq1VQ9BUi24vraMQApsismJtGzz+UJgri1+1IM0vt72FpbOkFQdNKrR+D0O0AmWaytlRw94HV+cEyTVVlyePB5pvww2j13vNwO5CtOhD5Bci/3VWmmYYo+UH04uncG1FOJmQbCRsJatVdhP1zZL3Lptv5L1Br4AUwXH8ducfDhXvj3xB0I6gFwdqtTWgeRa7BMvdl0FUEtRcH+hWmCtKva52WuaOVmvZMfwBJpqKGyWjJJG1bjY0AHk6mJDB6jrZkkHUEuRSUIkCRbxt+ydkjEOnMHYet/rCZRrwd8J1vg+730f8jP7IkkHjqqDdbArZYgrYKq/n//nNfKfkf+M/Oe3OCuXAdbn0wBVT95dBlhTOxHb0h0Ft8sh1sx8gKqLs0EO70yIrtMLIbZ0ajnEujR/U5cB)

    例如，对于 RB3 Gen 2 Vision 套件，以下 DTB 组合在一起以生成 `combined-dtb.dtb`。以下代码片段来自 `meta-qcom-hwe/conf/machine/qcs6490-rb3gen2-vision-kit.conf` 文件：

KERNEL_DEVICETREE:pn-linux-qcom-custom = " \
                        qcom/qcs6490-addons-rb3gen2-video-mezz.dtb \
                        qcom/qcs6490-addons-rb3gen2-vision-mezz.dtb \
                        qcom/qcs6490-addons-rb3gen2-vision-mezz-hsp.dtb \
                        qcom/qcs6490-addons-rb3gen2-ptz-mezz.dtb \
                        qcom/qcs6490-addons-rb3gen2-ia-mezz.dtb \
                        qcom/qcs5430-fp1-addons-rb3gen2-vision-mezz.dtb \
                        qcom/qcs5430-fp1-addons-rb3gen2-vision-mezz-hsp.dtb \
                        qcom/qcs5430-fp2-addons-rb3gen2-vision-mezz.dtb \
                        qcom/qcs5430-fp2-addons-rb3gen2-vision-mezz-hsp.dtb \
                        qcom/qcs5430-fp2p5-addons-rb3gen2-vision-mezz.dtb \
                        qcom/qcs5430-fp2p5-addons-rb3gen2-vision-mezz-hsp.dtb \
                        qcom/qcs5430-fp3-addons-rb3gen2-vision-mezz.dtb \
                        qcom/qcs5430-fp2p5-addons-rb3gen2-vision-mezz-hsp.dtb \
                        "
        Copy to clipboard

    **DTB 分区**

    - 生成一个名为 `dtb.bin` 的 `vfat` 镜像，包含组合的 DTB 镜像。一个名为 `dtb` 的专用分区存在于 Qualcomm 开发套件中。在此分区上刷写 `dtb.bin`。
    - UEFI 解析位于 dtb `dtb` 分区的组合 DTB，并为硬件选择匹配的 DTB。

## 分区

本节介绍如何添加、删除、修改和重命名分区。

Qualcomm Linux 提供了预生成的 `partition.xml` 文件，默认使用。预生成的文件作为 `QCM6490_bootbinaries.zip` 文件的一部分。当编译启动时，使用来自 `QCM6490_bootbinaries.zip` 的 `partition.xml` 文件，从 [Ptool 工作流程](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#ptool-workflow)图运行步骤 3 至 5 。

为了添加、删除、修改或重命名分区，Qualcomm Linux 提供了配置文件，这些文件定义了 UFS 设备的分区。配置文件位于 `meta-qcom-hwe/recipes-devtools/partition-utils/qcom-partition-confs/` 目录。

通过修改这些配置文件并将其集成到build中，您可以生成自定义分区布局。当来自 `meta-qcom-hwe/recipes-devtools/partition-utils/qcom-partition-confs/` 的配置文件用于 Qualcomm Linux 编译，工作流程涵盖了来自 [Ptool 工作流程](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#ptool-workflow)图的所有步骤。

下表列出了用于分区的文件和工具：

| 文件或工具 | 说明 |
| --- | --- |
| 分区 XML（必需） | 定义 Qualcomm 内部 XML 格式。 |
| Ptool（必填） | Qualcomm Ptool 将分区 XML 中的信息转换为 GUID 分区表 (GPT) 二进制文件。 |
| 分区布局文件（可选） | 以 JSON 格式定义所有存储分区。 |
| gen\_partition工具（可选） | 读取分区布局文件并生成由Qualcomm Ptool处理的内部XML格式。 |

JSON 格式的分区定义（.conf 文件使用）、现有分区以及生成 Qualcomm 开发套件的 GUID 分区表的工具如下：

Note

以下分区布局和示例特定于 UFS。

- **分区布局文件**

    设备上的 UFS 被分区用于存储启动链和 Linux 操作系统的各种镜像。配置文件包含为特定 Qualcomm 开发套件配置的分区的详细信息。对于 RB3 Gen 2 开发套件，UFS 分区在工作区中的以下配置文件中定义：`meta-qcom-hwe/recipes-devtools/partition-utils/qcom-partition-confs/qcm6490-partitions.conf`。

    - **分区布局文件语法**

        文件中的以下示例 `qcm6490-partitions.conf` 显示了分区布局文件的句法。

        配置文件中的第一个条目定义了磁盘类型、磁盘大小、逻辑块寻址 (LBA) 大小（扇区大小）以及最后一个分区是否应该扩展到最后一个可用的 LBA。

# select disk type emmc | nand | ufs mandatory
            # disk size in bytes is mandatory
            
            --disk --type=ufs --size=137438953472 --write-protect-boundary=0 --sector-size-in-bytes=4096 --grow-last-partition
            Copy to clipboard

        文件 `qcm6490-partitions.conf` 中指定了以下分区示例。LUN0 中定义了几个分区，每行表示一个单独的分区。

Note

在以下示例中，`firmware-qcom-bootbins_1.0.bb` 配方下载来自 [Qualcomm Software Center](https://softwarecenter.qualcomm.com/) 的 `partition.xml` 文件，并从中获取 GUID。

        - 示例 1：为 LUN0 定义了 `ssd` 8 KB 的分区。此分区不需要刷写文件，因此不使用 –filename= 参数。

--partition --lun=0 --name=ssd --size=8KB --type-guid=2C86E742-745E-4FDD-BFD8-B6A7AC638772
                Copy to clipboard

        LUN1 中定义了多个分区。每一行定义一个单独的分区：

        - 示例 2：为 LUN1 定义了 3604 KB 的 `xbl_a` 分区。该 `xbl.elf` 文件将刷新到此分区。

#This is LUN 1 - Boot LUN A
                --partition --lun=1 --name=xbl_a --size=3604KB --type-guid=DEA0BA2C-CBDD-4805-B4F9-F428251C3E98 --filename=xbl.elf
                Copy to clipboard
        - 示例 3：为 LUN1 定义了 512 KB 的 `xbl_config_a` 分区。该 `xbl_config.elf` 文件将刷新到此分区。

#This is LUN 1 - Boot LUN A
                --partition --lun=1 --name=xbl_config_a --size=512KB --type-guid=5A325AE4-4276-B66D-0ADD-3494DF27706A --filename=xbl_config.elf
                Copy to clipboard

        LUN4 中定义一个分区：

        - 例 4：为 LUN4 定义了 512 KB 的 `aop_a` 分区。该 `aop.mbn` 文件将刷新到此分区。

--partition --lun=4 --name=aop_a --size=512KB --type-guid=D69E90A5-4CAB-0071-F6DF-AB977F141A7F --filename=aop.mbn
                Copy to clipboard

        每个分区条目使用的选项如下：

        - 必选选项：

--lun (mandatory for UFS, optional for emmc. Expressed as number)
                --name (name for the partition, a string)
                --size (size of the partition, generally expressed in KB)
                --type-guid (GUID for the partition)
                Copy to clipboard
        - 可选选项：

--attributes  (Optional 64 bit attribute, e.g., 1000000000000004)
                --filename    (Name of the file that is flashed to the partition)
                --readonly    (whether the partition should be read-only, values true or false)
                --sparse      (whether the partition is for a sparsed image, values true or false)
                Copy to clipboard
- **Linux 操作系统分区**

    | 分区 | 说明 |
    | --- | --- |
    | EFI 分区 | EFI 系统分区 (ESP) 包含 `Esp.bin` 和一个 `vfat` 文件。该文件包含 UEFI 启用 systemd-boot 所需的所有详细信息。有关该镜像的更多信息，参见 [EFI 镜像](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#efi-image-section)章节。 |
    | Rootfs 分区 | 此分区包含 `system.img` 镜像文件。该镜像包含所有用户空间库和二进制文件。 |
- **分区工具（Ptool）**

    Ptool 生成一个 GUID 分区表二进制文件，QDL 工具使用该二进制文件对存储进行分区。

    Ptool 工作流程如下图所示。

![../../_images/ptool.png](data:image/png;base64,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)

    **Ptool 工作流程**

    `meta-qcom-hwe/recipes-devtools/partition-utils/qcom-partition-confs` 目录中的 `qcm6490-partitions.conf` 文件定义所有分区。`gen_partition.py` 工具处理并生成 `partition.xml`，其为 `ptool.py` 的强制性输入。最后一步，Ptool 生成 `rawprogram.xml`，`patch.xml`，`gpt_main*.bin`，和 `gpt_backup*.bin` 文件，这是 QDL 工具刷写设备所必需的。

    要添加分区，请在配置文件中创建一个分区条目；例如具有通用唯一标识符（UUID）的 `qcm6490-partitions.conf`。

    更新 conf 文件后，将 virtual/partconf 的首选提供程序切换为 `qcom-partition-confs_1.0.bb`，将以下行添加到 `local.conf`。

PREFERRED_PROVIDER_virtual/partconf = "qcom-partition-confs"
        Copy to clipboard

    添加条目后，执行BitBake命令生成所有必要的文件：

bitbake <image-name>
        Copy to clipboard

    镜像编译完成后，如果选择的 MACHINE 是 qcs6490-rb3gen2-core-kit 并且选择的镜像配方是 qcom-console-image，则运行以下命令来刷写镜像。

cd <workspace>/build-qcom-wayland/tmp-glibc/deploy/images/qcs6490-rb3gen2-core-kit/qcom-console-image
        ./qdl prog_firehose_ddr.elf rawprogram*.xml patch*.xml
        Copy to clipboard

## Docker 容器

Docker容器可在Qualcomm Linux中启用。要使用 Docker 容器，请确保在 Qualcomm BSP 中启用了虚拟化功能。要在 Qualcomm Linux 设备上使用容器，请确保 `meta-virtualization` 层作为工作区的一部分启用。

- **Docker**

    Docker 已在 `qcom-multimedia-image` 中启用：

    1. 对于 `qcom-multimedia-image` 镜像配方，使用 `meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom-multimedia.bb` 包括 `packagegroup-container`。
    2. 在编译并刷写镜像后，即可在设备上使用 Docker。
    3. 要验证内核兼容性，请运行设备上的 `check-config.sh` 脚本。要验证配置，请启用所需的内核配置并重建镜像。更多信息，参见[内核兼容性](https://docs.docker.com/engine/install/troubleshoot/#:~:text=Kernel%20compatibility,check%2Dconfig.sh%20script.&amp;text=The%20script%20only%20works%20on%20Linux)。
    4. 若要验证Docker守护程序的状态，请运行以下命令并验证输出：

        | 命令 | 说明 | 输出 |
        | --- | --- | --- |
        | `systemctl status docker` | 启动后是否至少运行过一次Docker命令 | 激活（运行中） |
        | `systemctl status docker` | 如果设备在启动后未运行任何Docker命令 | 未激活（死锁） |
        |  |  |  |

    从 `linux/arm64` 平台的Docker存储库中提取并经过测试、在设备上成功运行的镜像如下所示：

> 
> 
> - `busybox`
>     - `python`
>     - `alpine`
>     - `ubuntu`
>     - `postgres`
>     - `mongo`
>     - `nginx`
>     - `redis`

    以下用例已在启用Docker的情况下经过验证：

    - 使用Docker加载实用工具通过tar文件加载Docker镜像。
    - 通过Docker文件编译Docker镜像。
    - 保存拉取/编译到 `.tar` 文件中的Docker镜像。
    - 加载Docker镜像，这些镜像保存为 `.tar` 文件。
    - 运行拉取/编译的多个镜像的多个容器实例。
    - 验证设备上加载的Docker镜像列表。
    - 验证设备上活动容器和总容器列表。
    - 使用Docker inspect实用程序检查Docker镜像。
    - 使用Docker logs实用程序从容器中获取日志。
    - 使用Docker stop和Docker kill实用程序停止并终止容器。
    - 从设备中删除容器和Docker镜像。
- **从 Docker 访问硬件节点**

    Docker 容器内运行的应用程序可能需要访问设备上的设备节点和文件（也就是说，设备是 Docker 容器的主机）。使用Docker的run命令将相应的设备节点作为选项传递来实现：

docker run -it --rm --device=<device-1> --device=<device-2> <docker-image-name>
        Copy to clipboard

    要传递的设备节点位于设备上的 `/dev` 目录。根据用例，例如在图形场景中，`/dev/kgsl-3d0` 是要使用 `--device=/dev/kgsl-3d0` 传递给 Docker 的节点之一。

    Docker 容器内运行的应用程序可能也需要访问设备（目标主机）上的存储。若要将文件/目录暴露为绑定挂载，请运行以下命令：

docker run -it --rm --mount type=bind,source=<source-path-on-device>,target=<destination-path-inside-container> <docker-image-name>
        Copy to clipboard

    使用以下命令可以运行在容器内公开多个目录、文件和设备节点的 Docker 容器：

docker run -it --rm --device=<device-1> --device=<device-2> --mount type=bind,source=<source-path-on-device-1>,target=<destination-path-inside-container-1>  --mount type=bind,source=<source-path-on-device-2>,target=<destination-path-inside-container-2> <docker-image-name>
        Copy to clipboard
- **Docker Compose**

    Docker Compose 是一个用于定义和运行多容器应用程序的工具。它通过在单个易于理解的 YAML 配置文件中定义服务、网络和卷来简化应用程序堆栈的管理。默认情况下，Qualcomm Linux 发布版本 的 Docker Compose 在 `qcom-multimedia-image`。

    `python3-docker-compose` 软件包被添加到 `meta-qcom-distro` 元数据层中的 `packagegroup-qcom-multimedia` 软件包组中。

    **要在设备上运行 Docker Compose：**

    1. 在设备上的可写路径下创建或复制 Docker Compose YAML 文件，例如 `/var`（例如 `/var/docker-compose-yaml`)，与设备上的 Docker Compose 一起使用。
    2. 确保设备上提供了 Docker-compose YAML 文件中列出的 Docker 镜像。如果没有，则设备应该连接到有效的互联网连接来拉取 Docker 镜像。
    3. 要为多个 YAML 文件运行 Docker Compose，请运行以下命令：

docker-compose -f <docker-compose-file-1>.yml -f <docker-compose\u0002file-2>.yml up
            Copy to clipboard

    Docker Compose 按照 Docker Compose YAML 文件中的配置运行并启动 Docker 容器。Docker Compose 命令返回后，运行 `docker ps -a` 和 `docker logs <conatiner-id>` 验证 Docker 容器是否按预期运行。

    要了解有关 Docker Compose 的更多信息，请参阅 [Docker Compose 概述](https://docs.docker.com/compose)。

## 使用 Qualcomm Linux 设置 Kubernetes

Kubernetes 是一个开源平台，用于自动部署、扩展和管理容器中运行的应用程序。它有助于跨多个设备协调容器，确保应用程序实现高效资源利用、高可用性和可扩展性。Kubernetes 不仅适用于大型服务器和云系统，也适用于小型 Linux 嵌入式设备。它有助于有效地管理和协调跨物联网设备的容器和应用程序。有关 Kubernetes 的更多信息，请参阅 [Kubernetes](https://kubernetes.io/) 官方网站。

- **启用 Kubernetes**

    - Qualcomm Linux 发布版本默认在 `qcom-multimedia-image` 中启用Kubernetes，具体通过以下变更：

        - 在 `dynamic-layers/virtualization-layer/recipes-containers/packagegroups/packagegroup-qcom-k8s.bb` 的 `meta-qcom-hwe` 层中定义 `packagegroup-qcom-k8s`。
        - `packagegroup-qcom-k8s` 包含在 `meta-qcom-distro` 层中的 `recipes-products/packagegroups/packagegroup-qcom-multimedia.bb` 镜像配方。
    - 要验证启动后 kubelet 的状态，请运行以下命令并验证输出：

        | 命令 | 说明 | 输出 |
        | --- | --- | --- |
        | `systemctl status kubelet` | 如果设备在启动后使用kubeadm作为Kubernetes节点，至少设置过一次 | 激活（运行中） |
        | `systemctl status kubelet` | 如果设备在启动后尚未使用kubeadm设置为Kubernetes节点 | 未激活（死锁） |
        |  |  |  |

`meta-virtualization` **解决方案相比Docker 和 Kubernetes** **的变更**

- `meta-qcom-hwe/dynamic-layers/virtualization-layer/recipes-containers/docker/docker-moby_git.bbappend` 文件修改 `/${systemd_unitdir}/system/docker.service` 以将选项 `--exec-opt native.cgroupdriver=systemd` 添加到 `dockerd` 命令，该命令作为服务的 `ExecStart` 一部分运行。这样做是为了保持 Docker 和 Kubernetes 之间的 `cgroupdriver` 相同。
- `meta-qcom-hwe` / `recipes-containers` / `kubernetes` / `kubernetes_git.bbappend` 文件修改 `/lib/systemd/system/kubelet.service.d/10-kubeadm.conf` 以将 `--fail-swap-on=false` 作为 `KUBELET_EXTRA_ARGS` 的一部分进行添加。默认情况下，Kubernetes 期望 swap 设置为 **OFF**，但 Qualcomm Linux 已将 swap 设置为 **ON**，并启用 zram 功能。即使启用了 swap 内存，设置 `--fail-swap-on=false` 也允许 kubelet 运行。
- 即使设备未配置为 Kubernetes 节点，上游 `kubelet.service` 尝试在设备启动时自动启动。但这种行为会消耗资源并影响功率。为了解决这个问题，通过删除在 `meta-qcom-hwe/recipes-containers/kubernetes/kubernetes_git.bbappend` 中的 `kubelet.service` 文件修改 `WantedBy=multi-user.target`。`WantedBy=multi-user.target` 删除后，当使用 `kubeadm` 将设备设置为 Kubernetes 节点时，上游 `kubelet.service` 启动，而不是在启动时自动作为 `multi-user.target` 的一部分。

## 属性

属性 (`property-vault`) 提供在系统中以字符串形式存储和共享键值对的功能。任何软件组件都可以共享特定键的任何值，并且任何其他进程都可以使用相同的键访问该值。`property-vault` 允许您定义重启后的持久属性。组件可以使用 `property-vault` 共享特定信息，这些信息可能与设备上的任何其他模块相关。可以使用命令行界面 (CLI) 访问这些键值对。

Note

仅在 `custom` 变体中支持 property-vault。

- **在 Qualcomm 设备上使用 CLI 配置属性**

    要在 Qualcomm 设备上使用 CLI 设置属性，请使用以下命令：

setprop "my-key" "my-value"
        Copy to clipboard

    要使用 CLI 访问属性，应使用以下命令：

getprop "my-key"
        Copy to clipboard

    上一条命令的结果：

my-value
        Copy to clipboard

    要使用 CLI 设置属性并使其在设备重启后保持不变，请使用以下命令：

setprop "persist.my-key" "my-value"
        Copy to clipboard

Note

为了使属性在重新启动后仍然存在，属性键必须以 `persist` 开头。
- **使用 Qualcomm Linux 的 C/C++ 源文件中的属性**

    要使用 C/C++ 源代码模块中的属性，请执行以下操作：

    1. 要在程序中使用属性，例如 `example-recipe.bb`，添加依赖项 `property-vault`：

DEPENDS += "glib-2.0 property-vault"
            RDEPENDS:${PN} += "property-vault"
            Copy to clipboard
    2. 更改编译版本配置文件：

        1. 如果你正在使用 `autotools`：

            `configure.ac`

...
                
                PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes, AC_MSG_ERROR(GLib >= 2.16 is required))
                GLIB_CFLAGS="$GLIB_CFLAGS"
                GLIB_LIBS="$GLIB_LIBS"
                AC_SUBST(GLIB_CFLAGS)
                AC_SUBST(GLIB_LIBS)
                
                AC_CONFIG_FILES([Makefile])
                ...
                Copy to clipboard

            `Makefile.am`

root_sbindir       = "/sbin"
                root_sbin_PROGRAMS = property-test
                
                property_test_SOURCES  = source.c
                property_test_CFLAGS = @GLIB_CFLAGS@
                property_test_LDFLAGS = @GLIB_LIBS@ -lpropertyvault
                Copy to clipboard
        2. 如果你正在使用 `cmake`：

            `CMakeList.txt`

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -lpthread -lrt -lm -lglib-2.0 -ldl -latomic")
                target_link_libraries (your-lib-name propertyvault)
                Copy to clipboard
    3. 修改源代码文件为 `get` 和 `set` 属性：

        `source.c`

#include "properties.h"
            
            int main() {
                // set a property
                property_set("my-key", "my-value");
            
                // get a property
                char paramstr[PROP_VALUE_MAX];
                // value gets stored in paramstr
                property_get("my-key", paramstr, "default-val");

                // set a property which has to persist across reboots
                property_set("persist.my-key", "my-value");
            
                // get a persisted property
                property_get("my-key", paramstr, "default-val");
            
                return 0;
            }
            Copy to clipboard

Note

属性键名最长可达 64 个字符，属性值最长可达 92 个字符，如 `properties.h` 中 `PROP_NAME_MAX` 和 `PROP_VALUE_MAX` 所定义。

    4 节在主机上编译配方并将其作为要在设备上刷写的镜像的一部分。

## Persist 分区

为 UFS 定义的 persist 分区用于存储 BSP 软件组件在重启期间所需的持久性数据。

Note

persist 分区下的文件应该保持不变，包括重启和 OTA 更新。因此，不建议通过擦除或清除整个分区来删除文件。

- **Persist 挂载点**

    `/var/persist` 目录是在 persist 分区上创建的文件系统的挂载点。`var-persist-mount_1.0.bb` 配方负责将 `var-persist.mount` systemd 单元安装至 `local-fs.target`。

    在启动时，`var-persist.mount` systemd 单元创建 `/var/persist` 路径，并在 `/var/persist` 上挂载 `/dev/disk/by-partlabel/persist`。要显示 persist 挂载点，请运行挂载命令，如下所示：

sh-5.1# mount | grep persist
        /dev/sda4 on /var/persist type ext4 (rw,relatime,rootcontext=system_u:object_r:qcom_persist_t:s0,seclabel,stripe=128)
        Copy to clipboard
- **调整持久化分区的大小**

    `resize-partition@persist.service` 自动调整持久化分区大小，其由 `qcom-resize-partitions.bb` 配方安装。`resize-partition` 服务在设备启动时运行，以将 filesystemd 扩展到分区中的最大可用大小。

## 辅助虚拟机

本节提供使用 Qualcomm Linux 编译系统创建虚拟机 (VM) 镜像的步骤。

要使用带有 Qualcomm Linux 的虚拟机，请确保镜像配方中包含虚拟机管理器 (VMM) 工具，并且生成了客户虚拟机内核和根文件系统镜像。

以下步骤提供了以下操作的分步指南：

> 
> 
> - 包括必要的 VMM 工具，例如在 Qualcomm Linux 中已经定义的镜像配方中的 `crosvm` 和 `qemu`。
> - 使用命令编译Guest VM内核和根文件系统镜像。
> - 使用命令启动 Guest VM。

1. **设置开发机器。**

    - **在开发用主机上安装 clang**

> 
> 
> 要在主机开发机器上安装 clang，请运行以下命令：
> 
> 
> sudo apt install clang-11
>             Copy to clipboard
    - **在 Qualcomm Linux 环境中启用 meta-rust 层。**

> 
> 
> meta-rust 层提供 Rust 编译器 (rustc) 和软件包管理器 (cargo) 来编译 crosvm（使用 Rust 语言实现）。
> 
> 
> 将 meta-rust 层添加到 `meta-qcom-distro/conf/bblayers.conf` 文件中的 EXTRALAYERS。
> 
> 
> 打开 `conf/bblayers.conf` 文件并添加层路径至 `EXTRALAYERS` 变量，如下所示：
> 
> 
> EXTRALAYERS ?= " \
>             ${WORKSPACE}/layers/meta-rust \
>             "
>             Copy to clipboard
    - **在build中包含来自 meta-rust 的 Rust。**

> 
> 
> 创建 `meta-qcom-distro/conf/distro/include/rust_version.inc` 文件内容如下：
> 
> 
> # include this in your distribution to easily switch between versions
>             # just by changing RUST_VERSION variable
>             
>             RUST_VERSION ?= "1.73.0"
>             
>             PREFERRED_VERSION_cargo ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_cargo-native ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_libstd-rs ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_rust ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_rust-cross-${TARGET_ARCH} ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_rust-llvm ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_rust-llvm-native ?= "${RUST_VERSION}"
>             PREFERRED_VERSION_rust-native ?= "${RUST_VERSION}"
>             Copy to clipboard
> 
> 
> 将 `rust_version.inc` 文件包含进 `meta-qcom-distro/conf/distro/qcom-wayland.conf` 文件，如下所示：
> 
> 
> require conf/distro/include/rust_version.inc
>             Copy to clipboard
2. **将 crosvm 工具添加到 Qualcomm Linux 镜像。**

    要将 crosvm 工具添加到 Qualcomm Linux 编译的镜像中，请编辑 `meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom-vm-host.bb` 软件包组配方文件并添加以下代码块：

RDEPENDS:packagegroup-qcom-vm-host:append:qcom-custom-bsp = "\
           crosvm \
           "
        Copy to clipboard
3. **编译镜像配方 和Guest VM 镜像。**

    - 要编译现有的 Qualcomm Linux 镜像配方，请运行 `bitbake <image>` 命令。这包括生成的镜像中的 crosvm 工具。
    - 例如，对于 `qcom-console-image` 运行以下命令：

bitbake qcom-console-image
            Copy to clipboard
    - 若要生成 Guest VM 镜像，请运行以下命令：

bitbake multiconfig:qcom-guestvm:qcom-guestvm-image
            Copy to clipboard

        **Guest VM artifacts**

> 
> 
> 成功创建 Guest VM 镜像后，您可以找到以下 artifact：
> 
> 
> 
> > 
> > 
> > 1. Guest VM 编译命令会为 Guest VM 镜像创建一个名为 `tmp-qcom-guestvm-glibc` 的文件夹。
> >         2. Guest VM 内核和 rootfs 镜像在 `tmp-qcom-guestvm-glibc/deploy/images/<machine-name>` 目录中生成。
> >         3. `tmp-qcom-guestvm-glibc/deploy/images/<machine-name>/Image` 文件是 Guest VM 内核镜像。
> >         4. `tmp-qcom-guestvm-glibc/deploy/images/<machine-name>/qcom-guestvm-image-<machine-name>.ext4` 文件是 Guest VM 根文件系统镜像。
> >         5. 在刷写由 `bitbake <image>` 命令创建的镜像并启动设备后，将 Guest VM 内核和根文件系统镜像复制到设备，例如，复制到 `/var/gunyah` 目录。
4. **启动 Guest VM。**

    要启动 Guest VM，请使用 crosvm VMM 工具。

    在以下命令中，Guest VM 内核和根文件系统镜像来自设备上的 `/var/gunyah` 目录。

crosvm --log-level=debug --no-syslog run --disable-sandbox --hypervisor gunyah --protected-vm-without-firmware \
        --serial=type=stdout,hardware=virtio-console,console,stdin,num=1 --serial=type=stdout,hardware=serial,earlycon,num=1 \
        --root /var/gunyah/qcom-guestvm-image-qcs9100-ride-sx.ext4 --no-balloon --no-rng --params \
        "earlyprintk=serial panic=0" /var/gunyah/Image
        Copy to clipboard

    - `--root /var/gunyah/qcom-guestvm-image-qcs9100-ride-sx.ext4` 选项指定 GuestVM 的根文件系统的路径。
    - 最后一个参数 `/var/gunyah/Image` 传递给 `crosvm` 工具指定内核镜像的路径。

    如需了解更多信息，请参阅[虚拟化](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-3/features.html#virtualization)。

## Qualcomm Linux 的 OTA 更新

OTA 更新对于保持设备（尤其是嵌入式系统和物联网设备）正常运行至关重要。这些 OTA 更新运行设备接收和安装更新。

Qualcomm Linux 使用 capsule 更新机制来更新固件镜像，并使用 OSTree 更新机制来更新 Linux 操作系统。

> 
> 
> ![../../_images/OTA_Introduction.png](data:image/png;base64,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)
> 
> **Qualcomm Linux 的 OTA 更新**

- **使用 capsule 更新固件**

    Capsule 更新是一种在支持 Qualcomm Linux 的设备上更新固件的方法。固件被打包成称为 UEFI capsule 的二进制格式。当设备启动并以正常任务模式运行时，capsule 会被下载并部署到 EFI 分区。重新启动时，在下一个启动周期内，UEFI 会处理此 capsule 并将更新应用于设备固件。
- **使用 OSTree 进行 Linux 操作系统更新**

    OSTree 是一个用于管理基于 Linux 的操作系统的版本控制和原子更新的工具。它就像整个 Linux 文件系统的 git 代码仓库一样工作。OSTree 将文件系统树的快照存储在代码仓库中，设备通过网络拉取这些快照。使用 OSTree，更新是原子的更新并且支持回滚，因此中断的更新不会破坏系统。这对于需要安全、一致更新的物联网设备或边缘设备非常有用，如果出现问题，可以轻松回滚。
- **使用 capsule 和 OSTree 进行完整的 OTA 软件更新**

    要在单个 OTA 系统中管理固件和操作系统更新，请同时使用 capsule 和 OSTree 更新机制。Capsule 更新机制首先处理固件更新，更新低级固件。Capsule 更新后，系统重新启动并进入 Linux 操作系统，检查并应用 OSTree 更新。

    Qualcomm Linux 使用 Capsule 通过 UEFI 更新低层固件。

    以下是使用 capsule 更新固件的步骤：

    1. 创建 capsule：固件更新被封装到称为 UEFI capsule 的二进制文件中。
    2. 传递：capsule 二进制文件通过存储在已挂载的 `/EFI` 路径传递到 UEFI。
    3. 处理：UEFI 固件在启动周期内处理 capsule，并将更新应用于设备固件。

    Qualcomm Linux 使用 OSTree 来管理 Linux 操作系统。Qualcomm Linux build生成的更新包被复制到设备并使用命令 stage 变更进行激活。设备重启后将应用更新的软件包。

    下图显示了带有 OSTree 的 Linux OS 的存储视图。**运行时**视图指示来自**默认部署的存储**在运行时映射到挂载点的目录。

    **创建新部署后的存储**视图显示了在设备上成功创建新的 OSTree 部署时闪存存储如何更新。此部署是新建的，并将在下次重启时尝试作为新的 Linux 操作系统。

![../../_images/OTAupdate.png](data:image/png;base64,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)

    **OTA 更新期间存储概览**

以下是作为 OTA 的一部分更新的 Linux 操作系统和固件镜像列表：

> 
> 
> - **Linux 操作系统镜像**
> 
> 
> 
> > 
> > 
> > - `efi.bin` 文件包含 UKI、initrd 和 bootloader 配置文件。当创建新部署时，OSTree 会生成一个新的配置文件，并且复制到 EFI 分区的新内核和 initramfs 镜像的路径将作为新配置文件中的条目列出。
> >     - `system.img` 文件包含 rootfs，包括以下关键组件：`/ostree`，`/ostree/repo`，和 `/ostree/deploy`。当创建新部署时，OSTree 会更新文件系统树以反映新版本的操作系统。
> - **固件镜像**
> 
> 
> 
> > 
> > 
> > 有关固件镜像列表的信息，请参阅 [GitHub](https://github.com/quic/cbsp-boot-utilities/blob/main/uefi_capsule_generation/FvUpdate_UFS.xml)。

- **Capsule 更新流程**

    下表显示了 capsule 和 HLOS 更新流程及其说明：

    | 工作流步骤 | 说明 |
    | --- | --- |
    | ![../../_images/OTA_flow.png](data:image/png;base64,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) | <ol class="arabic simple"><br><li><p>复制 <code class="docutils literal notranslate"><span class="pre">&lt;capsule&gt;.cap</span></code> capsule 文件到 EFI 分区，该分区挂载在已启动的设备上的 <code class="docutils literal notranslate"><span class="pre">/boot/EFI/UpdateCapsule</span></code>。</p></li><br><li><p>使用 <code class="docutils literal notranslate"><span class="pre">EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED</span></code> 设置 EFI 变量 (efivar) OsIndications 标志并重新启动设备。UEFI 从 OsIndications 标志识别出有一个 capsule 可供更新。UEFI 对 capsule 进行身份验证并从 capsule 更新固件镜像。Capsule 更新的状态已在 ESRT 表中更新。如果 capsule 更新期间出现故障，UEFI 会将固件回滚到以前的版本。</p></li><br><li><p>固件通过 UEFI 从 capsule 成功更新，并且设备使用新固件启动。</p></li><br><li><p>将 OSTree repo 复制到设备。使用 OSTree 命令为 HLOS 更新创建一个新的部署，创建一个带有计数标签的新配置文件，然后重新启动设备。</p></li><br><li><p>Systemd-boot 选择新的配置文件并从中启动内核和用户空间。设备启动，固件和 HLOS 软件已更新。<code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code> 将新配置标记为 good。</p></li><br><li><p>重置 OtaStatus efivar 中的 TrialBootEnabled 标志以指示固件为 good。UEFI 检查此 efivar 以提交新固件。</p></li><br></ol> |

    下图显示了固件更新流程：

![../../_images/OTA_firmware.png](data:image/png;base64,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)

    **使用 capsule 更新固件**

    要使用 capsule 更新固件，请执行以下操作：

    1. 将 capsule 复制到设备：

> 
> 
> scp -r <firmware_capsule.cap> <user>@<IP_address>:/boot/EFI/UpdateCapsule
>         Copy to clipboard
> 
> 
> 关于 `firmware_capsule.cap` 生成 capsule 的更多信息，参见[在UEFI中生成 capsule](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-4/tools.html#capsule-generation-in-uefi)。

    2. 在设备上创建 `data1.hex` 包含指定十六进制数据的文件：

> 
> 
> echo -e -n "\x4\x0\x0\x0\x0\x0\x0\x0" >data1.hex
>         Copy to clipboard

    3. 使用 efivar 工具将设备上的 `data1.hex` 内容写入 UEFI 变量 OsIndications：

> 
> 
> efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -f data1.hex -w
>         Copy to clipboard
> 
> 
> 有关 UEFI 变量的更多信息，请参阅[更新和恢复](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-4/architecture.html#update-and-recovery)。

    4. 使用 efivar 工具打印 OsIndications UEFI 变量的值：

> 
> 
> efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -p
>         Copy to clipboard

    5. 要将 efivars 保存到 RPMB，请运行设备上的 `uefi_sec` 应用程序：

> 
> 
> /usr/bin/uefi_sec 1
>         Copy to clipboard

    6. 重启设备：

> 
> 
> reboot
>         Copy to clipboard

    7. 检查 ESRT 表条目：

> 
> 
> cd /sys/firmware/efi/esrt/entries/entry0
>         Copy to clipboard
> 
> 
> 检查 `last_attempt_status` 命令的输出。如果为0，则更新成功：
> 
> 
> cat last_attempt_status
>         Copy to clipboard
> 
> 
> 检查 `last_attempt_version` 命令的输出。
> 
> 
> cat last_attempt_version
>         Copy to clipboard
> 
> 
> 检查 `fw_version` 命令的输出。如果 `last_attempt_version` 和 `fw_version` 相同则更新成功：
> 
> 
> cat fw_version
>         Copy to clipboard
- **使用 OSTree 的 Linux OS 更新流程**

    下图显示了 Linux OS 更新流程：

![../../_images/OTA_hlos.png](data:image/png;base64,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)

    **使用 OSTree 更新 Linux 操作系统**

    要使用 OSTree 更新 Linux 操作系统，请执行以下操作：

    1. 要检查 Qualcomm 设备中的当前部署，请运行以下命令：

ostree admin status
            Copy to clipboard

        输出：

\* poky 643b332dd72b345b5040a1decbe7e04bd2d208a04ba59417aa667c901c485504.0

Version: 1.0

origin refspec: poky:qcs6490-rb3gen2-vision-kit

        [\*](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#id12)显示设备已启动的当前部署。
    2. `ostree_repo` 软件包位于开发主机上的 `<workspace>/build-<DISTRO>/tmp-glibc/deploy/images/<MACHINE>/` 路径中。例如，`<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/qcs6490-rb3gen2-vision-kit/`。使用以下 scp 命令将 `ostree_repo` 软件包从主机复制到 Qualcomm 设备：

scp -r <ostree_repo> <user>@<IP_address>:/tmp
            Copy to clipboard
    3. 在 Qualcomm 设备上拉取本地 OSTree 存储库。

        以下是该命令的一般语法：

ostree pull-local /tmp/<ostree_repo> <branch_name>
            Copy to clipboard

        要找到命令的 `branch_name`，运行以下命令：

ostree refs
            Copy to clipboard

        输出：

poky:qcs6490-rb3gen2-vision-kit

        这里，`qcs6490-rb3gen2-vision-kit` 是一个分支名称示例。
    4. 在 Qualcomm 设备上创建部署：

ostree admin deploy <branch_name>
            Copy to clipboard

        这就在 `/boot/loader/entries/` 目录中创建了 `ostree-2-poky.conf` 配置文件。有关详细信息，请参阅 [Systemd 启动计数 - 启动成功](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#systemd-boot-successful-boot)。
    5. 重启设备：

reboot
            Copy to clipboard
    6. 检查设备是否使用新创建的部署启动：

ostree admin status
            Copy to clipboard

        输出：

\* poky 1e8a01bcc5cd9b3b34043db494ddcd01ec5c1c84312479a55253358a92250fa3.0

Version: 1.0

origin refspec: qcs6490-rb3gen2-vision-kit

poky 643b332dd72b345b5040a1decbe7e04bd2d208a04ba59417aa667c901c485504.0 (rollback)

Version: 1.0

origin refspec: poky:qcs6490-rb3gen2-vision-kit

        要在编译主机上验证新创建的部署，请检查 `<workspace>/build-<DISTRO>/tmp-glibc/work/<MACHINE>/<IMAGE>/ota-sysroot/ostree/deploy/poky/deploy` 路径中的部署。例如，`<workspace>/build-qcom-wayland/tmp-glibc/work/qcs6490-rb3gen2-vision-kit/qcom-multimedia-image/ota-sysroot/ostree/deploy/poky/deploy`。

- **Systemd-boot 计数 - 启动成功**

    下表显示了 systemd-boot 成功启动时的计数及其说明：

    | 工作流步骤 | 说明 |
    | --- | --- |
    | ![../../_images/OTA_systemd_boot.png](data:image/png;base64,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) | <ol class="arabic simple"><br><li><p>当 OSTree 部署新配置时，它会创建一个配置文件，其中包含 <code class="docutils literal notranslate"><span class="pre">+3</span></code> 名称中的标签，表示最大重试次数。这会启用启动计数。</p></li><br><li><p>systemd-boot 检测到入口文件名中的标签 <code class="docutils literal notranslate"><span class="pre">+3</span></code>，并将其重命名为 <code class="docutils literal notranslate"><span class="pre">ostree-conf+2-1.conf</span></code>，表明一次启动尝试已开始。重命名文件后，启动过程继续。</p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">systemd-bless-boot-generator</span></code> 创建 <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code>，将其设置为在达到 <code class="docutils literal notranslate"><span class="pre">boot-complete.target</span></code> 时启动。</p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code> 通过删除计数器标签 <code class="docutils literal notranslate"><span class="pre">+2-1</span></code> 并将文件重命名为 <code class="docutils literal notranslate"><span class="pre">ostree-conf.conf</span></code> 来将新配置标记为成功。</p></li><br></ol> |
- **Systemd 启动计数 - 启动失败并回滚**

    下表显示了 systemd-boot 在启动失败和回滚时的计数及说明：

    | 工作流步骤 | 说明 |
    | --- | --- |
    | ![../../_images/OTA_boot_counting.png](data:image/png;base64,UklGRhIvAABXRUJQVlA4TAUvAAAvn8LFANfCKLbtJlcH6/SgAAngf1NEdEiPDVaxbSvZ1OD74SQgNRnI4BLC4flzENu2Uu0wOOTQdOQgj0sG+/r8zX8Ae/CCFKKSevCSVoIUmneKNZp3/v+vBy9IIUiheed9v6qzghSCFLLRqrOCFKqzstGCFKqzijWCFIIUmneSVo7jVp11329JK9SgxAhI4QAJ2AqsUGQYsQKIQEgBCFACDpIAKeAgAARIsAPEQQDY7YAdiM22AyYIzBFgMAEoQGYkQgPYOCIQUvVupkWPCVCDEmMKR2cBsu2Z7hSkMMQlCiO3bcPI//92krputnNEKHDbRjmm7gbdJwCFKmMNdAUrTi2aGxrdlXQdzh4hN1XTreqShBuVSS9Uz6tcf3Har4Z5miU5ceGJ819Rn+l7sCeHNC8g7MOGrGpcC0rcboU5Ovj5spJvpDIO/ptvpQVgm47TmBDfCPJNC/j2KViab9LMOhrpMMtJA8Mp0dsXaXFd8HZtm16prbYdlYoqkSJqLkUrFZQoTtExhLzZdIAst9OwbEhjN5jQYPLm//9LVOdbafbLtK4XIvovwW0jSZKU2GN6d3YVkZFn9cwDKEeSJElycL9ACPgnEch0s4jKQtccPRHRf4qSJDlSrHgSTmVGFrvAiQ9wtzbO9oOf/efOptn+/cvbt92m2X760Qf/Gf8Z/3nr5Ae3Nrb2w/X5+X82tq+vn9fn9u2tbf/wwX/Gf8Z/fgghXEv45gCmS+P1REwpRZkB41VOgJ2M7oYk1E5KIcbYN5e234H1p9cVctReAiaUJs+QQNgLlycBXRps7DDfiLS5rtP9ANrmeB0SM0rLcd/0wBja4XJU4GVJgFwZ6mi9ARmBKrpc/m5KRW6yMaT2UrN2pCOQU5oBxD2TDKMg7zGSS5KAGWis0/pw49FnYKohANh5PkCSCSBeblaONM0dm+3ynpn1DLeA3xuXJAE+NPZ5/aYjAMnHGjLQSZ2E7loiBMPZvgz0/QKd4cpuMONDkZEG6G465ta5GnpgJ1Wd/FLwZoKADxo+1BBUgjeImAmmJTfa8F6NTCfUkNX1WxhdF++r4y9iSMjN92l1TIA3WbQTgDwsAmVDPLOrlx4D2X300nFuIrOK7GGjGbHYi4q5OI6NRUSOVCLo7AyEkWTKWyJjCWtSSUsoiiWyvETWyNNjb1B0Rn1Gp+5IO2RbAurjJwG9sG4Q0yktje/Qb3aApJVbxzwx5TJ9RrCWiE7qQM9E5H/JM0CqQ/GwQGQVRdY6i4gYaRWz/jIPLTeGyHjCaGvLWsVaEOiLhEHRGc2Y+IkefIBMxgTUx58FCLsvv5jOE7XxrNv8TU5YPtY6NZY+pzXQDH3ZdC4SIQRPKGMl9EsnN2zuGciEp3kYQI6e1Eggihm5lElvFBEjrWEw7HWAuS1zPqIeGSWX2Mv+f3Y0smmJTJkQljQZFJXRgdVpzweOB3bGBNTHnwUIJOTFwk/IoeGlEG5yesMWMxoO0ZJaJFMt7z8uMOseBnLjaDQjNUMjHBkNIuLLRmKMuxmIhnncU62gB6LEPgDBtt1MBIOiMtqy1I8LO1a4jTEBK8SfBAj4JSr+H0ilcJMTLbCuNiJMUZ7KMEfdQ6cRdtVsUZCq0RtEagn0CcbOKTTi3GkLJIoF2huhewODojLKRnfGjJkOkFlLwHrxM0qOgXjI4MupxIpz4mrHe1L30OGHKa7YSkqtQURmhtgSqbW0NAC5k+nFYA2BSLHTkHRED4OiMjoiUwm2umXstASsF38XbuHA+IBVMFJnQzKYEmnToqV7CAU96LKB5kAM0yBSg5iurF1HRnGxMASyV4RhodojxkWspwNES4A9/gbYKsE8O4kD4q/0fLnrSkXObRViCxaPTBmtOB1nxoWllWQE+RRFd59ZQ7W4LAjDxYd0VVo6aCx53ekJ0OJfGboq9OSNGtkdALAdhMggTTtdWb2jAT0Qs4cPpHkrjU5jxbhTEWb0oOAVmtWZMNkxRD1hLlINfeY5YdDwSvzrM0jXYofBy25WKirLZ4yQke30HKNHzcsNzYFoaxBZi6QhWhgC0TF/mpleg5r4FplMKq03bHCCPf4eAnI3Zkw77w4FdvKHUewDdiTR0fcjZg/jVDYha4ojYBFZAdP7jFrp7tMSyDqMVqRRD/Q7DCT4oSt7By0B9vh72JF8qJG0Nyx9VDpZPOF0QHYajb4ntD84mpErYGt2EJ78ZF8rAiQrPkjVMstZFPaJXasHUoPaMSas0RnjhI6+V7V8Amt6AtT4mxiQW0O3NTccTQhhoEcbludBLX6MpS/aEbw4UgoLfqK1N5We8V6j51dfzW6nexggnR0y6+HIFLtSNgYRMVKJRoghdfzd0S3PoqjejIh6ZLVIsXUmrNEdeejJTofi25rUBKjxN9Fk9icpiivKzUYDqfUlz3pJdJJXboW+mNOEUnvC0+kkIRwgMrkCTbqHTuKHjciUpTitIr12j1X+dUMSlxqVszhxn1YPpBrBZzBhjTYLE1OTjw1qAtT4G+CziPaXZ6QbDi+j37TK7+3BHNWvNJmCOE9FQhbH00y7b2h0D52RfjXI3KrKg7eIKJFaWhhpjsjComRxl6mPHggja2SMhssAk6I2momSYZLRErBG/JsAwUh8ahsiMPJN9o37daPyRCPuPTQdTUSy0i+vfI2HGkejK7s6kZoIGs3Qy6nSI1uz9YAeaIfRihyH/cU/Y5D2EzwfNxfP6a/rZH5spEuCAZn+c5PbALhGCtCT3QQ7oI1UpNsKCNfE/VECUh9Cuys3DeyksRXgEobrIXrhXTgN3QfH7QDfh+sh/CYOKY2RX8Z02+f3zfvgP+M/4z817tze1Nqv98BPbm9s7VYVG2H74D/jP+M/b5F8fv6+5k/PPxfi8/PPfRr/Gf8Z/3mDZ0xBo0vjpWXd+Paci5hSinIiL1EXvV6aPsb2ahOAqBYVcBmHwFCKd5/xRcAQSQ0TShPkInCJuuimGFJ+dYgzSsv9jUcGwv6xRGKnB8bQDlTuZsCS8qvCWP6MvBD3zJDay8blC3wGGhurxCNgicROwizJ3QxYUs6q7dKTcvTO+fLP+f0CxMvG5Qvch8btByAKGCKpKpwkyd0MWFMOxEtP54WR2N0AlP+6VKxhm4RE3kg4564CStvVhBh8TTd5Mz7ohoKA6lOHQd4bRMoEI95XEHw1wdw3rXize7VIsBOqIgp6NxTvwRcI/uoTzbQTgDyUGR45CINoVpTalIBZuMjxA5Y2deyEMriwaGHk+5fUKEGlxkpTHOdO6Kkho9g3BhEuzsNl5j0XmVkfjyRdXmYHNHImSWKUeFguUklokCNRcUOxzYttQ+QELJ0iqY6ZuAtJ4yHauygF7BbjXo5IZNdDK9wDq1FahZTLnX0lGKwfxJKgTDqjAXhuFgNFKYK1VOgyO+oN1Dx1VCq7NlOBhrJjtoMNIkvlWTCsdQYRLs7ClczlyuQ2uaGwBExyklna5XiUXLRSJC5uz20DkRPQOoWi9QCynrTW3kUQMCoRiex6aIV7QDVSK0uj3NlXgtn4VzxNTjOUiWHiKe2AVlMKYbEIgSw/DZsqBqAn5HJp1kyLDhB9mRRGwuKaF/8I2ECOnnRRKDSLfFdKzigSi0tkgJvL2wJgbsucgyjQkR9yJlkT4xFyUfI0Cyi6kHZabJ2G2ikiKceG2uxY0oQQjV1EdkPfaRFxdkNo/h5YDayhIXfKVaCzjr5WHi09nzNHZKpk3AElZPluJ/L5IIN5zwC/OidCnYos27LOSkDDKyQZRf7NLpIzr1FkRvZULFD4DyGTlpfVSAZppFXo0m5UMHSKSBBmp8kQotJFBoDO0t0iux6avwcuAFo1rtrLs/Wit1OuFoGRf0yVbHhmQM0IjbZziTRGL6ytvQqXZRUhObJ/zxtEVgrJJRpgp/ZvmWOFJNchjsSewXV7MHWKoQ2AIUStiwQ7W3ezJkNo/h64wCroGmBXysWEL0cDgVEqBKZkohNGWJA3fqJAS2mFKSfYkDIS6E5GUmoNIiuV5AI9EDSajElMciWaSgQE3RZMnWKrN0OI9i5KAS0RgSabqr8HLrBpveKwldXQ+G4+dQWpe0bMkpKtfKZEWtlOaegdFxRmdoySYHbMUZI0iNSIAmwgaGTAK0leF1G3AUunKHRxSGk2wbqoAlt3M4bQ/D1wgaD1atMAsz2ibgY9ydAt0kSTISsZEFtYl0wZrTgdtzecRgQGNclrouiWsXQKQz7V7wlLRIwcWhFWE7VeUfgRvKl7jwxK+Cy1vkzyXlFSURbMdfGBNG+l0Wn2hlftEtCrSV4RTbeJYOvbRXvslpwPe8ISESOH1sFf9vSuHOv8YAlbzPgE37sJk6ak0a8EFWxXerlhnSXFZRCh1JjLBN0uA42WyUYo7hr8bWl5cNHENlGZvpJcrQipIa1XjhV/iHv1CbMHelVJIQC7NVAEOxueMiFrwYyARcSIp8zITqA1fBoZ7VlNch8YtxIchbepgCZy8IhqWOdvgdSg1iuK/qOPRhoqRZ6c6Eq8EIQ6XAknrAbZxsQdB+boa0WAZDRvhednkIN1XUtlaDaTlmQgrUdTee+Ko8g34skETeTgEdWQqxVZ1VgaG+nSMwF9YI1FPEikVGT8JJzbyMFJVxJurn1Jfc8vQprdrgJeup48ecomkNuynLHuiCyYrowHg4gYuGK+iLWiuejbjIiSzAhEU5KzUDuKbjU4ChzdUFwmmMCJFIaIBLlaESxAWjXi2JeZALH1tEQSg1rMqaSylUTQ2ZR66QnwAPKujKJRiZv4g/tkIQ1UihtxDeRWF1ECF+FmndaV3LcVZeZFw5Lk3KcCUbceHIXe+HJxH0zgRApDRCJ7rlYEC4BWjTz2ZcZnkc7wYMSX2pIvhgOQrUo7qYi7mRbs0BS4aC8j1nZqXEKvM7qY+XWKHMzgDSJK4HLP9YK5HP8uk2iDLNNkzIYkQx8iLrMHsepmjGK4W2gzSjxqkqLAyRJ+ohTQEJHIztUK94AFQKsWbx77in3dqLpKaO878MBgVnKiha98t4LmWidFakcOxuki9iAiIJobUmmO1JquFXK4VpZhlLpkY/TdjUrVuguUaCrTcVnZT4vlYuZ6bBH4fv519zNmt13Cri23TQbAb5yk6K5L2jRsn9+X7IP/jP+M/3x98vP/3NnU2r/n9fnBrY2t/bCKjbB98J/xn/Gft1T+687G1v57D9+35KNbm1r7xfb5fZ8++M/4z/jP93eCEd98PyamlGIFXRpXoE76kjBgtJHRHcqEGGNrpwmkrVuNw6pMKK1CPgJ7HXLA5cADUtrFHthhPoyJGaXlaP0B1uahWYsMhBXpgTG0g1H+yuPuvy1JlcfLIcwI5JRmANFGgNR2K7GE0KxIwlwhX8+Q2j2ybjBZ6JERkMfChOEQJs0dm0CzFVoVYQAwrYMPjVuRGalCvh4g7pFVg2kBT+gzMHFYXx3CBGkDGsywHcZUfnvpGsw4564PBsy8B5KPMg3QHdCfFutxPss7Bh9WmsS9MhlXE+oIvpbgzQQ9ld4gUiNjoMwt7R1F6YBmVw8pioFV+ICyzSCzVocchCluKqvtzJ3LPjEP3qDKvVIim+7UEMlMLAtEXqGdiJREW5xnfifmh1yiGhsDTYmdbp0UQYMIlskPzj0PRSdhPqCZa14WJ7WZ0GUgzwAGWjiD4DWKU20H2nKjqEr0YC2UYckt+XiQiWVIZTkFkXsmGhRrnQqJnUWrCRpEoAzICSK6hX/MDEBcgQkoNMAUqGsvj6gOaAncuKzEbULUVMWgQtEJRSjl2FCvnQXPRuCgOg+Ls198MnLHDk5BAzl611EfUdAoksskdoCz0wHhCRNj3M3lkLMCI62DhCyvqz3QMq3sJGZkT+MKmqrxZV5fMyYLrXF+FDKSgEY4OmnkxlHv0SBoMLavTga0TnnABHrtv3NrEAleUOmAhs6qrKYGiUa6ZdBVKz6N/qLCZO3QuKUi9gqNsOBYBA3GmunQx6ellRW4W4HdgryaBmowlUmZ+lDU/aKuWke04cuuxIa4neGarRKDmDCDoMFYAqQK3KGL0NjOr6tAmdwiMCXSpiIllNeIWa5saa7VVc10cUhpNkFPbamzINSqOJGqCGoGQYPxBwa2N8w1SMtzQWxBuC9w0pFKK0qDqgnpE424bkY55tlx6+F03McJNwOhFk9rJBoER4B8utfw5nKykYCxCyEMBoR3UgGIZpr1aHSaOlPdy4c1aQUivZTqDXRlTzJichpBoK+nFSZhA1IKMrL9AzE+GzugMQiKxFd8s4P7p6aShtVlsDz/z8uHQC/TcjuuakcoYTPaNaeGHtSoF7GnTMgGQZNYMpphuW0fLz5IfTzTGSxaCeXkZnvExa77Aa+UsjDLdi15KlYLt56MVNyJ8Qg9T9KgMQk+BkGRuPCJjFBl0TxeIlLH3x3dsr4eNIawtDhBmOR6fs3U7HaCXXlRIVK7ZkTUVB0dezI1wUZKxdlP2jOFqVSl90KEritlroHclhFN6lcVFEFyGRDfSV/BUCaAEII4pz9eGv1tzyOQFIQ2t+I0jZwSJMUZQKfhJi7caqqIIJnLpddggOZiThONQH/bQGJBAXQUKCRqRNceTVAEgTKgZtB7CL3wrtlD+H2nY6alEITCiCI+g2oNnWjTzbSYhkaaIrNjCAa7TANSVfkdZrFC5zZwMg+Cv+fK8mxgRypeDGrwTmN0MQsjWhEUQahMhK8WXoab9O4Rf5VG+7o7v9a780NYQ3AJaE3VUPeGf6vzIiMGVRuOLFgMgg175c1RutHG93X31UdncpO3sdF9/h7otkGCfnslbvC3QVzCYGNG3ArxfbDRddvn98374D/jP+M/Xz78FBtbu13FRtg++M/4z/jPeyq3Nrb2g/X52X/ubGrt37/cPr+vzgf/Gf8Z/5mJeI6/fSZy+i1eX59coevZW+DrEzHFJ2x2H6sfY54DZ2/PHh1aqP325wOOdeTOyX9w9+jTO7A3fCU8eQPg+PAEdj0ufHGxfNINCA1fCO/x4gLHe13jLg1XfmVtrw1UVyn9a0++xTe/nkNhg73hdfNdfQxH8sXF3/55AMNTfAu2+f7/kYP/YtPk/rJFMnP6u7fAiweLm1gH54IPkSaN7bK+/A2A7x4ywePTexc4e3lCr3W+eywEc1EsTDCjBSGIFy8/d6qHaMvDfPoOeK3r49VjJvgPqn9SkxyMHjSvQO2k65VuLFIekzLbUBHRC1oTmxkJSf560Llb2V/e+YRjOIwnb5ZJRURLC168XfIseBEB0cc9O7pYHI6OXjLNsyOAd/6fLmiefvwtSmNz15N3NH1HBl4xo2N68gWo7rFTPXLbBTHM80J9tvV8s0gV668+q0hOjg76V2LtTZfROD2aHb0lln+WcRHRC1rjzYSEKH+BNBT90c4HHMNhvF9qycwyPTxegr9X5gEyHOkELvloi8l72nvPliSyHnngTn9b0rbMQs8ucM7tHizj/R0M4OyTE/f0DbV/X2wXv4uip3qIpzApzM9d/U9o2IR/LRIkz6+dPTkYPWkWL+y9jMbiBRkXEb1gK9hMvEDyV6hbyR/vevkxHIPwOZ/ZuY9zIYEkMSTfog9H2N3xkVYQTEsX0a0J73HiI8M9mZigxwRUD82xPXwhbNIEKXNyMHrULNh6WY2LyIjkhVvlzQQkf4W6lfzxrhcdw4HwyI9dzU9nD4X1Tkg09VEQ9s+CiTBzuPeLDveT69P0Mhc4Z2UseOseGxzbHL48sJ0T7azJweirZg31Uo1ryIjoBVvhZl5CAruV/PGuFx3DiQiZq3r5q4daJr4+4T4izAxHpF0o3BdhaZd48jExfXnC+5SZCb3Dkq96aCrCl6ew0y9/VaQK1uRg9F2zhHrJxmVkRPSCrdbNOuENSv5g19Sp+xjOQ/ichYpPuyAbH9Yz5AGM7KMitK9X5A31lLlPOXcixGMFDOErnl3Q420NGD1qrqMZF5ERs5cjwG4lf+uugp5jOJ3nKE3qCb2RQwDfgp2TwGUfDVl8NZxbdYpYAUv4BE30K3IJYyaUdPrrqMY1ZMTs5QjWbj3+eNfWY7g3POazRyz0ZaBSng0hoTbu9OpQX8Ota4HopLmaNXETMiJ6ka1aWbv1+ONdLzqG05B8tA/svVq2AH9fPs55Ns4eCe5r8BzU7sk7neIviD2HfCRVPba2glC/xjntyBr0Cl9ccFjYFtb9mpARsxcDbwYSHGu3Fn+867XHcDz38JWQ8dOPPyl981vWCe/J1E55dienPy5i7Fz613sPzGyqH5CrOgM4+/SE3uFRjW9OyjawxKp6pLYCqo+wWYvcZ9dA0Q3pd04KWx13lLiIjJi9GHgzliCgbjV/uOvlx3AswkCVs/LiiD6zoKMUrzWfPUXpRfZU5eio6JlZK9InHX98o3L2B9sjmjJOVY/cVqDqa6sPfXZzVANFN6TfyWFrcVHiIjJi9mLAzYwEhroV/cGuBxzDLf4lPSc+K8+chTFj87lbBje5kqFPgV/9xVXhnt5dePX4iYFHT+/K4Tw7Kn364MSpHtCWofoGRx6jf/fweQ0Q3WiWw1bjosRFZMTsxYCbGQkIbVD0BzsfcAw3/X0l7BS6ZX5dHr103TChFzEbJcJW6txtlfCjwfH2+X1LPvjP+M/4z9sdH93a1Nov9sCtOxtbG6rYCNsH/xn/Gf95S+WHtze29qM9fF+IO9sav94+v+/TB/8Z/xn/+b/fCUZ88/2YmFKKFXRpXIFa6EMYMNrI6A5jAm+NkYZKrVuNw6pMKK1CPgJ7HXLA5cADLO1NH2MrsMN8ENNBaMYfXGoemrXIQFiRHhhDOxjlrzzi/uOM0nIvjpdDmFhLgNR2KzEDzYokzBXy9Qyp3SPrBpMRC2P5M/JCFNac4UCGfeCNsDIIA4BpHbx5g2Ku/1QhXw8Q98iqwbQA6ZGUo18SUv45Lyw6BzI8IDtshzGV3166BjPOueuDgS0tnReWlE7Yc3XfJ3A+yzsGH1aaxL0yGVcT6gi+luDNBD2V3iBSI2NQt8GIktL3BQTFgVX4gLLN6OjBLgdhipvKajtzZ7JVHLxBlXultHillBoimYllgcgrtBORkmiL88zvxPxQpDE2BpoS+0yiVQQNIqZMeHDutWgkEubvFzjwJTazI8pAC2cQvEYSiHYjkRtFVaIHa6HMhtySZ0MmliGV5RRE7ploUKx1KiR2Fq0maBCBMiAnKAwsOurpH/NX8eswAYUGmAKtkJ5sBLMwEFoCN57bMhciGlSFK9+iEwI99TTUa2fBsxE4qM4DTViTkbtSwhkIGiiHqY76iIJGkVwmsdPnjbkMBiHR4Tl/R3Ncg5HWQUKW19UeaJlWdhIzsqeRBU3V+HIQqm6y0BrnRyEjCWh4kpJGbhz1Hg2CBmP76qTSAUnulOdLC0xpJnvSFYgEL6h0QENnVVZTg0Qj3TLoqhWfRn9RYbJ2aNxSEXuFRlhwLIIGY82k/xoOYygPWXt39ewW5NU0UIOpTMrUh6LuF3XVOqINX3YlNsTtDNdslRjEhBkEDcaJipmd0j0HLuYnUCtQJrdYZnrSpiIllNeIWa5saa7VVc10cUhpNkFPbamzIKwm4kSqIqgZBA3GdWiKJ3c4I57RQwXS8lwQGlOl20rpSKUVpUHVhPSJRlw3oxzz7Lj1cDqumWYJ3h3sxBXwQDIKjgCZ0ryGN8dkIwFjF0IYDAjvpAIQzTTr0eg0dSY2UfNrhkaeNL5vEOmlVG+gK1eRIyanEQT6elphEjYgpSAj2z8Q47OxAxqDoMHYfzPtx+HOBPhKGlaXwXKCy8uHQC/Tcjuuakco4RrEa04NIShxAVHwPKfZIGgSE6mK8QfLbftosd4n9tFKyPyBzYwsw677Aa+UsjDLdi1RrYVbT0Yq7sR4hJ4nadCYBB+DoEhc+ERGEMJrDE7N46XPu9K1PoL1cdRqiz3ICXGCMMn1/Jqp2e0Eu/KiQqR2zYioqTo69mRqgo2UirOftEPRVDLlvRCh60qZ68+t2jKiSU5VQREklwHxHTfqA2viMvF8EY7rueN9nRRoU47tQ9FMCZLiDKDTcBMXbjVVRJDM5dJrMEBzMRcptAwxZYkFBdBRoJCoEV17NEERBMqAmkHtAOHZ8Ix0CL8vhZZvHrxQGFHEZ9BKGTrRppuZbCNNkdkxBIMdcU5BVeV3mMUKndvAyTwI/p4ry7OBHal4Magldxqji1kY0YqgCEJlImy18Fmk4/covXvEr1a/Js+v9e78ECoE5YjWVA11b/i3Oi8yYlC14ciCxSDYsFfeHKUbbXxfd199dCY3eRsb3efvgW4bJOi3V+IGfxvEJQw2ZsStEN8HG123fX7fvA/+M/4z/vP1w53bm1r79R740e2Nrf2kio2wffCf8Z/xn7dUbt3Z2Nqwh+8L8dGtTa39Yvv8vk8f/Gf8Z/znh06e42+fiZx+i9fXJ1foevYW+PpETPEJm93H6seY58DZ27NHBxtP714AZ989OtxYR+6c/Ad3jz69A3vD18E9AEdHwPkBy5M3OC58cbF80g0IDV8F93H2gHz6432ucZeGK7+yttcGqquU/rUn3+KbX8+hsMHe8Lr5rj6GkxBG+DHbgx248BTfgm2+V8F7nLutEmFLVpWX370FXjxYNh9iHZxLPkWINLbL+vI3AL57yASPT+9d4OzlCb3W+e6xEMxFsTDBjBaEIF68/NypHqItD/PpO+C1ro9Xj5ngP6j+SU1yMHrQvAK1k65XurFIeUzKbENFRC9oTWxmJCT560HnbmV/eecTjuEUhCmlbtjixdslz8LugwiIPu7Z0cXicHT0kmmeHQG88/90QfP0429RGgvwyTuaviMDr5jRMT35AlT32Kkeue2CGOZ5oT7ber5ZpIr1V59VJCdHB/0rsfamy2icHs2O3hLLP8u4iOgFrfFmQkKUv0Aaiv5o5wOO4SiWGeB/ltFcRqZxnVhsTu+VeYAMRzqBSz7aYvKe9t6zJYmsRx6409+WtC2z0LMLnHO7B8t4fwcDOPvkxD19Q+3fF9vF76LoqR7iKUwK83NX/xMaNuFfn5zQ4f3a2ZOD0ZNm8cLey2r831/5wUfGRUQv2Ao2Ey+Q/BXqVvLHu15+DAchLAZlZsFrGSZ1LiSQJIbkW/ThCEsA30oXuCmJiG5NeI8THxnuycQEPSagemiOa8IXd0bSdt+cHIweNQu2XlbjIjIieeFWeTMByV+hbiV/vOtFx3AsbE/1VC5TcTA8FNY7IdHUR4GF8PWJYCLMHO79osP95Pp8buA1FzhnZSx46x4bHNscvjywnRPtrMnB6KtmDfVSjWvIiOgFW+FmXkICu5X88a4XHcOR0ND40Du2vfzVQy0TX59wHxFmhiPSLhTui7C0Szz5mJi+POF9ysxo70iZUT00FeHLU9jpl78qUgVrcjD6rllCvWTjMjIiesFW62ad8AYlf7Br6tR9DAcjTMymT7sgGx/WM+SWQfZREdrXK/KGesrcp5w7EeKxAobwFc8u6PG2BoweNdfRjIvIiNnLEWC3kr91V0HPMZyMsNxKKTA0cgjgW7BzErjso/K1lPHVcG7VKWIFLOEjxRevyCWMmVDS6a+jGteQEbOXI1i79fjjXVuP4XTUCytju78MHRb6MlA1H4aQUBtX6WUhfA23rgWik+Yy1LgJGRG9yFatrN16/PGuFx3DefCAvz6R02Xv1bIF+Psb/bZme+QXRtYaPAe1e/JOp/gLYs8hH0lVj62tINSvcU47sob1MaJw3MJyZ2F9dGlCRsxeDLwZSHCs3Vr88a7XHsN5P696n1ydnf6WLTf38JWQ8dOPly3SosQ64T3ZjFGe3cnpj4sYO5f+9d4DM5vqB+SqzgDOPj2hd3hU45uTsg0ssaoeqa2A6iPbmz+5z66Bogv9zklhq+OOEheREbMXA2/GEgTUreYPd738GE76dVO83Om1OB+oclZeHNFnFnSU4rXms6covcieqhwdFT07izz6pOOPb1TO/mB7RFPGqeqR2wpUfXr2oc9ujmqg6EK/k8PW4qLERWTE7MWAmxkJDHUr+oNdDziG037d6bO37Omz/JP0nPiMPHPmY8bmc7cMbnIlQ58Cv/qLM7P9MuyFV4+fGHj09K4czrOj0qcPTpzqAW0ZV59u895FyfLzGiC60SyHrcZFiYvIiNmLATczEhDaoOgPdj7gGO74+0qkHftW+XV50lusNkzoRcxGibCVOndbJfxocLx9ft+SD/4z/jP+89MYP8PG1n5ZxUbYxn/Gf8Z/fuTjp9jY2u3t8/vqfPCf8Z/xn//vB8GIb74fE1NKsYIujStQC30IA0YbGd1BTBCbN9FQpXWrcViVCaVVyEdgr0MOuBx4gKU9xBhbgR3mQ5geYhtNP7jTPDRrkYGwDjzsMbSDUf7KI+4/ZpSWozheDm2ShSBq7VZiBpoVSZgr5OsZUrtH1g0mIxZGIKc0A4jCmjMc1B9EoDfByiAMAKZ18KFxKzIjVcjXA8Q9smowLeDJEJ47NpHkBaZwUP+VhOyssB3GVH576RrMOOeuDwbMyj8+AUHYc3UHNAEYKnE+yzsGH1aaxL0yGVcT6gi+luDNBD2V3iBSI2PQowmS0gHNAPhaXBSGjh9Qthlk1uqQg+A+ldV25s4jgDx4gyr3SonsJVNDJDOxLBB5hXYiUhJtcZ75nZgfMjlXNgaaEvvcFRRBgwiVSTT6dmsnkTAfzviywlfjwOqgy0CeAQy0cAbBaxSn2g605UZRJWhnwlCqjVvy8SATy5DKcgqicJakQbHWqZDYWbSaoEEEyoCcoG7VsxiYf8zsgHYFJqDQAFOgU30vF0q3uBO48dyWuRBRUxWDCkUnFKGUY0O9dhY8G4GD6jzQu+ImI3elhDMQNJCjdx31EQWNIrkMDKKvb5HTAeExkzG7FRhpHSRkeV3t+ZAaFx+JGZmWVwyaqvHlIMyKk4XWOD8KGUlAw5OUNHLjqPdoEDQY21cniRjjbl7ElE55yvRAtwaR4AWVDmjorMpqapBopFsGXbXu0wZAhcnaoXFLRewVGmHBsQgajDWTcgU979zBjL6ZW4PdgryaBmowFWnqQ1H3i7pqHdGGL7sSG+J2hmu2SgxiwgyCBuOENOPT0gBkaQY5nOmAXR3K5BaBKZE2FSmhvEbMcmVLc62uaqaLQ0qzCXpqS50FYTURJ1IVQc0gaDAuIDS2Re4OZpSCr0RangtiC8J9gZOOVFpRGlRNSJ9oxHUzyjHPjlsPp+OaYZvofHATSmHXoNx9ibOdfF4jn+41PMWgaiMtoXchhMGA8E4qANFMsx6NTlNnMjxNnqVN0sHMAIRViPRSqjfQlaV2xOQ0gkBfTytMwgakFGRk+wdifDZ2QGMQNBj7b6aSDm88MLs1aFhdBssmOWN0QC/Tcjuuakco4Qrka04NIShxAVHwlAnZIGgSS0YDszDbt0D7iNkp/3IfrYS86NkuGdh1P+CVUhZm2a4l9xK1cOvJSMWdGI/Q8yQNGpPgYxAUiQufyAjKmxZaYJacmkdMRlbqYNAYyLv+JgiTXM+vmZrdTrArLypEateMiJqqo2NPpibYSKk4+0lbXqZSld4LEbqulLkGcltGNKlfVVAEyWVAfEcVU8ffHd2Kc/oTplfW0hFICkKbW3GaRk4JkuIMoNNwExduNVVEkMzl0mswQHMxp4lGoL9tILGgADoKFBI1oonVBEWQUAbdsHmiMb0/fEY6iJnIbGcdJc5n0EoZOtGmm2kxDY00RWbHEAx2xDkFVZXfYRYrdG4DJ/Mg+HuuLM8GdqTixaAG7zRGF7MwohVBEUSUCbPw952OGTSP4nmhP8i/btSv9IbSEMIagiGENVVD3Rv+rc6LjBhUbTiyYDEINiwbevFrFFWjw5an81fDozO5ydvY6D5/D3TbIEG/vRI3+NsgLmGwMSNuhfg+2Oi67fP75n3wn/Gf8Z//Pz66tam1X+yB/7qzsbX/rmIjbOM/4z/jP2+p/ODWxtZ+uD4//8+dTa39e94+v+/TB/8Z/xn/GdJ4jr99tnfb02/xerUIv5A5/d1bAC8enKgoWt/95Sbi9O7Rp1eZPjOvnyfvlleOAHx9YuPZBZZGtG4evrhYknmFaTTzwuE9+bfHpf5h7NH7wFcPF7sv3+H1pVu7r4H198m3+MZdYWSYqpm7Dn9j+NRwTATeL1NE1cRxeu/KcnO93Cf5AXD2iM7QNt7LfbXR8eQNXvMetf167ijcTUgX9Th++g54LRkUvvxNOcg95KrHp/cugFePyy5F30OLmrWUUlz3S0dRRTklp8/elqOlHMmLl5+robBjJjHkaWQuF0vkjwtKJrJaRSinNcB8mMg/aA5OFFdGS6bFkBuzOmfpXM75VCqsc7XjqdIlw9/jq7wnnX763jqV4LiWP5Vj27loUBRwdgRaSoIQUJaHZ0cX5RB49JLHImtWUooRCtsgJiCdLVHCpodtgLofq6GwMF+8XaJkyNZHSzbtmTgXhTCtyivmc8xmHZyV9H31meLKWMkUUJHVUdityHmf2pSC1jqeI14x/D04vbf02h/e4avHToOltBacPXCnn4sG7j11fUYqgwp9clKuH85NC5Wi6VPKEZ5+W+Yc1s2y/DKNPX1HQngPlGnyy4vFTAuFRvK4bOI5kvVy8lzQMhHVakI5rYQU5dM3i2PhX5+ckBpSI+QHISuZZoYaJ3UcnovVka4iZax2vIh4wfB3+XmBZxegpWT8k0pINrmBto9+z+a6Je88jRoGTZtSjeu5MP8KdSH0+enHj4QapAKGUO7zxZDB/KjGgpaJWFgTymlVipwYvRM6QXZt4FjIDDZe1ckN59q2x7rk2M3xu18w/E14Sha75af98Fo0Eo53ghtVFdKpYNKUKdW4nrzRSoVPIRYJUgpaKOTzHsoIoizKikyoQpRW6RkucK6nV3StIObkxiR1CjQXb0+X39+XeucUdm8f/niE378kC8nZseWDffAeOCLtQoTkUcWkmVN6yATE+5OrWCXuG0IpAZSLZAkmKlCRCVVoSVtC8Dr98ldFtUBc9wCPw1InQnOZ7YnpEopAYff24W/weVd9rbNw9mgPCO3rSiyaDQhKZfI4diLnmoQdenInWzszFZnQhOoIdfPsgqruE95SSp0VzkmTsASqIWW2D38HWF+ZdmqCy/rI47kOk2YdrnBO9ffy09LouejcTEUmVKESkleRwqvPyyjZJ7hlVGcFc+6fvcC5RpZ52fDnw4PkydOgVkv46yFtRVZC0mxDVl1malVekZD6XENejyhMVKAiE4rQllbD+5OXHYO67od/9FOqEZVz6aVyL6CQZV42/F0Qf7L9Ac75LHguSJ5+a0TQr0PYqUia1ZQiwgD+u7iqET32affItY/gvghoSNFyROsn7xYqMgGBIK3K2SOuRStSmMVlVwObZAWeRFKn2XJyofdLqHJ0WeZlw9/khfvs/3rKav0evlL3RV/9hS5k50Tym5Nyb2iDm7Jj7V/vPTB22eJx+uMlMItmISVFzoW+GrJ7VxwXiZKcsuNc5HROP/6kuPx2yRtFsv7yomSzIhMUKKdVwdmnJ/TSV1og7pZEqa5ajTrJawJsnNVJ0ND6hEyiOpejczL7h7/JN7uH8myi7PQfkcRo4/q0aAHgHUufafzxjRXh2cwRechigJizpFo0Kyk1nrOYlJIi7eWJ+HCoDHAD37I3MR4zJWotZdOWCaUI0iqc/YH5PKI7TvqM6WhJtcX1vkSUjGDjrE6ChsL7NveXZIsd72R2D38b3P/evSipKedQ/pPcnhats1f0fdHsmfATK8yBPnZ/9RdTl9E57Ky82degWUopYhi7PB/ifdWzo5LIByeGwMkz85LFx1yJpRY8m8ZMCKOQVuXR07skMjEh3z18vlSi7GrASd4SkIqozkI5w5MD3RQKHe927x7+ufy+En6Ovr6bUs7n13nHPxjInd/N8XVW13nHPxbYNc8N8evZo+u842/Btb4c3xS/vr7WO/6hwI8Mx+6GaNd6x39+/rkl4z/jP+M/3+W4c3tTa7/eAz+5vbG1W1VshG38Z/xn/Oe9kzu3N832649+dHvjbD8BAA==) | <ol class="arabic simple"><br><li><p>当 OSTree 部署新配置时，它会创建一个 systemd 配置文件，名称中包含一个 <code class="docutils literal notranslate"><span class="pre">+3</span></code> 标签，表示最大重试次数，例如 <code class="docutils literal notranslate"><span class="pre">ostree-boot+3.conf</span></code>。这会启用启动计数。</p></li><br><li><p>systemd-boot 检测到配置文件名中的标签 <code class="docutils literal notranslate"><span class="pre">+3</span></code>，并将其重命名为 <code class="docutils literal notranslate"><span class="pre">ostree-boot+2-1.conf</span></code>，表明一次启动尝试已开始。重命名文件后，启动过程继续。</p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">systemd-bless-boot-generator</span></code> 创建 <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code>，当达到 <code class="docutils literal notranslate"><span class="pre">boot-complete.target</span></code> 时启动。如果 Linux 启动过程中出现任何故障，<code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code> 不会从配置文件删除 <code class="docutils literal notranslate"><span class="pre">+2-1</span></code> 计数器标签。</p></li><br><li><p>在后续启动中，systemd-boot 检测到配置文件名中的 <code class="docutils literal notranslate"><span class="pre">+2-1</span></code> 标记，将文件重命名为 <code class="docutils literal notranslate"><span class="pre">ostree-boot+1-2.conf</span></code>，并尝试使用它进行启动。</p></li><br><li><p>如果 Linux 第二次尝试启动失败，则 <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code> 不会从配置文件中删除计数器标签 <code class="docutils literal notranslate"><span class="pre">+1-2</span></code>。</p></li><br><li><p>在下次启动时，systemd-boot 会检测到配置文件名中的 <code class="docutils literal notranslate"><span class="pre">+1-2</span></code> 标记，将文件重命名为 <code class="docutils literal notranslate"><span class="pre">ostree-boot+0-3.conf</span></code>，并尝试使用它进行启动。这是启动 Linux 部署的最后一次尝试。</p></li><br><li><p>如果设备在第三次尝试时无法启动 Linux，则 <code class="docutils literal notranslate"><span class="pre">systemd-bless-boot.service</span></code> 不会从配置文件删除计数器标签 <code class="docutils literal notranslate"><span class="pre">+0-3</span></code>。</p></li><br><li><p>在后续启动中，systemd-boot 会发现配置文件名中的 <code class="docutils literal notranslate"><span class="pre">+0-3</span></code> 标签。由于计数器已达到零，因此该入口文件（配置文件）被视为已损坏。systemd-boot 通过尝试有效的配置文件条目恢复到早期版本。</p></li><br></ol> |
- **Usrmerge**

    Linux 中的 usrmerge 功能通过合并 `/usr` 路径下的某些目录来简化文件系统布局。它将 `/bin`、`/sbin` 和 `/lib` 三个目录分别与 `/usr/bin`、`/usr/sbin` 和 `/usr/lib` 目录合并。

    使用 usrmerge时，通常位于 `/bin`、`/sbin` 和 `/lib` 可执行文件和库将位于 `/usr/bin`、`/usr/sbin` 和 `/usr/lib`。原始目录成为指向 /usr 对应目录的符号链接。这种统一的结构使维护更容易，并减少了冗余，因为二进制文件和库只有一个位置，而不是root和 `/usr` 目錄。符号链接可确保兼容性，因此引用 `/bin` 之类的路径的脚本和软件仍可工作。

    Linux 分发版正在采用 usrmerge 以符合文件系统层次结构标准 (FHS) 的建议并简化根文件系统，尤其是在容器化和嵌入式系统中。

    Debian、Ubuntu 和 Fedora 等分发已采用 usrmerge 作为其系统布局的一部分，使其成为最近版本的标准。转换通常涉及创建符号链接并将任何剩余文件从原始目录移动到其 `/usr` 对应目录。

    总之，usrmerge 功能整合了 Linux 文件系统，使其更易于管理、更现代化，并符合系统管理和容器化不断变化的需求。
- **在 Qualcomm Linux 中** **管理** `/var`，`/home`，`/media`，`/mnt`，`/opt`，`/srv`，**和** `/usr`

> 
> 
> OSTree 将 `/var` 视为持久目录。这意味着用户/运行时在 `/var` 下创建的内容不受 OSTree 的影响，并在 OTA 更新中持续存在。有关详细信息，请参阅 [OSTree 概览](https://ostreedev.github.io/ostree/introduction/)。
> 
> 
> OTA 更新期间 OSTree 未影响的其他目录是 /home、/media、/mnt、/opt 和 /srv。这些目录被 OSTree 映射为符号链接，如下所示：
> 
>     - `/home` 是指向 `/var/rootdirs/home` 的符号链接
>     - `/media` 是指向 `/var/rootdirs/media` 的符号链接
>     - `/mnt` 是指向 `/var/rootdirs/mnt` 的符号链接
>     - `/opt` 是指向 `/var/rootdirs/opt` 的符号链接
>     - `/srv` 是指向 `/var/rootdirs/srv` 的符号链接
> 
> 
> 
> /home、/media、/mnt、/opt、/srv 和 /var 下存储的任何运行时数据在 OTA 更新期间都会保持不变。
> 
> 
> 为了维护干净且一致的文件系统，OSTree 建议在编译时不要在上述目录下安装任何 artifact。编译时安装在这些目录中的任何 artifact 都不会打包到 Qualcomm Linux 编译命令生成的 rootfs 镜像中，即，`bitbake <image recipe>`。
> 
> 
> 
> - 运行时在持久路径下创建文件和目录可以按如下方式处理：
>     - 1. 当需要时，进程可以在运行时创建文件或目录。
>     2. `/run/`，`/var/lib/`，`/var/cache/` 和 `/var/log/` 下的路径可以从相应的 systemd 单元文件创建。以下是一个[参考](https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html#RuntimeDirectory=)。
>     3. 可以在启动时使用 [systemd-tmpfiles](https://www.freedesktop.org/software/systemd/man/latest/systemd-tmpfiles-setup.service.html) 创建文件、符号链接和目录。
> 
> 
> 
> 
> OSTree 在 `/usr` 创建只读绑定挂载，确保核心操作系统文件对用户来说是不可改变的。这种方法有助于维护系统的完整性和安全性。/usr 挂载点被 OSTree 用于部署下一个更新。
> 
> 
> 
> > 
> > 
> > Note
> > 
> >     - OSTree 允许将文件和目录安装在编译时的 `/var/local` 路径下。
> >     - 尽管 OSTree 保留了安装在 `/usr` 下的内容，在编译时，它不会将安装在 `/usr/local` 子目录中的内容打包至 rootfs 镜像。
> 
> 
> 
> 在启用 OSTree 的 Qualcomm Linux 中，`/etc` 目录的管理方式允许系统更新和本地定制。
> 
> 
> 
> > 
> > 
> > - `/etc` 目录是可变的，可以在运行时进行修改，以维护需要在更新过程中持久存在的系统配置。
> >     - OSTree 支持将 `/usr/etc` 目录的配置文件合并至 `/etc`。这使得 OSTree 可以更新默认配置，同时保留所做的任何本地更改。
> >     - 当应用更新时，OSTree 会使用文件的原始版本、新更新的文件版本和本地修改的文件版本对 `/etc` 中的配置文件进行三向合并。
> >     - 如果在合并过程中发生冲突，OSTree 会保留运行时所做的修改。这有助于维持系统稳定性并确保关键配置不会被覆盖。
- **SOTA 分发包特性**

    软件 OTA（SOTA）分发包特性支持嵌入式系统和物联网设备的远程更新。它集成了 OSTree 等用于系统更新的工具，允许设备无需物理访问即可接收和安装更新。该功能包含在 Qualcomm Linux 参考分发版配置中，具体如下：

> 
> 
> DISTRO_FEATURES:append = " pam overlayfs acl xattr selinux ptest security virtualization tpm usrmerge sota"
>         Copy to clipboard

    SOTA 分发包特性位于 `meta-qcom-distro/conf/distro/include/qcom-base.inc` 文件中。

## 使用配方处理树外内核模块和设备树

要编译树外内核模块，请参阅[添加内核模块](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-3/customize.html#add-kernel-module)。

Note

Qualcomm Linux 仅在 `custom` 变体上的内核外设备树覆盖。

有关设备树/设备树 blob 管理的信息，参见[平台支持](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-3/customize.html#platform-support_0)。

## 从 SD 卡启动 Linux 操作系统

Qualcomm 开发套件可以从 SD 卡启动。

使用 `EFI.bin` 和 `system.img` 刷写以准备 SD 卡。将准备好的 SD 卡插入开发套件的 SD 卡槽中。开发套件从 SD 卡启动，其中包含备份或冗余操作系统以确保持续运行。

要从 SD 卡启动 Qualcomm 开发套件，请按照以下步骤操作：

1. 将 SD 卡插入 Qualcomm 开发套件。验证插入的 SD 卡的设备节点，例如，`/dev/mmcblk1` 或者 `/dev/mmcblk2`。
2. 要格式化 SD 卡，请运行 UART shell 上的 `mkfs.ext4 <sdcard slot>` 命令。

    在以下示例中，SD 卡的 dev 节点为 `/dev/mmcblk1`。

mkfs.ext4 /dev/mmcblk1
        Copy to clipboard

    输出：

mke2fs 1.46.5 (30-Dec-2021)
Found a dos partition table in /dev/mmcblk1
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 3889536 4k blocks and 972944 inodes
Filesystem UUID: 069e04f8-0b72-4a94-aa93-f5ec03bea38d
Superblock backups stored on blocks:

> 
> 
> 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
3. 使用 `fdisk` 命令在 SD 卡上创建两个分区复制 `efi.bin` 和 `system.img`。

    1. 创建第一个分区作为 `vfat` 类型以复制 `efi.bin`。

        要创建分区，请运行以下命令（例如，dev 节点是 `/dev/mmcblk1`)：

fdisk /dev/mmcblk1
            Copy to clipboard

        输出：

Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

The device contains ‘ext4’ signature and it will be removed by a write command.
See fdisk(8) man page and –wipe option for more details.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xa5fa6b03.

Command (m for help): n
Partition type

> 
> 
> p   primary (0 primary, 0 extended, 4 free)
> e   extended (container for logical partitions)

Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-31116287, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-31116287, default 31116287): +512M

Created a new partition 1 of type ‘Linux’ and of size 512 MiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

        要将分区转换为 `vfat` 类型，请运行以下命令：

mkfs.vfat /dev/mmcblk1p1
            Copy to clipboard

        输出：

mkfs.fat 4.2 (2021-01-31)

> 
> 
> Note
> 
> 
> 在此示例中，保留 `First sector` 字段为空，并确保 `Last sector` 足够大，以复制 `efi.bin`。

    2. 创建第二个分区作为 `ext4` 类型以复制 `system.img`，如下所示：

        要创建分区，请运行以下命令（例如，dev 节点是 `/dev/mmcblk1`)：

fdisk /dev/mmcblk1
            Copy to clipboard

        输出：

Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
Partition type

> 
> 
> p   primary (1 primary, 0 extended, 3 free)
> e   extended (container for logical partitions)

Select (default p): p
Partition number (2-4, default 2): 2
First sector (1050624-31116287, default 1050624):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-31116287, default 31116287): +10G

Created a new partition 2 of type ‘Linux’ and of size 10 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

        要将分区转换为 `ext4` 类型，请运行以下命令：

mkfs.ext4 /dev/mmcblk1p2
            Copy to clipboard

        输出：

mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 9e470d01-77fe-4382-a273-ab8b022bdd8b
Superblock backups stored on blocks:

> 
> 
> 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

> 
> 
> Note
> 
> 
> 在此示例中，保留 `First sector` 字段为空，并确保 `Last sector` 足够大，以复制 `system.img`。
4. 验证创建的分区，如下所示：

lsblk -f /dev/mmcblk1
        Copy to clipboard

    输出：

NAME FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
mmcblk1
|
[|](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#id16)-mmcblk1p1
|    vfat               1EAC-8FF8
[`](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html#id18)-mmcblk1p2

> 
> 
> ext4               9e470d01-77fe-4382-a273-ab8b022bdd8b
5. 使用 scp 命令从主机上成功编译的 Qualcomm Linux 镜像将 `efi.bin` 和 `system.img` 复制到设备。

scp -r <efi.bin> <IP_address>:<path>
        scp -r <system.img> <IP_address>:<path>
        Copy to clipboard
6. 将 `efi.bin` 和 `system.img` 从设备复制到 SD 卡上的分区，在设备上运行以下命令：

    - `dd if=<path>/efi.bin of=<sdcard slot> bs=4M status=progress`
    - `dd if=<path>/system.img of=<sdcard slot> bs=4M status=progress`

    要从设备上 `/tmp` 的路径复制两个镜像，以下是如何将它们复制到 SD 卡的示例：

dd if=/tmp/efi.bin of=/dev/mmcblk1p1 bs=4M status=progress
        
        dd if=/tmp/system.img of=/dev/mmcblk1p2 bs=4M status=progress
        Copy to clipboard

Note

在此命令中，SD 卡的 dev 节点是 `/dev/mmcblk1`。
7. SD 卡已准备好启动镜像。如果 UFS 上的 EFI 分区损坏或 systemd-boot 失败，设备将从 SD 卡启动以确保持续运行。

Note

SELinux 在Qualcomm Linux 镜像上被禁用，该镜像刷写在 SD 卡上。

## efivar 工具的使用

efivar 工具管理存储在非易失性固件存储中的 UEFI 环境变量。使用这些变量来配置 UEFI 固件及其环境。

efivars 是存储在 UEFI 固件中的键值对。它们保存启动配置、系统状态和其他必要参数的设置。efivars 管理启动项和固件设置，确保系统正确启动并维护其配置。

要与 UEFI 环境变量交互，请使用以下命令：

> 
> 
> efivar [-n name] [-f file] [-p] [-w]
>     Copy to clipboard
> 
> 
> 命令选项：
> 
> 
> -n name: Specify the name of the UEFI variable.
>     -f file: Load or save variable contents from a file.
>     -p: Print the value of the specified UEFI variable.
>     -w: Write to the specified UEFI variable.
>     Copy to clipboard

- **更新 OsIndications 变量**

    以下是更新 OsIndications 变量和验证 EFI 变量的值的步骤：

    1. 创建一个包含特定字节序列 `04 00 00 00 00 00 00 00` 的 `data1.hex` 文件。

echo -e -n "\x4\x0\x0\x0\x0\x0\x0\x0" > data1.hex
            Copy to clipboard
    2. 将 `data1.hex` 内容写入到 EFI 变量 `8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications`。

efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -f data1.hex -w
            Copy to clipboard
    3. 要验证 EFI 变量 `8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications` 的值，请运行以下命令：

efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -p
            Copy to clipboard

        上一个命令的输出：

> 
> 
> GUID: 8be4df61-93ca-11d2-aa0d-00e098032b8c
> Name: “OsIndications”
> Attributes:
> 
> 
> 
> > 
> > 
> > Non-Volatile
> > Boot Service Access
> > Runtime Service Access
> 
> 
> 
> Value:
> 00000000  04 00 00 00 00 00 00 00

有关详细信息，请参阅 [efivars 手册](https://man.freebsd.org/cgi/man.cgi?query=efivar&amp;sektion=8)。

Last Published: Jan 24, 2025

[Previous Topic
概述](https://docs.qualcomm.com/bundle/publicresource/80-70017-27SC/topics/intro_yocto_linux_qualcomm.md) [Next Topic
用户定制](https://docs.qualcomm.com/bundle/publicresource/80-70017-27SC/topics/user_customizations.md)

Source: [https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70017-27SC/topic/platform_software_features.html)