# Qualcomm Linux 功能

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

本章提供了有关 Qualcomm Linux 功能的信息，具体包括以下主题：
- 元数据层，包含在 Qualcomm Linux 中
- Qualcomm Linux 元数据层中的配方和配置
- Qualcomm 在 Qualcomm Linux 中添加的软件功能
- Qualcomm 在发行版本中推出的工具
- 有关如何编译 Qualcomm Linux 镜像和元数据层的说明

Note: Qualcomm 软件发行版本基于 Yocto Kirkstone 发行版本。

有关 Kirkstone 发行版本对应的 Yocto Project 文档的完整索引，可访问 [https://docs.yoctoproject.org/4.0.18/singleindex.html](https://docs.yoctoproject.org/4.0.18/singleindex.html)。对于 Yocto Project 新用户，如果想要了解有关编译的信息，则在第一次尝试编译时，必须参考 Yocto Project 文档，网址 [https://docs.yoctoproject.org/4.0.18/singleindex.html#document-brief-yoctoprojectqs/index](https://docs.yoctoproject.org/4.0.18/singleindex.html#document-brief-yoctoprojectqs/index)。

Qualcomm Linux 环境由多个社区维护的元数据层组成，提供配方、软件包组、镜像和配置。Qualcomm 元数据层位于 community layer 上，为 Qualcomm 参考设备提供所需的额外软件组件。

## 元数据层概述

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

元数据层概述介绍了 Qualcomm 清单 ([https://github.com/quic-yocto/qcom-manifest](https://github.com/quic-yocto/qcom-manifest)) 中包含的层。该清单中包含重新生成参考版本所需的所有层。以下章节介绍了 Yocto Project 维护的层。Qualcomm 维护特定于 Qualcomm 参考设备的层，参考设备依赖 community layer 来实现全部功能。下图显示了 Qualcomm Linux 发行版本中包含的层：
Figure : Qualcomm Linux 元数据层
                ![](data:image/png;base64,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)

Table : Qualcomm Linux 元数据层及说明

| 元数据层 | 说明 |
| --- | --- |
| `meta-qcom-distro` | 该层为 Qualcomm 产品提供参考发行版本配置。镜像配方和软件包组在该层定义。 |
| `meta-qcom-extras` | 该层是已注册用户可选的元数据层。该层支持对所选组件进行源代码编译，这些组件以二进制形式存在于 `meta-qcom-hwe` 中。 |
| `meta-qcom-qim-product-sdk` | 该层提供 Qualcomm 基于 GStreamer 框架的 Qualcomm Intelligent Multimedia (QIM) 和 AI SDK。其中包括一组适用于实现多媒体和 AI 用例的 GStreamer 插件示例程序。 |
| `meta-qcom-realtime` | 该层包含特定于实时内核配置的更改。 |
| `meta-qcom-hwe` | 该层包含用于编译软件组件从而实现对 Qualcomm 设备的支持的配方，以及适用于 Qualcomm SoC 的增值软件功能。 |
| `meta-qcom` | 该层包含对 Qualcomm 设备的支持和上游 OSS 软件组件。 |
| `meta-virtualization`<br>[https://git.yoctoproject.org/meta-virtualization](https://git.yoctoproject.org/meta-virtualization) | 该层包含用于编译 OpenEmbedded 虚拟化解决方案和虚拟化工具栈（例如 dockerd 和 Kubernetes）的软件包。 |
| `meta-selinux`<br>[https://git.yoctoproject.org/meta-selinux/](https://git.yoctoproject.org/meta-selinux/) | 该层使能 SELinux。 |
| `poky/meta`<br>[https://git.yoctoproject.org/poky/](https://git.yoctoproject.org/poky/) | 该层提供编译工具和文件，即提供编译嵌入式操作系统所需的各种软件组件。 |
| `meta-openembedded`<br>[https://git.openembedded.org/meta-openembedded/](https://git.openembedded.org/meta-openembedded/) | 该层提供交叉编译环境。 |

### Qualcomm BSP 元数据层

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

以下层代表 Qualcomm BSP 元数据：
- [meta-qcom](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_ebf_3dd_51c_vinayjk_03-18-24-1703-23-746)
- [meta-qcom-hwe](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_tg5_3dd_51c_vinayjk_03-18-24-1703-34-31)
- [meta-qcom-realtime](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_atv_3dd_51c_vinayjk_03-18-24-1703-35-26)
- [meta-qcom-distro](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_yzv_3dd_51c_vinayjk_03-18-24-1703-35-206)
- [meta-qcom-extras](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_n3w_3dd_51c_vinayjk_03-18-24-1703-35-429)
- [meta-qcom-qim-product-sdk](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_rpw_3dd_51c_vinayjk_03-18-24-1703-35-615)

### meta-qcom

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

| `recipes-devtools/qdl/qdl_git.bb` | Qualcomm downloader (QDL) 刷写工具。<br>QDL 与 ID 为 05c6:9008 的 USB 设备通信，上传刷写加载程序并使用它来刷写镜像。 |
| --- | --- |
| `recipes-support/pd-mapper/pd-mapper_git.bb` | Qualcomm 保护域映射器应用程序。<br>pd-mapper 是保护域映射器服务的一种实现。<br><br><br>通过使用保护域映射器服务，用户空间应用程序可以访问 Qualcomm SoC 上的远程处理器。 |
| `recipes-support/qrtr/qrtr_git.bb` | Qualcomm QRTR 应用程序和库。 |
| `recipes-support/initrdscripts/initramfs-module-copy-modules_1.0.bb` | 用于将内核模块从 `initramfs` 复制到 `rootfs` 的 `initramfs-framework` 模块。 |

### meta-qcom-hwe

`meta-qcom-hwe` 元数据层托管于 [https://github.com/quic-yocto/meta-qcom-hwe](https://github.com/quic-yocto/meta-qcom-hwe)。它为使能 Qualcomm 设备提供了额外的软件支持。
- **BitBake 类**
有关 BitBake 类的介绍，可访问 [https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/classes](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/classes)。

| `classes/uki.bbclass` | 实现将内核镜像打包为统一内核镜像 (UKI) 的逻辑。<br>UKI 由以下各项组成：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_jbh_lcj_p1c_rasam_03-01-24-1541-50-230"><br>                                                  <li class="li">UEFI stub（来自 <code class="ph codeph">systemd-boot</code>）</li><br><br>                                                  <li class="li">内核镜像</li><br><br>                                                  <li class="li"><code class="ph codeph">initramfs</code></li><br><br>                                                  <li class="li">其他元数据（如 <code class="ph codeph">cmdline</code>）</li><br><br>                                                  </ul><br><br><br>如需了解 UKI 镜像，可参见 [systemd-boot](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#systemd_boot) |
    | --- | --- |
    | `classes/image-efi.bbclass` | 实现生成要打包到可扩展固件接口 (EFI) 系统分区中的镜像的逻辑。<br>生成的镜像包含设备树 blob (DTB)、内核镜像和 `systemd-boot` 管理器二进制文件。 |
    | `classes/qprebuilt.bbclass` | 实现使用预编译软件包代替获取和编译源代码的逻辑。对于继承 **qprebuilt** 的任何配方，该类支持对打包在 `tar.gz` 中的二进制文件进行解包，并使用 BitBake 任务对其进行打包。 |
    | `classes/qmodule.bbclass` | 默认情况下，Qualcomm BSP 通过在内核中启用 `CONFIG_MODULE_SIG_FORCE` 来强制对内核模块进行签名。但是，一些树外模块可能未正确签名。为了避免出现模块加载问题，`qmodule.bbclass` 会检查所有提供内核模块的软件包，如果尚未签名，则对其进行签名。 |
- **机器配置**
Qualcomm Linux 机器配置文件可在此处获取：[https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/conf/machine](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/conf/machine)。

| `conf/machine/qcm6490.conf` | 搭载 Qualcomm QCM6490 的开发板（例如 RB3 Gen 2 核心套件、RB3 Gen 2 视频 Mezzanine 卡和 RB3 Gen 2 视觉 Mezzanine 卡）的机器配置。 |
    | --- | --- |

    - **内核命令行**
        要更新内核命令行参数，应更新 `KERNEL_CMDLINE_EXTRA` 变量。

        `KERNEL_CMDLINE_EXTRA`

        `DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage; FZPU','',d)}"`

        `KERNEL_CMDLINE_EXTRA ?= "root=/dev/disk/by-partlabel/system rw rootwait ${CONSOLE_CMDLINE} 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 page_owner=on ${DBG_CMDLINE} swiotlb=128"`
    - **包含 DTB**
        要包含相应的 DTB，应更新 `KERNEL_DEVICETREE`：

        `KERNEL_DEVICETREE = " \`

        `qcom/qcm6490-addons-idp.dtb \`

        `qcom/qcs5430-fp1-addons-rb3gen2.dtb \`

        `qcom/qcs5430-fp1-addons-rb3gen2-vision-mezz.dtb \`

        `qcom/qcs5430-fp1p5-addons-rb3gen2.dtb \`

        `qcom/qcs5430-fp1p5-addons-rb3gen2-vision-mezz.dtb \`

        `qcom/qcs5430-fp2-addons-rb3gen2.dtb \`

        `qcom/qcs5430-fp2-addons-rb3gen2-vision-mezz.dtb \`

        `qcom/qcs6490-addons-rb3gen2.dtb \`

        `qcom/qcs6490-addons-rb3gen2-video-mezz.dtb \`

        `qcom/qcs6490-addons-rb3gen2-vision-mezz.dtb \`

        `qcom/qcs6490-addons-rb3gen2-ptz-mezz.dtb \`

        `qcom/qcs6490-addons-rb3gen2-ia-mezz.dtb \`

        `"`
    - **包含其他的 DTBO**
        如需添加要叠加在基本内核设备树之上的设备树叠加 (DTBO)，应更新 `KERNEL_TECH_DTBOS`：

        `# Additional dtbo to overylay on top of kernel devicetree filesKERNEL_TECH_DTBOS[qcm6490-addons-idp] = "qcm6490-graphics.dtbo qcm6490-display.dtbo qcm6490-camera.dtbo qcm6490-bt.dtbo qcm6490-wlan-idp.dtbo qcm6490-video.dtbo"`

        `KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2] = "qcm6490-graphics.dtbo qcm6490-wlan-rb3.dtbo qcm6490-display-rb3.dtbo qcm6490-bt.dtbo qcm6490-video.dtbo"`

        `KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2-video-mezz] = "qcm6490-graphics.dtbo qcm6490-camera-rb3.dtbo qcm6490-display-rb3.dtbo qcm6490-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-video.dtbo"`

        `KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2-vision-mezz] = "qcm6490-graphics.dtbo qcm6490-camera-rb3.dtbo qcm6490-display-rb3.dtbo qcm6490-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-video.dtbo"`

        `KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2-ptz-mezz] = ""`

        `KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2-ia-mezz] = ""`

        `KERNEL_TECH_DTBOS[qcs5430-fp1-addons-rb3gen2] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"`

        `KERNEL_TECH_DTBOS[qcs5430-fp1-addons-rb3gen2-vision-mezz] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"`

        `KERNEL_TECH_DTBOS[qcs5430-fp1p5-addons-rb3gen2] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"`

        `KERNEL_TECH_DTBOS[qcs5430-fp1p5-addons-rb3gen2-vision-mezz] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"`

        `KERNEL_TECH_DTBOS[qcs5430-fp2-addons-rb3gen2] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"`

        `KERNEL_TECH_DTBOS[qcs5430-fp2-addons-rb3gen2-vision-mezz] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"`

        用于生成 DTBO 的软件包必须添加到 `MACHINE_EXTRA_RDEPENDS` 变量以设置依赖项。例如，`qcm6490-graphics.dtbo` 添加到上述 `KERNEL_TECH_DTBOS` 列表，相应的软件包 `graphicsdevicetree`（用于生成 DTBO）添加到 `MACHINE_EXTRA_RDEPENDS` 变量，具体如下所示：

        `MACHINE_EXTRA_RDEPENDS += " \`

        `packagegroup-firmware-qcm6490 \`

        `graphicsdevicetree \`

        `displaydevicetree \`

        `cameradtb \`

        `wlan-devicetree \`

        `btdevicetree \`

        `videodtb \`

        `"`
- **固件配方**
    Qualcomm Linux 固件配方文件位于此处：[https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-firmware](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` | 处理对兼容目标的关键启动固件二进制文件的获取、解包和部署。<br>对于基于 QCM6490 的目标，该文件打包在 `QCM6490_bootbinaries.zip` 文件中。 |
        | --- | --- |

        完成编译后，可从以下目录中找到这些 zip 文件中的固件二进制文件以进行刷写：`<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/<machine-name>/<image-name>/`。

        `firmware-qcom-bootbins_1.0.bb` 配方根据 SRC\_URI 获取启动二进制文件，并解压 zip 文件。解压后的二进制文件位于以下目录中：`tmp-glibc/deploy/images/<machine>/<image-name>`。
    - **子系统固件二进制文件**
Qualcomm Linux 包含在相应子系统上加载并运行的固件二进制文件。当 Qualcomm SoC 启动时，各个子系统会在复位后执行以下固件：

| `firmware-qcom-hlosfw_1.0.bb` | 处理对子系统固件二进制文件（例如 aDSP、cDSP、Modem 和 WLAN）的获取、解包和安装。<br>基于 QCM6490 的目标的固件文件打包在 `QCM6490_fw.zip` 文件中。 |
        | --- | --- |

`firmware-qcom-hlosfw_1.0.bb` 配方根据 SRC\_URI 从远程服务器获取子系统固件二进制文件，解压 zip 文件，并将固件安装在 `rootfs` 中。
    - **DSP 库**
用户空间实用工具引用 DSP 库，这些库必须位于 `rootfs` 镜像中。以下固件配方提供特定于 SOC 的 DSP 库：

| `firmware-qcom-dspso_1.0.bb` | 处理对 DSP 库的获取、解包和安装。<br>基于 QCM6490 的目标的库打包在 `QCM6490_dspso.zip` 文件中。 |
        | --- | --- |

`firmware-qcom-dspso_1.0.bb` 配方根据 SRC\_URI 从远程服务器获取 DSP 库，解压 zip 文件，并将 DSP 库安装在 `rootfs` 中。
    - **安装 boot、subsystem 和 dspso**
        编译 Qualcomm Linux 源代码时，编译系统使用固件配方根据 MACHINE\_EXTRA\_RDEPENDS 配置（在机器配置文件中设置）来部署预编译的固件。例如，在 `layers/meta-qcom-hwe/conf/machine/qcm6490.conf` 中，可以看到在 MACHINE\_EXTRA\_RDEPENDS 变量中包含 `packagegroup-firmware-qcm6490`：

        `MACHINE_EXTRA_RDEPENDS += " \`

        `packagegroup-firmware-qcm6490 \`

        `graphicsdevicetree \`

        `displaydevicetree \`

        `cameradtb \`

        `wlan-devicetree \`

        `btdevicetree \`

        `videodtb \`

        `"`

Note: `packagegroup-firmware-qcm6490` 配方位于 `<workspace>/layers/meta-qcom-hwe/recipes-firmware/packagegroups/` 中，该配方会用于将生成镜像的固件配方分组。

        在编译 Qualcomm Linux 时，根据 `qcm6490.conf` 中的配置和软件包组配方文件从 `<workspace>/layers/meta-qcom-hwe/recipes-firmware/firmware` 中编译相应的固件配方。
- **内核配方**
    Qualcomm Linux 使用的 Linux 内核配方位于 [https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-kernel/linux](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-kernel/linux)。

    Qualcomm Linux 支持 6.6 LTS 内核，并通过 Yocto 配方 `linux-kernel-qcom_6.6.bb` 进行维护，该配方位于 `recipes-kernel/linux` 的 `meta-qcom-hwe` 层下。该配方引用 Qualcomm 内核源代码，该源代码公开托管于 [https://git.codelinaro.org/clo/la/kernel/qcom.git](https://git.codelinaro.org/clo/la/kernel/qcom.git)。Qualcomm Linux 内核配方称为 `linux-kernel-qcom`。

    例如，`qcm6490.conf` 是托管于 `meta-qcom-hwe/conf/machine` 的机器配置文件，支持 QCM6490 机器，并选择内核 `linux-kernel-qcom`。

    ***内核配置***

Qualcomm Linux 内核配方使用以下内核配置文件：

| 内核配置文件 | 说明 |
    | --- | --- |
    | `<kernel_src>/arch/arm64/configs/qcom_defconfig` | 与产品/性能需求和上游内核一致的基本配置 |
    | `<kernel_src>/arch/arm64/configs/qcom_debug.config` | 来自上游内核的调试配置文件 |
    | `<kernel_src>/arch/arm64/configs/qcom_addons.config` | 在与上游一致的基本配置之上增加的 Qualcomm 下游配置 |
    | `<kernel_src>/arch/arm64/configs/qcom_addons_debug.config` | 启用 Qualcomm 下游调试 |

对于 QCM6490 机器配置，Qualcomm Linux 内核配方支持两种编译版本：`perf` 和 `debug`。默认编译版本为 `perf`。

| 编译版本 | Defconfig/config 文件 |
    | --- | --- |
    | `Perf` | <ul class="ul" id="qualcomm_bsp_metadata_layers__ul_ng3_m2j_p1c_rasam_03-01-24-1557-22-567"><br>                                                  <li class="li"><code class="ph codeph">arch/arm64/configs/qcom_defconfig</code></li><br><br>                                                  <li class="li"><code class="ph codeph">arch/arm64/configs/qcom_addons.config</code></li><br><br>                                                </ul> |
    | `调试` | <ul class="ul" id="qualcomm_bsp_metadata_layers__ul_og3_m2j_p1c_rasam_03-01-24-1557-22-567"><br>                                                  <li class="li"><code class="ph codeph">arch/arm64/configs/qcom_defconfig</code></li><br><br>                                                  <li class="li"><code class="ph codeph">arch/arm64/configs/qcom_debug.config</code></li><br><br>                                                  <li class="li"><code class="ph codeph">arch/arm64/configs/qcom_addons.config</code></li><br><br>                                                  <li class="li"><code class="ph codeph">arch/arm64/configs/qcom_addons_debug.config</code></li><br><br>                                                </ul> |

    通过更新内核配方 `linux-kernel-qcom_6.6.bb` 中的 KERNEL\_DEFCONFIG 和 KERNEL\_CONFIG\_FRAGMENTS 变量，可以修改内核编译配置：

    `KERNEL_DEFCONFIG = "${S}/arch/arm64/configs/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)}"`

    如果 distro 支持 SELinux，则 SELinux 配置文件 `selinux.cfg` 和 `selinux_debug.cfg` 位于 `recipes-kernel/linux/linux-kernel-qcom`：

    `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)}"`

    通过更新 Qualcomm Linux 内核配方中的 KERNEL\_MODULE\_AUTOLOAD 变量，可以为 Qualcomm 平台自动加载内核模块。下面给出了自动加载 CoreSight 和 STM 模块的示例：

    `# Coresight and STM modules for QDSS functions`

    `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 "`
- **许可证**
`meta-qcom-hwe` 中的配方使用的 License 文件托管于 `<workspace>/meta-qcom-hwe/files/common-licenses`。

        common-licenses/
          ├── BSD-3-Clause-Clear
          ├── GPLv2.0-with-linux-syscall-note
          └── Qualcomm-Technologies-Inc.-ProprietaryCopy to clipboard

Yocto 支持根据镜像生成自动创建 SPDX SBOM 文档。为实现这一点，需要在 `local.conf` 中继承 `create-spdx` 类，如下所示：

        INHERIT += "create-spdx"Copy to clipboard

继承该类后，用户可以使用 BitBake 命令来重新编译镜像：

        bitbake qcom-multimedia-imageCopy to clipboard

SPDX 生成的内容位于以下路径：
    - 对于每个配方，生成的文件位于 `tmp/deploy/spdx/<machine>` 目录中。
    - 顶层 SPDX 输出文件为 `tmp/deploy/images/MACHINE/<image-recipe>-<MACHINE>.spdx.json`。

### meta-qcom-realtime

`meta-qcom-realtime` 元数据层托管于 [https://github.com/quic-yocto/meta-qcom-realtime](https://github.com/quic-yocto/meta-qcom-realtime)。该层为编译 Qualcomm 设备的实时内核提供额外的软件支持。
- **内核配方**
    Qualcomm Linux 支持 6.6 LTS 内核与实时扩展，并通过 Yocto 配方 `linux-kernel-qcom-rt_6.6.bb` 进行维护，该配方位于 `recipes-kernel/linux` 的 `meta-qcom-realtime` 层下。Pending 的抢占式 RT 补丁位于 [https://wiki.linuxfoundation.org/realtime/start](https://wiki.linuxfoundation.org/realtime/start)。获取这些补丁后将应用于 Qualcomm Linux 内核源代码，该源代码公开托管于 [https://git.codelinaro.org/clo/la/kernel/qcom.git](https://git.codelinaro.org/clo/la/kernel/qcom.git)。

    Qualcomm Linux 实时配方称为 `linux-kernel-qcom-rt`。在为 Qualcomm 机器编译实时内核时，`conf/layer.conf` 选择 `linux-kernel-qcom-rt` 作为内核。

    ***内核配置***

        KERNEL_CONFIG_FRAGMENTS:append = " ${WORKDIR}/qcom_rt.cfg"Copy to clipboard
- **在编译中启用 `meta-qcom-realtime`**
要在编译中包含 `meta-qcom-realtime`，应按照以下步骤将 `meta-qcom-realtime` 层导出至 `bblayers.conf`中的 EXTRALAYERS：
    1. 导入环境，以下是导入 QCM6490 和 `qcom-wayland` distro 的环境的示例：

            MACHINE=qcm6490 DISTRO=qcom-wayland source setup-environmentCopy 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-imageCopy to clipboard

### meta-qcom-distro

该层为 Qualcomm 产品提供参考发行版本配置。镜像配方和软件包组在该层定义。
- **BitBake 类**
下表提供了有关 BitBake 类的介绍，这些类位于 [https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/classes](https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/classes)。

| `image-adbd.bbclass` | Qualcomm Linux 支持 SSH 和 UART 串口 shell。使用 SSH 或 UART 访问设备。<br>一些用户发现，当 IP 端口断开或需要传输大文件时，使用 ADB 调试问题会更加容易。对于这些用户，ADB 将作为一个选项提供给他们。<br><br><br>该类将 adbd 安装到镜像中。<br><br><br>除非 IMAGE\_FEATURES 包含 enable-adbd，否则禁用 adbd 后台程序。<br><br><br>可以通过手动从 `rootfs` 中移除 `/var/usb-debugging-enabled` 来禁用 adbd。 |
    | --- | --- |
    | `image-qcom-deploy.bbclass` | 在 `tmp-glibc/deploy/images/<machine>/<image-name>` 路径下部署镜像文件。<br>生成的镜像存放在 `<image-name>` 子目录下。 |
- **Distro 配置**
    下表提供了有关 distro 配置的介绍，这些配置在 [https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/conf/distro](https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/conf/distro) 定义。

| `conf/distro/qcom-wayland.conf` | 该 distro 配置文件定义了 `qcom-wayland` distro，用户可在以下示例命令中使用它。<br><br>        MACHINE=qcm6490 DISTRO=qcom-wayland source setup-environmentCopy to clipboard<br><br>该配置文件中包含 `meta-qcom-distro/conf/distro/include/qcom-base.inc`文件，该文件定义常用的 DISTRO\_FEATURES 并添加以下 DISTRO\_FEATURES：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_jyy_ckd_wbc_rasam_06-26-24-2035-52-297"><br>                                                <li class="li"><code class="ph codeph">wayland</code></li><br><br>                                                <li class="li"><code class="ph codeph">vulkan</code></li><br><br>                                                <li class="li"><code class="ph codeph">opengl</code></li><br><br>                                            </ul><br><br>这些 distro 功能由 Yocto Project 文档定义，它们位于以下位置：[https://docs.yoctoproject.org/4.0.18/singleindex.html#distro-features](https://docs.yoctoproject.org/4.0.18/singleindex.html#distro-features)。 |
    | --- | --- |
    | `conf/distro/include/qcom-base.inc` | INIT\_MANAGER 设为 `systemd`。有关 INIT\_MANAGER 的 Yocto 文档，可访问 [https://docs.yoctoproject.org/4.0.18/singleindex.html#term-INIT_MANAGER](https://docs.yoctoproject.org/4.0.18/singleindex.html#term-INIT_MANAGER)。<br>启用的其他 DISTRO\_FEATURES 包括：<br><br>        DISTRO_FEATURES:append = " pam overlayfs acl xattr selinux ptest security virtualization"Copy to clipboard<br><br><br>如需了解这些 DISTRO\_FEATURES 的用途，可访问 [https://docs.yoctoproject.org/4.0.18/singleindex.html#distro-features](https://docs.yoctoproject.org/4.0.18/singleindex.html#distro-features)。<br><br><br>该文件选择 `systemd` 作为 INIT\_MANAGER，并选择 `udev` 作为设备管理器。 |
    | `conf/distro/include/qcom-security_flags.inc` | 该文件包含 [https://git.yoctoproject.org/poky/tree/meta/conf/distro/include/security_flags.inc?h=kirkstone](https://git.yoctoproject.org/poky/tree/meta/conf/distro/include/security_flags.inc?h=kirkstone) 中定义的安全标志。 |
- **软件包组**
软件包组在 `meta-qcom-hwe` 和 `meta-qcom-distro` 中定义。这些软件包组可帮助了解 Qualcomm BSP 定义的功能。

| `packagegroup-qcom.bb` | 包含所有基本软件包的软件包组 |
    | --- | --- |
    | `packagegroup-qcom-multimedia.bb` | 包含用于启用多媒体支持的软件包的软件包组：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_ory_5gj_p1c_rasam_03-01-24-1615-8-231"><br>                                                  <li class="li"><code class="ph codeph">packagegroup-container</code></li><br><br>                                                  <li class="li"><code class="ph codeph">packagegroup-qcom-audio</code></li><br><br>                                                  <li class="li"><code class="ph codeph">packagegroup-qcom-bluetooth</code></li><br><br>                                                  <li class="li"><code class="ph codeph">packagegroup-qcom-camera</code></li><br><br>                                                  <li class="li"><code class="ph codeph">packagegroup-qcom-display</code></li><br><br>                                                  <li class="li"><code class="ph codeph">packagegroup-qcom-fastcv</code></li><br><br>                                                  <li class="li"><code class="ph codeph">packagegroup-qcom-graphics</code></li><br><br>                                                  <li class="li"><code class="ph codeph">packagegroup-qcom-k8s</code></li><br><br>                                                  <li class="li"><code class="ph codeph">packagegroup-qcom-opencv</code></li><br><br>                                                  <li class="li"><code class="ph codeph">packagegroup-qcom-sensors</code></li><br><br>                                                  <li class="li"><code class="ph codeph">packagegroup-qcom-video</code></li><br><br>                                                  <li class="li"><code class="ph codeph">python3-docker-compose</code></li><br><br>                                                  <li class="li"><code class="ph codeph">camera-server</code></li><br><br>                                                </ul> |
    | `packagegroup-qcom-test-pkgs.bb` | – |
- **镜像配方**
Qualcomm Linux 元数据层 `meta-qcom-distro` 定义镜像配方，这些配方位于 [https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/recipes-products/images](https://github.com/quic-yocto/meta-qcom-distro/tree/)。下表列出了各种镜像及其 IMAGE\_FEATURES，以及这些镜像的功能：

| 镜像配方 | 镜像说明 |
    | --- | --- |
    | `qcom-minimal-image.bb` | 定义一个较小的 `rootfs` 以启动至 shell。<br>启用的 IMAGE\_FEATURES 功能如下：<br><br>        IMAGE_FEATURES += "splash tools-debug debug-tweaks enable-adbd read-only-rootfs"Copy to clipboard<br><br><br>有关 IMAGE\_FEATURES 的更多信息，可访问 [https://docs.yoctoproject.org/4.0.18/singleindex.html#image-features](https://docs.yoctoproject.org/4.0.18/singleindex.html#image-features)。 |
    | `qcom-console-image.bb` | 通过添加更多镜像并启用更多 IMAGE\_FEATURES 来扩展 `qcom-minimal-image`：<br><br>        IMAGE_FEATURES += "package-management ssh-server-openssh" Copy to clipboard |
    | `qcom-multimedia-image.bb` | 需要 DISTRO\_FEATURE Wayland，以在 `rootfs` 中包含所有多媒体软件包。 |
    | `qcom-multimedia-full-image.bb` | 提供对 `qcom-multimedia-image.bb` 的扩展以实现对 GStreamer 的支持。 |
    | `qcom-multimedia-test-image.bb` | 在 `rootfs` 中包含测试包以测试 `qcom-multimedia-image`。 |
    | `qcom-multimedia-crossesdk-image.bb` | 生成适用于 `qcom-multimedia-image` 的 eSDK。 |
- **QDL 刷写工具**
    Qualcomm download tool (QDL) 是一款刷写工具，可与 ID 为 05c6:9008 的 USB 设备通信以将刷写加载程序上传到设备。刷写加载程序将镜像刷写到设备中的 UFS 或 eMMC。

可通过以下两种方法在主机 PC 上设置 QDL：
    - QDL 工具默认在 Qualcomm Linux 工作区中编译。
QDL 工具集成在编译工作流中，以方便使用。QDL 配方位于以下路径：`<workspace>/meta-qcom/recipes-devtools/qdl/qdl_git.bb`。该配方获取并编译 QDL 工具，之后即可对该配方进行 BitBake。由于 `image-qcom-deploy.bbclass` 的原因，默认集成 QDL 工具，作为编译的镜像的依赖项：

            DEPENDS:append = " \
                python3-native \
                qdl-native \
                "Copy to clipboard

        镜像编译完成后，将在以下目录中生成 QDL 二进制文件：`tmp-glibc/deploy/image/<MACHINE>/<IMAGE>`。该 QDL 二进制文件适用于主机架构。
    - **QDL 作为独立项目编译**
        克隆源项目，安装设备依赖项，并编译 QDL。

在主机 PC 上：

            git https://github.com/linux-msm/qdl.git
            sudo apt-get install libxml2-dev libudev-dev
            cd qdl
            makeCopy to clipboard

以这种方式编译的 QDL 可以在主机 PC 上进行复制和移动，因为它链接到 `/lib64/ld-linux-x86-64.so.2` 处的动态链接程序，该链接程序是所用主机 PC 的本地链接库。

**运行 QDL 的前提条件**
    - 要使用 QDL 刷写工具，主机上需进行一次前提条件配置。
按照以下步骤使主机 PC 能够正确枚举主机的 Qualcomm 设备，以便 QDL 能够进行刷写：
        1. 将目录更改为 `/etc/udev/rules.d`。
        2. 在该路径上创建 `51-qcom-usb.rules` 文件。
        3. 在 `51-qcom-usb.rules` 文件中添加以下代码行：

                SUBSYSTEMS=="usb", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9008", MODE="0666", GROUP="plugdev"Copy to clipboard
    - 检查主机 PC 是否正在运行 `ModemManager`。
Note: 每次使用 QDL 时都要检查。

        有些 Linux 发行版本随附 `ModemManager`，即一款用于配置移动宽带的工具。当基于 Qualcomm SoC 的设备以 USB 模式连接时，它会被识别为 Qualcomm Modem，`ModemManager` 会试图配置该设备。`ModemManager` 会干扰 QDL 刷写，因此如果正在运行 `ModemManager`，必须先将其禁用再连接测试设备。如果使用的 Linux 发行版本自带 `systemd`，则可通过 `systemctl` 停止 `ModemManager`。要确定如何在 QDL 刷写时管理 `ModemManager`，可参见 [QDL 和 ModemManager](https://docs.qualcomm.com/doc/80-70014-27Y/topic/debug.html#qdl_and_modemmanager) 章节。

    **使用 QDL 进行刷写**

以下是运行 QDL 的通用命令：

        qdl <flash-programmer-binary> [<rawprogram xml> <patch xml>]Copy to clipboard

该示例通用输入表明 QDL 工具需要三种类型的输入文件。所有这些输入文件均在目录 `tmp-glibc/deploy/image/<MACHINE>/<IMAGE>` 下生成。当镜像配方成功完成后，必须执行以下步骤来刷写设备。如果想要使用在编译过程中生成的 QDL，应将目录更改为 `tmp-glibc/deploy/image/<MACHINE>/<IMAGE>`，因为 Qualcomm Linux 工作流程会在该路径下生成并部署 QDL。例如：

        cd <workspace>/build-qcom-wayland/tmp-glibc/deploy/images/qcm6490/qcom-multimedia-image/Copy to clipboard

运行如下刷写命令：

        ./qdl prog_firehose_ddr.elf rawprogram*.xml patch*.xmlCopy to clipboard

    **将 QDL 复制到其他位置**

`<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/qcm6490/qcom-multimedia-image/` 中的 QDL 二进制文件（在 Qualcomm Linux 编译工作流程中进行编译）可能无法复制或移动到其他路径，只能在原路径使用，这是由于相关依赖项导致的。如需了解这些依赖项，可运行以下命令：

        file qdlCopy to clipboard

    输出如下：

    <samp class="ph systemoutput">qdl: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter &lt;workspace&gt;/build-qcom-wayland/tmp-glibc/sysroots-uninative/x86_64-linux/lib/ld\u0002linux-x86-64.so.2, BuildID[sha1]=430c23d51190ef6c225586c5d63d2a7c9cd50430, for GNU/Linux 3.2.0, stripped</samp>

    该输出表明 `<workspace>/build-test-distro/tmp-glibc/sysroots-uninative/x86_64-linux/lib/ld-linux-x86-64.so.2` 存在依赖项，这是由于 Qualcomm Linux 编译 QDL 的方式所致。如果想要单独运行 QDL，可参见[独立 QDL](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__qdl_standalone)。

    **QDL 高级选项**

QDL 支持更多高级选项，这些选项作为可选项通过命令行传递给 QDL。下表说明了这些高级选项：

| 选项 | 说明 |
    | --- | --- |
    | `--debug` | 在刷写镜像时打印调试日志 |
    | `--storage <emmc|nand|ufs>` | 该选项用于定义存储类型。如果未提供该选项，QDL 将检测存储类型。 |
    | `--finalize-provisioning` | 关于 UFS 存储不可撤销的一次性配置 (OTP)。执行以下安全机制以防止设备意外锁定：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_swb_5vz_s1c_rasam_03-14-24-1623-16-802"><br>                                                  <li class="li">除非想要锁定设备，否则应在 XML 中设置 <code class="ph codeph">bConfigDescrLock = 0</code>，并且不要使用命令行参数 <code class="ph codeph">--finalize-provisioning</code>。</li><br><br>                                                  <li class="li">如果要执行 OTP，应确保 XML 中包含 <code class="ph codeph">bConfigDescrLock = 1</code> 属性并提供命令行参数 <code class="ph codeph">--finalize-provisioning</code>。</li><br><br>                                                </ul><br><br>Note: 如果命令行参数与 XML 不匹配，则不会执行配置。 |
    | `--include` | 指向镜像所在的路径。默认情况下为 NULL，即镜像位于同一位置。这在 QDL 作为独立项目编译时很有用，`--include` 用于指向镜像所在的路径。 |

标志的使用示例：

        <Path-to-QDL-dir>/qdl --storage ufs --include <AN IMAGES DIR>/qcm6490_images/qcom-multimedia-image  <AN IMAGES DIR>/qcm6490_images/qcom-multimedia-image/prog_firehose_ddr.elf  <AN IMAGES DIR>/qcm6490_images/qcom-multimedia-image/rawprogram*.xml  <AN IMAGES DIR>/qcm6490_images/qcom-multimedia-image/patch*.xml
        Copy to clipboard

### meta-qcom-extras

该层是已注册用户可选的元数据层。该层支持对所选组件进行源代码编译，这些组件以二进制形式存在于 `meta-qcom-hwe` 中。如果有权接收该元数据层，则可以使用 [Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254/introduction.html)中分享的克隆步骤。
- **固件配方**
`meta-qcom-extras` 中的固件配方集成了编译其他子系统时生成的固件 ZIP。

| ├── recipes-firmware<br>            ├── firmware<br>            │   ├── firmware-qcm6490-boot_2.0.bb<br>            │   ├── firmware-qcm6490-dspso_2.0.bb<br>            │   └── firmware-qcm6490-msl_2.0.bb<br>            └── packagegroups<br>                └── packagegroup-firmware-qcm6490.bbCopy to clipboard | `meta-qcom-extras` 中的配方会覆写 `meta-qcom-hwe` 中的配方。<br><br><br>                                                <br>`meta-qcom-hwe` 默认使用预编译的固件二进制文件，而 `meta-qcom-extras` 从 Qualcomm 专有存储库编译固件。<br><br><br>                                                <br>`meta-qcom-extras` 层会忽略以下 .zip 文件中的预编译二进制文件。这些配方会转为搜索 FWZIP\_PATH 路径下设置的 zip 文件，如下所述：<br><ul class="ul" id="qualcomm_bsp_metadata_layers__ul_b3t_rqd_q1c_rasam_03-04-24-1130-49-157"><br>                                                  <li class="li"><code class="ph codeph">firmware-qcom-bootbins_1.0.bbappend</code>：在 FWZIP_PATH 路径中搜索 <code class="ph codeph">QCM6490_bootbinaries.zip</code></li><br><br>                                                  <li class="li"><code class="ph codeph">firmware-qcom-hlosfw_1.0.bbappend</code>：在 FWZIP_PATH 路径中搜索 <code class="ph codeph">QCM6490_fw.zip</code></li><br><br>                                                  <li class="li"><code class="ph codeph">firmware-qcom-dspso_1.0.bbappend</code>：在 FWZIP_PATH 路径中搜索 <code class="ph codeph">QCM6490_dspso.zip</code></li><br><br>                                                </ul> |
    | --- | --- |

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

- **BitBake 类**

| BitBake 类 | 说明 |
    | --- | --- |
    | `qim-prod-sdk-pkg.bbclass` | <ul class="ul" id="qualcomm_bsp_metadata_layers__ul_f2t_qqc_51c_rasam_03-18-24-1526-53-209"><br>                                            <li class="li">提供打包任务，以将 QIM Product SDK 文件打包到存档中。通过 <code class="ph codeph">qim-product-sdk</code> 配方调用。</li><br><br>                                            <li class="li">当配方编译完成后，易于安装的文件存档位于 <code class="ph codeph">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/qim_prod_sdk_artifacts</code> 目录中。</li><br><br>                                        </ul> |
    | `qimsdk-pkg.bbclass` | <ul class="ul" id="qualcomm_bsp_metadata_layers__ul_g2t_qqc_51c_rasam_03-18-24-1526-53-209"><br>                                            <li class="li">提供打包任务，以将 Qualcomm Multimedia SDK 软件包和易于使用的安装脚本一起打包到存档中。对于部署、调试和开发三种用途的软件包，各生成一个存档。</li><br><br>                                            <li class="li">文件存档位于 <code class="ph codeph">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/qimsdk_artifacts</code> 目录下。</li><br><br>                                            <li class="li">在编译期间通过 <code class="ph codeph">qim-sdk</code> 配方调用。</li><br><br>                                        </ul> |
    | `tflitesdk-pkg.bbclass` | <ul class="ul" id="qualcomm_bsp_metadata_layers__ul_h2t_qqc_51c_rasam_03-18-24-1526-53-209"><br>                                            <li class="li">提供打包任务，以将 TensorFlow Lite SDK 文件打包到多个存档中，分别用于部署、开发和调试。在编译期间通过 <code class="ph codeph">tflite-sdk</code> 配方调用。</li><br><br>                                            <li class="li">当配方编译完成后，易于安装的文件存档位于 <code class="ph codeph">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/tflitesdk_artifacts</code> 目录中。</li><br><br>                                        </ul> |
- **Distro 配置**

| `layer.conf` | 使用以下信息配置项目层：<br><ul class="ul" id="qualcomm_bsp_metadata_layers__ul_twn_xqc_51c_rasam_03-18-24-1528-52-666"><br>                                            <li class="li">配方文件路径信息</li><br><br>                                            <li class="li">支持的 Yocto 版本</li><br><br>                                            <li class="li">支持的 Qualcomm<sup class="ph sup">®</sup> Hexagon™ 版本</li><br><br>                                            <li class="li">支持的 Qualcomm<sup class="ph sup">®</sup> Neural Processing SDK 版本</li><br><br>                                            <li class="li">支持的 Qualcomm neural network (QNN) SDK 版本</li><br><br>                                        </ul> |
    | --- | --- |
- **镜像配方**

| 配方 | 说明 |
    | --- | --- |
    | `recipes-gst` | 包括上游 GStreamer 配方更改 (`.bbapend`)，以及 Qualcomm 配方：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_qgh_nrc_51c_rasam_03-18-24-1533-29-408"><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-bad_1.20%.bbappend</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-good_1.20%.bbappend</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-base.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-batch.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-metamux.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mldemux.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlmeta.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlmuxer.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlqnn.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlsnpe.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mltflite.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlvclassification.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlvconverter.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlvdetection.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlvpose.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlvsegmentation.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-overlay.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-qmmfsrc.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-socket.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-tools.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-vcomposer.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-vsplit.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-vtransform.bb</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-qcom-oss-sample-apps.bb</code></li><br><br>                                        </ul> |
    | `recipes-qcom-ml` | 包含两个配方：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_dlr_prc_51c_rasam_03-18-24-1534-11-437"><br>                                            <li class="li"><code class="ph codeph">qnn.bb</code>：用于打包 QNN SDK</li><br><br>                                            <li class="li"><code class="ph codeph">snpe.bb</code>：用于打包 Qualcomm Neural Processing SDK</li><br><br>                                        </ul> |
    | `recipes-qim-product-sdk` | 用于安装包含 QIM、Qualcomm Neural Processing、QNN 和 TensorFlow Lite SDK 的 QIM product SDK 的配方 |
    | `recipes-tensorflow-lite` | TensorFlow Lite 配方编译并安装以下版本的 TensorFlow Lite：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_myh_drc_51c_rasam_03-18-24-1530-34-111"><br>                                            <li class="li">2.12.1、2.13.1、2.14.1 和 2.15.0</li><br><br>                                            <li class="li">默认版本：2.15.0</li><br><br>                                        </ul> |
- **软件包组**

| 软件包组 | 说明 |
    | --- | --- |
    | `packagegroup-qcom-gst` | 用于启用上游基本 GStreamer 以及 Qualcomm 插件的软件包组：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_kjr_wrc_51c_rasam_03-18-24-1536-14-424"><br>                                            <li class="li"><code class="ph codeph">packagegroup-qcom-gst-basic</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-base</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-tools</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-batch</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-metamux</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mldemux</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlmeta</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlvconverter</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlvclassification</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlvdetection</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlvpose</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlvsegmentation</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-overlay</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-qmmfsrc</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-socket</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-vcomposer</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-vsplit</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-vtransform</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-qcom-oss-sample-apps</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlsnpe</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mlqnn</code></li><br><br>                                            <li class="li"><code class="ph codeph">gstreamer1.0-plugins-qcom-oss-mltflite</code></li><br><br>                                        </ul><br><br>该软件包组还用于打包上游 GStreamer 软件包：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_zff_4sc_51c_rasam_03-18-24-1541-22-591"><br>                                                <li class="li"><code class="ph codeph">cairo</code></li><br><br>                                                <li class="li"><code class="ph codeph">gdk-pixbuf</code></li><br><br>                                                <li class="li"><code class="ph codeph">liba52</code></li><br><br>                                                <li class="li"><code class="ph codeph">libdaemon</code></li><br><br>                                                <li class="li"><code class="ph codeph">libgudev</code></li><br><br>                                                <li class="li"><code class="ph codeph">lame</code></li><br><br>                                                <li class="li"><code class="ph codeph">libpsl</code></li><br><br>                                                <li class="li"><code class="ph codeph">librsvg</code></li><br><br>                                                <li class="li"><code class="ph codeph">libsoup-2.4</code></li><br><br>                                                <li class="li"><code class="ph codeph">libtheora</code></li><br><br>                                                <li class="li"><code class="ph codeph">libwebp</code></li><br><br>                                                <li class="li"><code class="ph codeph">mpg123</code></li><br><br>                                                <li class="li"><code class="ph codeph">orc</code></li><br><br>                                                <li class="li"><code class="ph codeph">sbc</code></li><br><br>                                                <li class="li"><code class="ph codeph">speex</code></li><br><br>                                                <li class="li"><code class="ph codeph">taglib</code></li><br><br>                                            </ul> |
    | `packagegroup-qcom-gst-basic` | 用于启用上游 GStreamer 的软件包组：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_h1y_psc_51c_rasam_03-18-24-1541-52-863"><br>                                                <li class="li"><code class="ph codeph">gstreamer1.0</code></li><br><br>                                                <li class="li"><code class="ph codeph">gstreamer1.0-plugins-base</code></li><br><br>                                                <li class="li"><code class="ph codeph">gstreamer1.0-plugins-good</code></li><br><br>                                                <li class="li"><code class="ph codeph">gstreamer1.0-plugins-bad</code></li><br><br>                                                <li class="li"><code class="ph codeph">gstreamer1.0-rtsp-server</code></li><br><br>                                            </ul> |
    | `packagegroup-qcom-qim-product` | 用于将以下软件包与安装脚本一起打包的软件包组：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_jfp_tsc_51c_rasam_03-18-24-1542-57-215"><br>                                            <li class="li"><code class="ph codeph">packagegroup-qcom-gst</code></li><br><br>                                            <li class="li"><code class="ph codeph">packagegroup-qcom-ml</code></li><br><br>                                            <li class="li"><code class="ph codeph">install.sh</code></li><br><br>                                        </ul> |
    | `packagegroup-qcom-ml` | 用于打包 Qualcomm ML 框架的软件包组：<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_d3k_wsc_51c_rasam_03-18-24-1543-46-636"><br>                                            <li class="li"><code class="ph codeph">tensorflow-lite</code></li><br><br>                                            <li class="li"><code class="ph codeph">qnn</code></li><br><br>                                            <li class="li"><code class="ph codeph">snpe</code></li><br><br>                                            <li class="li"><code class="ph codeph">libgomp-dev</code></li><br><br>                                        </ul> |

## Qualcomm Linux 软件组件

### 文件系统叠加

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

Qualcomm Linux 使用 overlay 文件系统在某些挂载点上创建叠加。建议使用只读的 rootfs，但许多应用程序可能需要对文件系统的某些部分进行读写访问。这通过 `overlayfs` bbclass 使基本 rootfs 保持只读来实现。

`overlayfs-qcom-paths` 配方创建 `/var`、`/etc` 和 `/opt` 作为叠加挂载点，并继承 `overlayfs` bbclass。在该配方中，变量 `overlayfs_mount_point` 定义为 `mnt-overlay`，这意味着 `mnt-overlay.mount` systemd 单元在 BSP 中定义并安装到镜像中。在启动时，systemd 单元 `mnt-overlay.mount` 将 `/dev/disk/by-partlabel/overlay` 磁盘分区挂载到所有挂载点。

变量 `overlayfs_writable_paths` 指定运行时使用的可写路径，即 `/opt`、`/etc` 和 `/var`。

要包含 `overlayfs`支持，必须将其添加到 DISTRO\_FEATURES。
- `/var` 叠加
要查看 `/var` overlayfs 挂载点，应运行以下挂载命令：

        sh-5.1# mount | grep var
        overlay on /var type overlay (rw,relatime,seclabel,lowerdir=/var,upperdir=/mnt/overlay/upper/var,workdir=/mnt/overlay/workdir/var)Copy to clipboard
- `/etc` 叠加

        sh-5.1# mount | grep etc
        /dev/sda11 on /mnt/overlay type ext4 (rw,relatime,rootcontext=system_u:object_r:etc_t:s0,seclabel,stripe=128,inlinecrypt)
        overlay on /etc type overlay (rw,relatime,seclabel,lowerdir=/etc,upperdir=/mnt/overlay/upper/etc,workdir=/mnt/overlay/workdir/etc)Copy to clipboard
- `/opt` 叠加

        sh-5.1# mount | grep opt
        overlay on /opt type overlay (rw,relatime,seclabel,lowerdir=/opt,upperdir=/mnt/overlay/upper/opt,workdir=/mnt/overlay/workdir/opt)Copy to clipboard
- `/home` 叠加

        sh-5.1# mount | grep home
        overlay on /home type overlay (rw,relatime,seclabel,lowerdir=/home,upperdir=/mnt/overlay/upper/home,workdir=/mnt/overlay/workdir/home)Copy to clipboard
- 调整 overlay 分区的大小：这使用配方 `resize-partitions.bb` 和 `resize-partition.service.in`文件来实现。调整分区大小的服务在设备启动时运行，以根据分区的大小创建和设置文件系统。在调整分区大小服务中，运行调整 overlay 分区大小的命令将执行以下操作：
    - `/sbin/e2fsck -n /dev/disk/by-partlabel/%i` 根据分区标签检查指定文件系统是否存在错误，但不做任何更改。
    - `/sbin/mkfs.ext4 /dev/disk/by-partlabel/%i` 调用 `mkfs.ext4` 实用工具并对 ext4 文件系统的分区进行格式化。
    - `/sbin/resize2fs /dev/disk/by-partlabel/%i` 尝试增加分区的大小。
    - `/sbin/tune2fs -O encrypt,stable_inodes /dev/disk/by-partlabel/overlay` 修改各种参数。例如，`encrypt` 可用于对存储在文件系统上的数据进行加密，stable\_inodes 选项可确保 inode 编号在文件系统操作中保持稳定。

### 系统初始化脚本

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

下面列出了通过 `meta-qcom-hwe` 添加到镜像的系统初始化脚本：

| 系统初始化脚本 | 说明 |
| --- | --- |
| `mnt-overlay.mount` | 将 `/dev/disk/by-partlabel/overlay` 磁盘分区挂载到所有挂载点。 |
| `var-persist.mount` | 将 `/dev/disk/by-partlabel/persist` 磁盘分区挂载到 `/var/persist`。 |
| `android-tools-adbd.service` | 在设备上提供 adbd 后台程序。 |
| `logrotate.service` | 对旧日志进行保存。有关该服务的更多信息，参见 [syslog() 的日志工具](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#logging_shim_for_syslog)章节。`logrotate.service` 是上游 systemd 单元。<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` 文件通过 Qualcomm Linux BSP 层 `meta-qcom-hwe` 中的 `pd-mapper_git.bbappend` 更新，以便以系统用户身份而非 root 用户身份运行服务。<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>    }Copy to clipboard |
| `property-vault.service` | 实现 `property_get` 和 `property_set` 功能。有关该服务的更多信息，参见[属性](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#properties)章节。 |
| `persist-property-vault.service` | 运行 `set-persist-prop.sh`，将标志 `le.persistprop.enable` 设为 true。要使用保留属性，需设置此标志。 |
| `resize-partition@.service` | 在启动时根据分区大小调整文件系统大小。<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; /sbin/resize2fs /dev/disk/by-partlabel/%i; #COMMAND# fi;"Copy to clipboard |
| `rsyslog.service` | 根据指定的配置重新定向日志。有关该服务的更多信息，参见 [syslog() 的日志工具](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#logging_shim_for_syslog)章节。 |
| `sys-kernel-debug.mount` | 在编译 `perf` 时屏蔽 `sys-kernel-debug.mount` 点。 |

### 调试工具

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

调试工具由 `<workspace>/layers/poky/meta` 目录中定义的 `packagegroup-core-tool-debug` 添加为 `rootfs` 的一部分。该配方以 `packagegroup-core-tools-debug.bbappend` 形式附加在 `<workspace>/layers/meta-qcom-hwe/recipes-devtools/` 中。该附加文件添加 `valgrind` 和 `ltrace`。更多信息，参见[调试 Linux 用户空间](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-12/using_open_source_debug_tools.html)。

### systemd-boot

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

systemd-boot 为统一可扩展固件接口 (UEFI) 启动管理器。它提供了一个启动选项菜单来控制启动流程并加载用户选择的 boot loader。systemd-boot 可支持不同操作系统下的不同 boot loader。将内核和其他相关信息打包到 EFI 分区中。

必须使用 `EFI_CONFIG_STUB` 将内核编译为 EFI。systemd-boot 支持 Type1 和 Type2 配置。Type1 配置未经测试。启用 Type2 配置时，内核和其他详细信息打包到 UKI 中。启用 Type2 以提高安全性。UKI 包含设备启动所需的所有信息。对 UKI 镜像签名可确保其中包含的所有实体都是安全的。如果启用了 UEFI 安全启动，则仅加载已签名的镜像；因此，需要进行签名。有关 Systemd-boot 的更多详细信息，参见 [systemd-boot](https://wiki.archlinux.org/title/systemd-boot)。
Note: 在开发阶段，签名不是强制性的。

- **UKI**
    UKI 是单个 UEFI 可移植可执行 (PE) 文件中 UEFI boot stub 程序、Linux 内核镜像、initrd 和其他资源的组合。UEFI boot stub 在 UEFI PE 二进制文件内部搜索用于内核调用的各种资源。这样可以在单个 PE 二进制镜像 (UKI) 内部组合各种资源，然后可以使用 OpenSSL 实用工具进行签名。

有关 UKI 的更多详细信息，参见 [unified_kernel_image](https://uapi-group.org/specifications/specs/unified_kernel_image/)。下图显示了 `uki.efi`的内容。其中包括：
    - Ramdisk 镜像
    - 未压缩 kernel image
    - 架构信息
    - systemd-boot stub
    - 传递给内核的命令行参数
    - 操作系统发行版本信息

Table : uki.efi 文件

    | uki.efi 文件的组件 | 内容 |
    | --- | --- |
    | Initrd = Init ramdisk | `initramfs-qcom-image-qcm6490.cpio.gz` |
    | Linux = 内核镜像 | 镜像 |
    | Efi-arch = 架构 | `aa64` |
    | Stub = System-boot efi stub | `linuxx64.efi.stub` |
    | Cmdline = 命令行参数 | `root=/dev/disk/by-partlabel/system rw rootwait console=ttyMSM0,1150200n8 pcie_pme=nomsi earlycon kernel.sched_pelt_multiplier=4` |
    | OS-release = 操作系统发行版本 | <ul class="ul" id="systemd_boot__ul_vtx_xs1_ybc_rasam_07-03-24-1526-3-831"><br>                                                <li class="li"><code class="ph codeph">ID = qcom-wayland</code></li><br><br>                                                <li class="li"><code class="ph codeph">Name = “QCOM Reference Distro with Wayland”</code></li><br><br>                                                <li class="li"><code class="ph codeph">VERSION = “1.0”</code></li><br><br>                                                <li class="li"><code class="ph codeph">VERSION_ID = 1.0</code></li><br><br>                                                <li class="li"><code class="ph codeph">PRETTY_NAME = “QCOM Reference Distro with Wayland 1.0”</code></li><br><br>                                            </ul> |

    **Image classes**

`meta-qcom-hwe/classes` 包含两个 class `uki.bbclass` 和 `image-efi.bbclass`：
    - `uki.bbclass` 生成 `uki.efi`。
    - `image-efi.bbclass` 使用 `uki.efi` 生成 `efi.bin`。
    - `qcom-minimal-image` 继承 `image-efi.bbclass`。
- **EFI 镜像**
    EFI 系统分区 (ESP) 包含 `efi.bin`，即 vfat 文件。该文件包含 UEFI 启用 systemd-boot 所需的所有详细信息。UEFI 挂载 ESP 分区并执行 systemd-boot 管理器 (`bootaa64.efi`)。systemd-boot 管理器解析 UKI 镜像，加载内核镜像，然后将控制权转交给内核镜像。

有关 ESP 结构的更多信息，参见 [EFI 系统分区](https://wiki.archlinux.org/title/EFI_system_partition)。下图显示了 ESP 分区的结构示例。其中包含 systemd-boot (`bootaa64.efi`) 和 UKI (`uki.efi`)。
Figure : efi.bin 文件
                            ![](data:image/png;base64,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)
- **签名**
    安全启动是 UEFI 标准中的一项安全功能，在开发设备中尚未启用。该功能通过维护被授权或禁止在启动时运行的加密签名二进制文件的列表，为预启动过程增添了一层保护。它有助于确保机器启动固件和 HLOS 启动组件（boot manager、kernel 和 initramfs）不会被篡改。

    UEFI 安全启动使用数字签名来验证其加载的代码的真实性和完整性。所有密钥都存储在 UEFI 安全变量中。UEFI 安全启动通过使用 PK、KEK、db 和 dbx 密钥来实现。

    要使用安全启动功能，需要使用 PK、KEK 和 db 密钥。虽然可以添加多个 KEK、db 和 dbx 证书，但只允许使用一个平台密钥。

    只有在系统中注册 PK 后，才会启用 UEFI 安全启动。建议在安全启动启用过程的最后一步提供 PK 密钥。有关 Qualcomm 实现 UEFI 安全启动的更多信息，可参阅 [安全启动](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-11/secure-boot.html)。

    **用于对 HLOS 镜像进行签名的 host tool**

    启用 UEFI 安全启动后，必须对 EFI 和 DTB 镜像进行签名。为简化此过程，可以使用 host signing tool。此命令行 Python 脚本在 Linux 主机（最好是 Ubuntu 18.04 或更高版本）上运行。它通过两个单独的操作自动对 EFI 和 DTB 镜像进行签名，这两个操作在编译过程完成后调用。

    **host signing tool 概述**

host signing tool 在安装了 Python3 的 Linux 机器上运行。它可以在单个操作中对 EFI 镜像或 DTB 镜像进行签名。若要同时对 EFI 和 DTB 镜像进行签名，用户必须以不同的输入调用该工具两次。
![](data:image/png;base64,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)

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

**host signing tool 的使用方法**
    - **运行该工具的前提条件**
若要运行此工具，Linux 主机必须安装以下各项：
        - OpenSSL 和 sbsign 工具
        - Python3
        - pip、subprocess、shlex、socket 和 shutil python 模块
    - **配置 host signing tool**
用户在开始操作之前必须对 host signing tool 进行配置。
        - **`config.in` 文件**
host tool 需要用户在 `config.ini` 配置文件中提供必要的信息。启动时，脚本会读取此文件并相应地对镜像进行签名。以下是配置文件中列出的变量：
Figure : config.ini 文件
                                                  ![](data:image/png;base64,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)

Table : config.ini 文件中的变量

            | config.ini 中的变量 | 值 | 说明 |
            | --- | --- | --- |
            | `image_type` | `efi/dtb` | 使用该配置来单独选择 `efi` 或 `dtb` 进行签名。 |
            | `file_path` | `local/remote` | `local` – 密钥及 `efi.bin`/`dtb.bin` 与脚本位于同一路径下。<br>`remote` – 将 `efi.bin`/`dtb.bin` 及密钥从远程 Linux 机器复制到当前路径。 |
            | `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 menu 等待时间，用于验证二进制文件。对 `efi.bin` 进行签名时需要使用此选项。 |
            | `efi/keys/dtb_remote_hostname` | `<ip or hostname of the remote Linux machine>` | 如果 `file_path = remote`，则 host tool 选择远程机器的主机名称，以便使用 SCP 从远程机器复制 `efi/keys/dtb` 文件。 |
            | `efi/keys/dtb_remote_username` | `<username_on_remote_machine>` | 如果 `file_path = remote`，则 host tool 选择远程机器的用户名，以便使用 SCP 从远程机器复制 `efi/keys/dtb` 文件，但前提是已在本地机器上创建用户名。 |
            | `efi/keys/dtb_remote_filepath` | `<full_path_of_file_on_remote_machine>` | 如果 `file_path = remote`，则 host tool 选择远程机器上 `efi/key/dtb` 文件的路径，以便使用 SCP 从远程机器复制该文件。 |
        - **使用 config.ini 文件进行配置**
1. 镜像选择：用户必须通过设置 `image_type` 变量来指定要对哪个镜像进行签名。选项包括 `efi` 或 `dtb`。
            2. 文件位置：用户必须使用 `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]` 部分（如果 `image_type` 为 `efi`）
                - `[keys_config]` 部分（必须提供）
                - `[dtb_config]` 部分（如果 `image_type` 为 `dtb`）

Note: 该脚本支持在同一网络内通过 SCP 从另一台 Linux 机器复制文件。
            3. Loader 配置超时：如果在配置文件中将 `image_type` 设置为 `efi`，则用户必须更新 `loader_conf_timeout` 变量。
            4. 处理缺失的配置：如果用户未提供配置信息，脚本仍会运行并通过命令行提示用户输入缺少的信息。
        - **运行 host signing tool**
1. 调用 host tool：完成代码编译过程并获取未签名的 `efi.bin` 和 `dtb.bin` 镜像后，调用 host signing tool。
            2. 准备好主机：将 host signing tool 文件（`signing_tool.py` 和 `config.ini`）存储在 Linux 机器上。确保两个文件位于同一工作目录中。
            3. 配置工具：根据配置说明对 host signing tool 进行配置。
            4. 运行工具：在命令行中使用以下命令执行 host tool： `$python3 signing_tool.py`
            5. 交互过程：host signing tool 将用户所做的选择和操作命令显示在屏幕上，将错误显示在命令行中。
            6. 已签名的镜像：该工具完成其过程后，会在同一工作目录中创建一个名为 `signed_binaries` 的目录。已签名的 `efi.bin` 或 `dtb.bin` 镜像存储在该位置。该工具会在签名后删除用户创建的其他目录。
            7. 对两个镜像重复执行上述步骤：将此过程执行两次，一次用于对 `efi.bin` 进行签名，一次用于对 `dtb.bin` 进行签名。在每次签名操作后，应先删除 `signed_binaries` 目录，然后再开始新的操作。
    - **host signing tool 工作流程**
下图所示为 host signing tool 的工作流程：
Figure : host signing tool 工作流程
                                        ![](data:image/png;base64,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)

        - host tool 需要使用 `efi.bin` 和 `dtb.bin`路径（绝对路径或网络路径）。
            - `efi.bin` 包含 `uki.efi`（Linux 内核镜像）和 `bootaa64.efi`（boot loader 镜像）。
            - `dtb.bin` 包含 `combined-dtb.dtb`。
        - host tool 需要使用 `certificate` 和 `key` 的路径（绝对路径或网络路径）来对镜像进行签名。
        - host tool 将 `efi.bin`/`dtb.bin` 挂载在 FAT 分区，其中提供以下目录结构并遵循单独的签名过程：
![](data:image/png;base64,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)

![](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==)
        - 对镜像签名后，host tool 会复制 `efi.bin` 和 `dtb.bin` 在 `/loader/keys/authkeys` 目录下的 *Auth* 文件。*Auth* 文件必须与密钥和证书一同位于目标或安全团队托管的路径下。
        - host tool 必须在 `systemdboot` 加载程序配置中配置等待时间。该等待时间会暂停内核加载，并允许用户查看和选择 `systemdboot` 菜单选项。`loader.conf` 文件必须位于更新后的 `efi.bin` 文件中。
Note: `dtb.bin` 文件不遵循该过程。

            - host tool 配置 `/loader/loader.conf`。
            - `loader.conf` 的语法如下：`timeout x`，其中 x = 超时时间（秒）。
        - 完成镜像签名后，host tool 必须从 FAT 分区卸载 `efi.bin/dtb.bin`。将主机上已签名的 `efi.bin/dtb.bin` 存储在 `signed_binaries` 目录下（与 host tool 的路径类似）。
        - 以下是已签名的 `efi.bin` 和 `dtb.bin` 的目录结构。
![](data:image/png;base64,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)

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

**`efi.bin` 签名过程**
        - host tool 使用 `sbsign` 工具分别对 `uki.efi` 和 `bootaa64.efi` 镜像进行签名。
        - `sbsign` 需要使用 `certificate` 和 `key` 来完成签名过程。其语法如下所示，其中 `dsk1.key` 为密钥，`dsk1.crt` 为证书，输出文件名与输入文件名相同：

                sbsign --key <key file> --cert <cert file> <efi file> <o/p file name>Copy to clipboard

示例：
            - sbsign --key dsk1.key --cert dsk1.crt bootaa64.efi bootaa64.efiCopy to clipboard
            - sbsign --key dsk1.key --cert dsk1.crt uki.efi uki.efiCopy to clipboard

**`dtb.bin` 签名过程**
        - host tool 需要使用 `dtb.bin` 文件的路径。
        - host tool 需要使用 `key` 和 `certificate` 的路径（绝对路径或网络路径）来对镜像进行签名。
        - UEFI 安全启动需要使用 PE 格式的文件进行验证。非 PE 文件（如 `dtb`）无法使用 `sbsign` 进行签名，因为该签名工具需要使用 PE 格式的文件作为输入。
        - host tool 使用 `openssl` 工具对 `dtb` 文件进行签名。其语法如下所示，其中 `dsk1.key` 为密钥，`dsk1.crt` 为证书：

                openssl cms -sign -inkey <.key file> -signer <.crt file> -binary -in <dtb file> --out <O/P .dtb.sig file> -outform DERCopy to clipboard

示例：

                openssl cms -sign -inkey dsk1.key -signer dsk1.crt -binary -in <foo.dtb file> --out <foo.dtb.sig file > -outform DERCopy to clipboard

该命令将 dtb 文件的签名添加到单独的文件 (`foo.dtb.sig`) 中，不改变原先的文件 (`foo.dtb`)。因此，host tool 必须同时保留这两个文件，其中的 `*.dtb.sig` 文件在 UEFI 安全启动验证期间使用。
- **Multi-DTB 支持**
    Qualcomm 支持基于同一 SoC 的多种板卡。例如，基于 QCS6490 的板卡包括 RB3 核心套件和 RB3 Gen2 视觉套件。每种板卡在内核中都有自己的 DTB。在启动过程中，UEFI 会根据特定的板卡选择合适的 DTB。为便于实现这一点，基于同一 SoC 的板卡的所有 DTB 都组合在一起并存储在 DTB 分区中。

    **生成组合 DTB**

为了实现多 DTB 支持，所有支持的 DTB 会逐一附加，从而生成一个组合 DTB。
![](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，以下 DTB 将合并生成一个组合 DTB，`combined-dtb.dtb`。

        qcom/qcm6490-addons-idp.dtb \
        qcom/qcs5430-fp1-addons-rb3gen2.dtb \
        qcom/qcs5430-fp1-addons-rb3gen2-vision-mezz.dtb \
        qcom/qcs5430-fp1p5-addons-rb3gen2.dtb \
        qcom/qcs5430-fp1p5-addons-rb3gen2-vision-mezz.dtb \
        qcom/qcs5430-fp2-addons-rb3gen2.dtb \
        qcom/qcs5430-fp2-addons-rb3gen2-vision-mezz.dtb \
        qcom/qcs6490-addons-rb3gen2.dtb \
        qcom/qcs6490-addons-rb3gen2-video-mezz.dtb \
        qcom/qcs6490-addons-rb3gen2-vision-mezz.dtb \
        qcom/qcs6490-addons-rb3gen2-ptz-mezz.dtb \
        qcom/qcs6490-addons-rb3gen2-ia-mezz.dtb \Copy to clipboard

    **DTB 分区**

- `dtb.bin`（生成 `vfat` 镜像），其中包含组合 DTB 镜像。创建了一个名为 `dtb` 的专用分区，并在该分区刷写 `dtb.bin`。
    - UEFI 解析位于 `dtb` 分区的组合 DTB，并为硬件选择匹配的 DTB。

Figure : 创建/签名 DTB
                        ![](data:image/png;base64,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)

### 分区

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

Yocto 工作流程中的分区涉及以下实体：

| 实体 | 说明 |
| --- | --- |
| 分区布局文件 | 以 JSON 格式定义所有存储分区。 |
| gen\_partition工具 | 读取分区布局文件并生成由 Qualcomm Ptool 处理的内部 XML 格式。 |
| 分区 XML | 定义 Qualcomm 内部 XML 格式。 |
| Ptool | 提供 Qualcomm 分区工具，以将分区 XML 中的信息转换为 GPT 二进制文件。 |

下面详细介绍分区定义、现有分区，以及用于为 Qualcomm 电路板生成 GUID 分区表的工具：
Note: 以下分区布局和示例为 UFS 特定。

- **分区布局文件**
    设备上的 UFS 被划分为不同的区域来分别存储启动链和 high-level OS 的各种镜像。为特定板卡定义的分区的完整信息在配置文件中定义。对于 RB3 Gen 2 板卡，UFS 闪存分区在工作区中的以下配置文件中定义：`meta-qcom-hwe/recipes-devtools/partition-utils/partition-confs/generic-ufs-partitions.conf`。
- **分区布局文件语法**
为了方便理解分区布局文件的语法，下面给出了 `generic-ufs-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-partitionCopy to clipboard

下面给出了 `generic-ufs-partitions.conf` 文件中定义的一些分区示例。LUN0 中定义了多个分区，每一行定义一个单独的分区：
Note: 在以下示例中，GUID 取自 `partition.xml` 文件。

    - 示例 1：LUN0 中定义的大小为 8 kB 的 `ssd` 分区。该分区不需要刷入文件。

            --partition --lun=0 --name=ssd --size=8KB --type-guid=2C86E742-745E-4FDD-BFD8-B6A7AC638772Copy to clipboard
    - 示例 2：LUN0 中定义的大小为 1024 kB 的 `misc` 分区。该分区不需要刷入文件。

            --partition --lun=0 --name=misc --size=1024KB --type-guid=82ACC91F-357C-4A68-9C8F-689E1B1A23A1Copy to clipboard

LUN1 中定义了多个分区。每一行定义一个单独的分区：
    - 示例 3：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.elfCopy to clipboard
    - 示例 4：LUN1 中定义的大小为 300 kB 的 `xbl_config_a` 分区。`xbl_config.elf` 文件刷写到该分区。

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

LUN4 中定义一个分区：
    - 示例 5：LUN4 中定义的大小为 512 kB 的 `aop_a` 分区。`x` 文件刷写到该分区。

            --partition --lun=4 --name=aop_a --size=512KB --type-guid=D69E90A5-4CAB-0071-F6DF-AB977F141A7F --filename=aop.mbnCopy 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 sprased image, values true or false)Copy to clipboard
- **Linux HLOS 分区**

| 分区 | 说明 |
    | --- | --- |
    | EFI 分区 | EFI 系统分区 (ESP) 包含 `Esp.bin` 和 `vfat` 文件。该文件包含 UEFI 启用 systemd-boot 所需的所有详细信息。有关该镜像的更多信息，参见 [EFI 镜像](https://docs.qualcomm.com/doc/80-70014-27Y/topic/platform_software_features.html#systemd_boot__efi_image)章节。 |
    | Rootfs 分区 | 该分区用于刷写 `system.img` 镜像文件。该镜像包含所有用户空间库和二进制文件。 |
    | Overlay 分区 | 该分区留空。在启动时，文件系统被植入该分区，以用作一些 `/var` 挂载点的叠加。该文件系统中的镜像作为可写存储文件系统工作。与该镜像关联的 IMAGE\_FEATURES 为 `overlay-etc`。 |
- **分区工具 (Ptool)**
要对设备上的存储空间进行分区，可使用 `gen_partition` 命令生成 `partitions.xml` 文件，然后使用 Ptool 处理 `partitions.xml` 文件。Ptool 生成 GUID 分区表二进制文件，QDL 工具使用该二进制文件对闪存进行分区。Ptool 工作流程如下图所示：
Figure : Ptool 工作流程
                            ![](data:image/png;base64,UklGRnhMAABXRUJQVlA4TGxMAAAvlUOzEBWPwrZtG8n/f53RFn0gIiaA11ZSz+LdAZh4mnWXSWlM0G70+ODLzJMKpGef6b6A5C4gjpwrT4vktrhnr/LQfznIaFpyyYTasE64GzyvtjtyJKnMMmnSpElz9KRJs0yaNMsalEmTJk2aNEdPmTVem2O22T+hzDHLbHO8xd7vuzdExo3IvtGNLCC9WC0qiyiAibBYw2CCK0dxVS2uM4pI4IJIg0CNXC1GJRCJHZEgV3JVkECGuVrFigQSBUSu5MrkSpocI3tbYbdFAgSaaN2jA6ZsW5akY32tEwsTEwsTExMb+xMSByeaGufP3o+LBw8mXrwI07YlS9LGwMDCxMCYd2Biv/8fBwcLB/tPi7adoLW1AvSKYlPeASwm0ver5dl/2XYk6asULNgwYcCCAQsWTJiwYMKCBRPWZ93/3++/1vV1Zp64q2vcPa4eajx2z/0HKVnaPc/dIYVk6U+SLamGBSwlq8Epo9aSFkx59RisLBkmOmgpWE2hnttgSe7BqNQ5FIueWXwDS8dkI0n9d/Z4uHh4uPhospHksD4eLi4eHn7/aUGSZLeNGue94J4BVQ+wDwIYQPfrxf8nT7Jb/9uWlyDoZXgJXoaXY2goKKglXHjhxRXviKr+cz0zpQUYJgvYD6MDD2uYKJhhwmQHFmwoFjBgbkDQTLCSCZoFFDxQGzATjeg/LUiSxbbNovRceCKouRfduwcQSyq/l78O3Ekp+k/Rf4r+U/Sfov8U/cfZuQ1mYQrOQA5eADYv2WZaXhLLvBImQDmGdCrimDthGpSajJzWmvc6/1HnfS58jM3Lrd3Gu1eU2t8TxeyriYw5lk/kwsen7QvUXWlR7QtiKmpxF+278P5p+4J27S6qishlj0FHlfwkcwxJ/JLqiFpuh3Nm3Jw2p2D14fUt9EZqBaKThBW1JGS5AybMqMkNk8u5V91u9WTneLXXK6t3Ow3vVmURy3mQuYnkvOKh3SblqvKwl6qG09BQqYDlcMRMLpBDZVTvO9xUuxokDMnyMPMUSzrnzQ2w0Wiv94KZza7aFK+sShzPT2+5uFTgIJW6pRF9hoAKZjdNII2CubGByUbvidd74Cq5pXLApCyR6Oh/+j+4utZLlS+2deufm05t34uKppvllsS4CYcHtc/oODehTuD2U6+HaHer9ymNtuQ3xiIkkWmuRuD5UzpeEPlKH19rtKbBG9ZjCJWCSEOU9iO3d8SPZkwThzvKPtYa9gOl6V5VkxQZnTjoillzSjFmuVlNdLPSfMZNNLTuSdoaNSherHpHkKBw3zho41EvgNZoPTUMM4ZQKAJQ6tDbjmKm0ARxdYP5aKqtCB/XqRtVXUFiEmxb1ZxzS90VtTXtdyWtn2C2bhsYnIwaHUCDoxNPyjXs89SrzQ2q+PFuOZpV9w2p+mfh8GwKRfFSAMCPhpRdht4vXLugF+EnmuVezYrgAsW70/34oXStz0d3r0LeDgHbkC9Ctnf3bFNigvC0pdLf+tF2cGVO0pu174FidLM+8MtMeRPN7G+8AQqW27WYKTxTe0DzXTFrIeMI+rOZ19IH1XkWAkauRlHx4LQdlhjaHqCHyX50NAYX0ZfQ1GW91AtqWvU81tE2JpnoVi+CplIgRoVZ8GSNdgB4OzL1KBtY3ysACYUx4FaQERmuyaGQZJh5W+47gUgsCoTkXhYt6Hsk7SOaru/QM2ULplpKdUv8Is4kxlpwh+hXcLhaEI6bU/WX5ThJ8OB0AWWh7QE6bXAX0AZoFU4ZXdlhiaIGw6iMi9iQjybtNMuWpKfIAYoKyjgLnmEJlvKdFyEdu5OwZEt7L2Nxq9/Q5M9YMAMXFvFbjsauksyEDZ6/IKjF60KEFGQthLNbytxBldcliTgrO2k+utID1mQqxInnxCy0HUB7UhfSUPLKj+5LiS5wJ85c+w7tUGCOVr0GKaj/oK+cuoYYqELDyl72HiEiR62BgzA6l+3RnB7V91tTNDPLLTIzE5a7ThSOIoQeC78sEUeQgNa96ZRVi5mVyoKD82cW2m7RGMumisQU27JJpeACMKD1VxL9lezQuVTUI2jr8YUqNIFbWgOLWxfMAi22NKuHqfUhUdTVhuNsahaO03xFOKukfFWLhyYOstsa2fowkL13pRqkULD49JQZQqEyTnOh8I0T+pnsoOhqErb4TFzUgciWbk+41l0O2NZtzoScpQrdKncT0QoOFztmdJbl7GGl4hzhLDh4VYeHJgSKUVijGChAYcpqUL13/4ycqShMQ+dsrR1+9DVA1f0RNGzPuJqAcYFnd6UvUVcrdpuqFS7dTi75sBQLq1kfwmHErvywmGnmMg7XeWJEaiqcMdtfsHRTVBgcNiy0/eB1UsrST9990iyBi2R8Jiqf1uAqRdUunkahqRjB25MUmkngIShtCRixICBhhmGTTBveBeS7yz1FbOlWRwp1S6s1JQl1Jiqf1uA6+VzRBJgoNA0jfCsv0bDmDEEFFv2eoRCgihlylRmw9JNcCrwqO65H+YsosL9lx6rMwCreXFvXG1DeS/h5/+Wq2I5VvJv5DuNVYcb7Ds31IMMh8X54gMj9n0EmgP06HcrbWvw+A8Gpnkwiep8X5FhP8XIrn3jpUj4d+p4sKykoIi+BZeUIQtXgXWxxMJaVwJVlJ0P5AleUs5EIW3E8MkErRbDRH1VwC4mbt3yPL3qN83gDSpVVoSD3tKWbPUvh3sVIMabsmoDBqftUvEf+gBnatxpxOMKaAw1OxWKSIFqENcVhyOkNcSLjGLnbCOb2DjGMNAW80GEGHutzzx9yMG/3+QmTvMZ5jKfUWGf4YUMUBACJjeS8ZzGamjHeNaGnGuk+Fe+RP8BmYN9qxDMU4ak50OBULCYJokVYmxa3zBviRMYxdreZ3daBplnTdmmBQfj5PfaF/LmNVXE9U6Gmvo/qGgY8AaRp7fBiM9aWykk8ATqA/oG6hoVw0CNyByxmd8dHUuM7HTI+mA+f4yfuhaLa3qvZ3uEVLH403ZXlYhKDUDSUeCkhs5I3Y+Bg6s+8N/Fe6IG84PNoJlB9FxhEK+4A1w7Ft1gQBnolm6ExiQNHfSMpiJwtI/gEk4xVjwaBRfDCaNUd0Sf7Jm9i1H0NjgJxvGYqjAnuS4E6GscRKdB94JgSrnfGv6ztvJt+cEYeYsFDiZA3a3hsG8MnBQMz/Kw7kbLeDIwBISk8ZrgnscGMlW3G2Qpx6rhEYbWE7EXQqqzQgrYlZwOn1o41BLwUa70JS15jIxDtPcNPweamS4sBECi+VbP8CUTdVm9gsB5gsIBBMVX7LnS54CshNgxp1gKBrBX+waOfYo09Bj2BlCTNukBLMYiVWBbCsSo19csliwrAa96OujGIM8U3edt7DRASh0qFvWkGODBJcZTA1jU2qvBBMS7NTAkh7akZc4jFHGGEPEEhygKBaVV7G5ccsv0Pee8sfrxej5asV2nAqeczDG8BrSpdRjsvfn0CHhqBFjcJmW2d3/pROw1ZnVuE4dgif++RAs3jTLaK46u0LMHARTuOJjgdlwt2ULXv1AgLHPTUQYkgLnpM3H9f6Eul4KOxSUxljbqGNO2SJQSLWxC17DVyMdoDglagy6lFaeUTaIpNARVNaKtKZ0qtYawiBYYOXe9LWuy5scBAxeYiapfX0ghLgWameKtr0HCn+QZv0JPphNyzaVQCrOxL8UxxbJfB7mGsDRwUjxYUxT1L+GD4r+5erbztXrIM8oGjBWgrIZvo2eFZPNN/2w6P0mdWlyN2rAyH7FEDH2Rwk0bhVTr2ybS6DiDL9AKUNfA4VGwBMtlCyKPh0ajgAoj4qtD8VOhcbF87NJ2NAQbdo1aXpe7dHR3CwJNLVjZNHUDtOzj8QSoho6JIa1N9kTUIPhsznmxo4uhrcYIGCurfAhVs2Dm/7d53bvaG2phQlYLjjsMyxtREFDqaf5QCk941sDi3cXnmXowCBp0DFqo3UG+b2Dd724oAIXCEqHIx3pcSzZ3iWC9LPigF7zbAHyDYXbifjkazFXguf9F2Jk7VizKzqYMEB8cm/Lft9ExTJ044+4G23VtAGxD0/X2H734Krare4JDGJZM0W4Ss2cpFCMitjrsGSoMm4E2ABkNtyeo4WYQSrO1rB+HwuXevAsSTDxCN8/Ma8NUuoxYK/rc0Y9CtqcKmUdnzAV8OYSJc+l7gwfN7RwmLdCDY78SIGqV0O2AFW79R6NDXZZSCLbJYdschELo5ZeJZyybsnBRv4gVfRaP4Bh7jqCtijgCVsi/H8mx7R3mVnY7VVd1tJGV3jZV5WlE3FYDIJXC0kJmqiKg2ob9thyY47/ksLvdc14CJCw4+5z2g2oGDGoVKq37YVVVSwJZIscXC45jlcDSiVGg4T6SYGQu7eWXRviNaqTCKYBsLfih7z3gc4gAGb3H46PCjbRqXVsCaCI0V95KD2ntAvZE7d6jxvvJYqAJIoWLvpLxeHxBv6SZ4Ji/i0FX3/q2LNHDuTCGepYDrUoRrp7NcgQICm90v588zcca+J3S6oWLvWOhUFEze0lDiCLukNywwSLRvNLkjBk643X1TJoWOFtxsVlVJ6G+7wEhq/+Gsc9uOKkSRReus7NzcoVVqgKgdbKmiDoRwcwFG0jRtIUY5Zrk10gcR+Og7H2Qwc8N2RqG0ApZbbyg4BENzgPx27RT8b62qhEtT0Qr1A0SE2cEQff+jvgtnKjmqWhZQNjz8QUroJJwHNaCpnN+p0L4Qm7ZUckQ1R8zMyDd5u0G1QqXsVtjFAkhxbOedBKDXqAKBSbALdSEVfaCdFSjG0lRIZFdqMxmKuGrYUxHVZSNl4cSIVlMBVWW9AJC+a2Oe2IuoLhmrX8OBjl9VeQ5GDbUCPFFBg6DREydvHUZXsagVgWprRzEKPhnTq+nNZBmHz3BRcTJbslil1WCHFTr3erSY1XAyixwlszB0GHVq8LlAY6HCqv5lW1r6GlRo3s77WFnQ2Td4Y12nvho7JnGvX3Cw7VVZrVpRVrMZW733rGksVcrRooSoHZVkm+BoUVUwFDuf4VyG+7NVRWPJDxpLXS28p0Dt8LdnkNKEI66TssiWJmswgdS6JLHHUqD3jh8e8fc298Ks9AazQiPbVL50SbuE9cZyLzz+9F+FQaJyUALXPTj4ZAyRjmdgq79VVrtUU6Lr2mnN4HXFdoCFsQgNx1uFdWoBtbG0NgmhxKjjYEpRsIxjNwBAR0vjbztqcTp1E3EpdZJv8KaJo8AcTEX7BPclYGQljjucNcNq9ahQhQEijeXH59rzrkk/WjAc2VAbJaxW7RQRdL7qdcHYV3ZN09Ej4KbGE7DIyDoksuiEij3CjsFBghuw2tRDMcMxI6aIoPBMkYOvGAOAUpg9GBMwq3FyDAMU08I/QCVnNoUD3eo7MOQqFJSIOCuxj4jN1CCnThO0EAhOZBxj9lv4eNDpVJB5g6MlFDhKy6yQYM5r4GVcQYgr1OvkEXAqT8AhI+uQyBIg1B2H3EWEJBYqEApGuif338J2lOCzsclXQ7RYBajBg8JJMQxSzPAP0MmJReVQdtJVIwkCK9gRcVZiHxEbFTJAE2mB4hEZx5j9Fj4edDoVJBCMgIuYwBUYNkXzy3suhNmMCT4PGnd4uSpzfpk/5pXRKO4kXKrM6/zxkXRXuzged7jL3XBWHdp5N7fy/zCx6D8/pqJYd5ATo5Zpa6vUWFSQKPeRVwGRov8U/afoP0X/KfpP0X+K/lP0n7tN8WZIqV8SQ7OM9Ujf5vIlb0tRB0AnVNeQvs3123hbqjpzUKmQiEKlctAh0Y3JtmjYoARHV+YQqwZ2dGeKWTawoktzIusGVyfOyz0LBzcnzss9CwccXRssHFB0ldiziHWRHcQ9gczW+sOrcvXh9S0LBN6igfoTwtwBxzsn1W63Wz3ZOV7Ne+AtGqo/8cuhzE2kCb3iod0m5ary0F5r01j9iV4O75tcutCAUEvqVu87tNWot/7auP7ELqsSGtFtw1Gvd+fV/B0KctVO0VF/XyD19wEc5KrQ5Tg3kUZ07ceOvnDtx3CoHts0x1WotA8cXXmmd7FCoXoscrkddqhvgF1oSUiHnS0bRav+cAVeOSIvuP4ELusnBNR4vnBEcbJuo+irv2d6z2BO1gUuD08uNB/AO9rd6sM2ip76616sSMRUHxa4nDas2HuGalCrwFI53cyB4kKyzbS8lDc06o9xrfFj13A4ZRQtHNXfXqQ9SQ9taM4UI3u9SkdxJp1KvtmTFPgEGAnwV3+7UtN9Bkcq2dtXamVtjjPPyyv9ct4vXMiwOcdZW1Fqfy//CWu27AuY0+DzJbd2G9NaqP6EUTacCA5ifA/cV4uzGmio538er/97cSEfg0/YXFT7JloT6s/Gd5YYxapj4Cd8CRw6xyL1J4yKYeOFXo8u1lGL87zEqKW+/v/JhaAPGDcXVcU0Un2hA8UY1gu42JmdfnLh/ZMrQbt2Sf0JpvukdLKj1KwmjhY4kyhuqo55z4bXF9R9rM02ZqTEdQxnu/yS6ggjmyK2dKsvMGoFIn9hRZk2c6p0hSW1MzFo198LMiDyGEj97UX337IbUVV+i1rjkzVVNo1lPaGspvaho/5m2bwyraXKu5FXhdmI7jtM1ZBPhio1L+noCKlq3BwBjfr73Zsk8klDpfuUr3NTzfPCJ021aR4HOsKm2vVvyt9h1h/EhC2mTBMB6fUecoKWethVm/vUeyDkQL3SL/S7ak/SWpqPDVVm4kqAOkKmbiX+LLvvUfXn9d8N0WdLYsbwalP47h0n+lx6wi2N+lODTf+3lwq3WfRSRY1u/XPTqe17UdH0XpTmPNg7CoT/gOtpR5ULw+cFKRVTonHaCPSw9otSjPZuUJZVRUdQyocblddvPP+EfOL5G9d9FGuSSPhKn1pYqss6vmlKjavKQKyuZ/VzaMI3yj7ekTU0TkKNuTCKPo2OLoK5bqiUirJWsyvuSvG6a70C9YoLFK93nQyMgRQTsSRqR/huKX0rc447OKcGPfhgWRmUygYOGkDDZQ3ISQaEJUoPAlaIGleVgVhdrx3ZtkVoQ0iMGl7M55KaB7qLLZres7TF5WMUTd+nYiQz3PKcmnF4hN4AAQfwkVQMCmMVFQ3Yw2iW0SSJTyWlUKJyNdBlrM/I2Y8GMAUoju/13Ev1mt2P11Jk9427+rPDM6IKf977pS/DNSk9s+nNWgDF6GZ9YLaaKW+imTlPIKAolS+v22HOwbQ9zHTOWuCZ0tSUGFpgQMCDi/KXoMPMYQTccpLlnwYOAWYyLVbnSThEZUqhHlbMLNM84QfAAKwjY9yj4xrDb1BQEiGiuAWHQ1kpZ7gBok4rjvhgw6AwggYa7ZKVUMDVsBc0GAjCGiVb9ioUUFSvgkmMsqXqhXuVdqyNdO9ig2gcNEymBX2PpH1E0/UdeqZswVRLqTxxFfLcOZhaEkothJ+kBa0PiojQGA/SciEmUAuhbcTgTaA5LIrkuBxCBeI0X/8BHJlHQwygM/0GhSdxKxgMJ2KlQ3I+UIE3TAtGoLM9CmjsjaCOLoM3wShM/6pCERSgVK/VM/BN8UGDPFLRM5eVHFGohutChBRkLSRwAmRgPAsx80tNCIIKM4rxPBmtTL5Qs7wVIsARE8/9OYfl45BV+AcTf4NGVwJUjszliLtFv0HhCeyD9k/2xc1wchdjw14wM6lL3DckSabp9fJaI/W/ezFUReG/xn2haGaWG4QXiaWkojzkFCQGJokw+mCLWOUN8OAV5RW5ZS3lr1LdR4GZN6p00GgtcrOigcpzVYk6pN+g4AR6gBjoh02AcYgtbujKpiaRtJKPpAe4QaFrW8Zyz/eFYBZosalhG0sgtT7EhoHJ2ShXWyYOPTY1M1tvMVca5IgugPWj09jTIeagO9vr3mUkHgsVXU0CEv9oHe0+0KDU0T62dZszIWep693mXOxckYl+DH2Ld+taN2JS/S51buj+xQ9V6aBJ1ZsrmXLtp8ga/T3fbScnMoApxdbF+w4neI8MGsvXo03V/RGttlVq+t99jXaU+0AVL9TOVcGSN4VUFS4QC1dxEUyolXAKK552dphkrAXjqQUOky/lEkuy4Xjj/k9xfuz+PKo4rAWEdrRERTNNDF+lw1aQIe738WETsYaoWDBgFbMt6wX9Nj+Jxi1R5gbDEFfkD5ghOAvDJJk+7nHLFndAT+L4PKIqS0QPdld3+hWOYAOiiH2fFKli9Y18W/oZsI/VNh/KWARDXJE/4KqRhBDpT2PY0s/uYavFnFbadxAAldlSEeE5nCl+Ex0Xkt3TVi4YQca2lDERfSY638rk2yo+MdelBMbX+yJXhQ+r+Ghmd/JvivgP4lrpc1T7/FFpFoyIpcmzB5mfmP8YkVMng+wjKDyCU2fKJ/n1tp7W0ge33tZ7oSL8bZc+Ux6T/D6ZZMU+WFFLu5Vot05mOUYb16VT3MKzwoOpXdihRVvdiCFIBwPk9SleHTXH0hd4fYrXfqWYMd0bM5Sgx2MNnZheLNgGKY4jLXUZqjJ0ivST1ydeVtTirq/nSyqnT7wUV8QtKftk0G2G2EnlE6Hs40YcES3O7Arg7ukgkPKcGmmRizWeh5T9GW45w0mlTGe5oWPoS4mskc6qAwkjdjxMwV1rgHqLPniL5pm36dRmXy2W0IQuW3h9OrS4YhD0YwIYFCFjInSmOKJIh8S2YZjOcMd9rBNt19AM+0iFftgkKhD6qO0DkJMOsUKGkrwKWv3h3Y3dWz5LeF1JQVxBXme4oXlD0x4E5EzQtFsMwDIXv2DzP03QUNwKBmCWhDoRpCbWpNWSLWuCbI2WFedCffaCX5yNYAC0JMg59SBo6WHedxgMWvoANSlamjTDFtm2KMtKEMiycsokjmOd/Ba0df2JBjGDuH/lCmxbM/EFgSjldNnDlJGtTdhsoYG7GWL0ZzP6C/gMkE1UkS3LYsa7MQ3dw5CAEsWiEcTAsZ8Zpl8rme76F6xWgpOCXwNaBdk8aP/85+pA2c0c34zjAu41Gt/3zfpMETQxz0+j0BKEmQahpwYIDlqMBj1ij54JjvtSXpEtxDCVaMzuy3CWA3r0JVFMg/TMLvTgoWYYNq2L/gMVqQhWstV3ZOB6BlAKm7XPyBfyJpQqrO3nBscaUym8fEk0542kOj0gYaxKVGSz5gK0fnzfyACle1UhCFZzhMzs+fC82VbMlwxA5NoYhMKiBA2MatExgvF356pgiviuAdPiRtknmhmAwIDs63+vihEAOiIkIGPXCpkaTqQJcCjxDEY8Oz5azR2iYKWYFfe+m1UhApWCBl2jTD8h50vwBBHjhifzVie+nI4oTdgqRGw9IlpdagNpgUtbFrVGHYuMl03aeoFRAAWUKiwIFqISqcMCqFgmHyLdqiiLckaokFcNgmBVRyLFTi3ABaHRUdG1MCqEa5ADMqpGB5d97UpArhOdB8OdOba6mUkhAV1aO+/hVDoE0t0E4gttVaXRZLLLgxGnUG4AY+UNvXqB8JdirbeNBTSohyVc85lTkgM1hFFWMoyDUD4MxCDBtCYAhRiGQkwVFth6LCwwNEFA99CX8Grkme35Rzno2lHb+a3045bdJVf6M8Z/3z3X9dkK642x3Ku1M2xpTmPKCsOCFfcM4wCOE0glAiLjllLb59rsXthbFaoirmU4eb/ValOYSpGCcKr+pE0wVLsGiwswI4kE4jWMZWRePIg9cI0iExXyxzFoWveDfBDnvfvxelUJCAB/xTPFsbp7lS0dF4ot75MKrvdFIRnPxtd+OOveP89671/dgOoauK8EaAc3GM+9uAM3jrPc+inqU1FZr2GX6xHHmM3tE3RO+1oFOGrft09bDWQ0wgbUvIOyqZo6ntiuYRiUB/NcpCv9BobWN7EGE55lMKwdRY4lPnyKBT6Ujeho7chWZPrJlO2ogpj7vhFIUYrtvZKHTcBGDwTD5paLsbcq3cylbaDiBgejKWAgwoFnpNDxjMaP1jrDZnentsGcazQQmRdB0NCXiBuHNG4tfHp0YFA72n6WPksBXoMgN2gFdw2MOu2TuoS0lrHEBEaznQXMGgqGzcKjPIZeGX0RSpXXAEfJGM9gxF26tcnbyaUIhNDtfePO1B8UrkDHhKwFpm+FaeZi7flZRpp+A2NrgVmCadRQWm88983S+EJa1TYWYasipoQhp+9FKAtRb4wKFfGrp1pE4I0kg2Lf+avbVRXh1L4jqziBZljEE8FqjhhfEZmHxs/fta8gMoGg38LQaAVMeHuV+KEU4GJqHCu0fNozG1PrjVhytlLVn0atnJWRFtyAcF3c8wrUJiXqmt4W5QDRffUGnTTF/jI2EY7tHfo3T+JPmmTOSZnjdTMtlpx3EYwt0lID+t8dONp5RzFlXoMbVAa1w93rRsVydy8kbuyat4xPcnen6aEuwhGfuQDcIWMZiWAVR5PxNZ13VkVdr6TKjkQYGlVXkcBklArMcSww/mYURr2dd1K7/O/ts+ICdd4VCXrflTC7Z4yR7FuC0rSGquPtAnxNAMidOXTs49JMhM8Q1j+gmndQljheY9pa2TCKdGjfWRRVqELKiGKsLIVCRW2M56QTpXozZXWbV1UaDmrvdStUEVXmnoRHO1OE5uO098pF7d/C0Kgf5uTWFiGOY9/DhapxeVZM+TADypuKfiYJLW8Cg6ZAReq858LxVCIOQlN9N+yPvUDPgDPp2t9NVN3uew5Lr8Pv7zGwVDF8/B2MO3sXxVWrOnJENal6JapKNnKwULzlYlSd+x4uCEdTVguGVcdV4kRpgYwVP+mvUBT0DwBXpIeMEEFukh+yd7Vak2WvFlccgKnMcznKUP2tBXtHgYrWfm4UT9XXBkdndwGGf6QZFQslQd1pqfD720UsdZ8Uzl12mb95f3+BMvygrK6m6vzW+x5YzcY6WoUzt0AFiHhqky9uojRv+Phoawd+DglxqLDs/mxVTQirOyJOVC4cmiiRibouHLQCo6/mgR5sHaHJkH68L/tg47/QapoAQb2gaztu0bIfz2RY1z+PhdC/inN1gEJqVRqHVVit76F9CXu/8KzASlGm4NnpaJLw6qz0uP2dP9aBBwAzi7tiqqFw/XUym7qlGY8Z6ndUwBB8CExfL8A62VCMo4D7aWH6COPBoM04DyFgBJpR1qbKk0tUQGyGIhERrCCBhhKGuHHEpx7aGbDqtPD6m7isyJxxdxdpKFzPTNeruqVrPGboKFQBA/BBMH29AOuVDYUdabSxNyPFGA8GLdJDCJggg9YCQcZnbOsmGD8QiYhgaVD0XRinICEOCOuNIx4IrY6UOS68/n48a3Gd0ImfbMt9tAfD9xKFOW45RM4Ln7+10nJc57wXx5oysEWSMtANDcRsl4DDW1LQAgBBeo1RDQQj3GgmwNaCg1uEtRBa/PzlGqSJiWME573avREcJ4fsR6zBrQ8eM+5blTSJm40lM+qHEHBwSwoaAUSOWhrjVANBCPHfmplQ8RSPZhZCi/+uP0OxiYpjBOdtNez30OJBJGrwQZ7bSDYpeVtPMXCNQqe35tre4QaEDOeHLcNFSjyTOq0KGjA5n6EFPKEHiLx3RKHv4rjRSfbWgCuGfQe6o5FJ4m5HBaMAzt50NPbN3ooDfSgKx1d1qmzkNC6OeyfwXGXlYvOuQzSIRA0+wHPPk01IZoqBGYVeihndaVr7Xg+8vtp3utdtPze8PWbRFcGyBrDirahTcQz00gg7qDiKXqMr7c7oVp01wBpfgSyliNYQeMUbxUGsoW/12mUJEBIHUXEcyWm7jIg4gnszSoQpFXbEnYYoWyIiVaXiFTu4QBpONsGMlJskm3z/xHSN8rZ7sRh0atlwGz3ewyDtKBdpfuPSsKfJOPaC9l7p7rXetFt+JvU89Xhfio0di2njcsHriyS4f+AiTR+59tU2chHAkzeOw+ZM823orZQAIXGQc44jOp3Q6oupcQRWAadEmMvrBYTz7kKcLRFOVYEWlzPcq3K0ULKJwOy9Rieb0P0CMhQfghSFXgo0UFTepN4uuN66Z2721GKtZBC1VZihrqE0V7zGu58rNrlpuQhuEZ9UFKuXxdc4DGcaWKjeKA6bM8U3eYMiGAVpzgoVeAenSmcSiKMUyiIdU4V9MO82JEdob3zXaS6U3YFjizZP5aaGg2iNTzYpGboR2J7lEoVOOYzS6bQjyyS19G8tVC8SA7BxnTNKaHSsAjzS/6By5ia3r52nytIfOUw2qlel+ZcqLZKqqyKKgzRY9M2DMEdKEXOEqMipWfW+j0AcsZrnBMJqeLvfHcaH7J6jUlXa4WvgUZxZgFkoIyUu2YSE6Roli2LQoZvAe0L9fMbp9xoFROOkXggjae+PFnmoHQKlqF3GJrjbr1C7B2D80DEzpX8kXHTiSS/0OEgYFN/obSt0QqXQqOjLL025A2l15F4NezWluLsQHMJRqSoGTfncYpJNxspUIHPlv6YI0jWgkZQIdJT0KtTYQt//Fox12Kj2FVUNrQqnFnUNRVmZmfN4iEEBDbh1l7HBSy4R1WocFN/iDRQgJA50H4gj7bLWmxJHFp4JBzfj7qMaWuGlRaSqtPNO1e2oSqGoeo1JNlGE6Rql73uvhB5VjAWDaRWvVTlXWmT2SedeS9Rqc1LHAS16XvGDfirHTDmDDM7pRHPFlGRs6YIUs1rlHoJ9ozfUdepRUCYsU4kjOsU72dcIxFEpNtVidqexmpotEZmq4msQFd8oQw0AM1JukGwCNvZNl8OzRaEXd1ef+VPcs3pdEbdUBe1G10nxv2iaE3W90mCK0aARuxqEVPBgdYHM2dEUeaM4kLXq7E2TEgUSUilxJKeUH6LHkdx7NfgvVHOXoeuE85E0zM2Ie3DsdpJNzDI2pDAVWQ3xTuQKbklBYwANX2FDjhveU6SDq3jo/Ubxm6Z6Y4eKCdXxVON4g3CSS93DXYVCjwmGc7f301u+St9R8z3OcpeEu4GlQEUIrTp0V4O7g8XmEdlS9J+i/xThgeUG4TKyTLsMuo1JBYlyH4H/S7ei/xT9p+g/Rf8p+k/Rf4r+U/Sfu03xtpT6JTE0y1iP9G0uX/K2FHUAdEJ1DenbXL+Nt6Wqc1CpkIhCpXLQIVFoZRdWYYMSHMXWIQVWYEfBVazQCqwouk5UcAUxFuflXuEVhFicl3uFV8BRfFF4BRRdNPZMsy6C6Jaxtf7waSNXH17fMiWQ6JJxBxyPmpNqt9utnuwcr5oQ3tZzyTiUuYnktNttUq4qDx3hW/cFOCgf/MLbBC+H900ukNNGu7rV++w/HB0/MX54QfeCofSBJ46PRC6rkoqXit4zKMhVe+eHzsLOxE0Xy9WdD/+QuOU4N+F42/CWC0S7Wz22dS5BzrygQV8C8EXHr/3Qnqhla6fbpl4x7e7Olq33bSW4zkACCpQmClHL+gnuAp7p3XlFc7Ju4xyMH6APuPZjRIUfuwYqfOBA0DJuyH7UgC4VFyua6sM2boDxu1ML8IWjD6CEcO9pcwnELKvU69EVBFLilFE8SA420/KS9fjkeNPF1xsXKxRBh//9pJBlyG6bGtVYSMWNdCpW461nbhBbRIWjL3QR//5WgZt0n8FKbHURT8Q8yCv90pzjrK0otb9nLXbOvkB84OjKF45INnAwCkI3mwgre9QyjjiQj8Ghs5pFtW+te6SyS71rF3bhWpRCt1i7zeJkIlYcLVhf0KHxPC+LqmI56FpkIHDvk9IjWxsxUuK3KHg4NJ7VqI6lKvG9eINKqA2Ba1PElm51HAmRn7CilixVh//eRXeXjr5Aps2oQ44Frv0tO1blLIcvplWqbMETfeEIjBcwY032LQ4uHz+vCjP+7lk1iTwxVFNgKevb0+ZexiaO954yysnlQ+nrhMgV87yoTetZ+rGvOMYO3zvHcm5p7eP4HgjeOJLsjbQnaS3Nx17pF5VZzH7hBV2XHUsvyPAdXFr7EL5f0Ckjn/jZiVi/FRPReIlAD2u/KJUndN/I2dPwIBs/Yzzjld5+4tjyIVSv11MqTiVI2ETGC/StzEFwTg162A+qYoa39X0Tkdt+cuH903zZdEVFMjNTCOTemOFMPpKK4xlueU4dU0KOBUHAAfaDAbOHpeMnxqvSj5bGajzR/ws/P9E2WpMlljqCaQLhPTEjbIgQUdyCw6GslDPcAFGnFUe2w7KqGHmK13vfO6U1zTXv7VOHZdSYylCCOcqy1cB6a0e2Ub6QH+/IGrZBhdmtegUmJrFoQt2mv/2HDT8RO8StYDBM0yE5H6hgZ6iKoUr04V/UaIrLJQwlmKMsWw2sB5W+Gy1hdpFGIv/EEgYo/FK/JHqAfdD+yb64GU7usrGNbyHBEAkaTuUfBh4ZRKWs+X4plNLzS+Ef9mU4rQIVkgxU+ywcXoofDZp5Ptqm7H68Xmvk45n7s+V9B+hqlt0LFcWFZ25FiLAd7pkJmbdeEz0b0APEQD9sAvZ1iKpAMIZfCmu+Jz2/NhHHdl3WQQt0prBUl/3tWtDwE6BY8bz3NUhUDJHnsby2o0iLB6ZipLrGRiEKE1YrCiHx+p5HEMNJxaAQUDAGNO9G4JVCz8dXvNBw/z+soYtjD0EPzGNF6miCsPciMO2oG4hSLf8ChQhN/nW07FUIidev1QliOFsZlsoGCobw0JWr1wg8pEXQ0Mb3zaO6LFlV9gJt34La+1YDn0TEW+qXxFCxdIiKkUyu+RaDUtnAwZSkpjepS9l/dC+LbcleSfIJ2r4frwP9BtArBfE2/nBb5IANiCL2fVKkCtrgEaNZGxtUMJhdk6htNwKPzjaQbDRjxSqqeuPJHlWAQyAcS6n24EhxAzK2pYyJ6DPR+XyyYVAYQS+ZvmJ1v2Qg24ofF1R1fxT4lqqcw1VWa4cffYONqC7uX/EaWq1WFzsYEV4xLeglo+96atwnZeXTqk3tCmcEgc3g1c/AAuwzjpCnAQpLkgkf9AzJ8GLDCTIYQmjYFDHzta1t1fuCwghXZg8syB5HOGWznk1hycQP7K+vTE3sN1vL8JXH1mgBy0IHLPFwche4q2g6rKBA6cH4pmtvxdhOIgmHgyQN6ndCogWsiTROzgLrwZoVtoX7pEbhvfjdkAbBmV2BTIctCfdH+4ybpXKGm0HE0I26gxrZmU0Ru2WUwrqfCFzSIbFfgATywRCXMixiQOtG6RNH/NvfinGw9S21D5o7ZYTLgNatibaGfFNae8wbKeFYhA+DoIXoh00mEYNhK5zhhm3u/TpvpMTnWBIRlUAZBoOgHwx45zFvpMQ/25Jj8RMxQ9g0lB2BdTyt2zCVaJvr7Hk7jb39ciyihk+EErlayxYU68cR5bDCAuuGHFpgm2ce86bi9d/ihhbj3ig+biFi3hKlN5AiUJpvHvO24nW/kCEHCvlX03ZE+LiFBab5EOMQdCZ45fuZ7bcWn89rFjNsqqYpRkLM0TqOLLO+Cae88f2DQxE0TIGa48RmGNSyRusoss5aYO4GZbXGGnVtdd1MM+1vxSxLaoVPVtQSF4lXM4k5p0YQBRVJOgmA2O6a1OuoWQ0r8PV7DGwEGMo1giioOFKbCDCJ7a5JFbWI3TnhUK5+uwjvBE7OtneWQW27ft/yI5nNSVRAZ68eV0MMlTS7bzQbaMmms90hqbevFmc1MZGPRRFfv/OHcxJTl6DMpvqoIVHE04RqH603m6IA0bxD0t6+Uitrw3leXumXmK/fxMU5MKr6y5f11eOvfc+f59G9b/+g3h3eh1C59AvFvYrq0x+i23rjZWsvP/WnTfy8epxBn3YXiNpePoZx++5IvV6loziTDtnLDxpWBJQWhPz4VfVNMNiqhWcrRT6NXgW7vfzW41ofv3pFeloEWUbmUkBP20YoeroRy7z7Dkm93lI53cyB4um3VnKEpsUdfQ0MjfvV403SrLOqrVYoDKkqAHxtA2H1ZuPl/lhTMctlkxDVU1AFvfCEJPIrEstY5teDFfB8f7uTqihQLWpP3b0K3Nz0+JOq6OWQLalFZr0cd76ymeTV42BR+7ceZ63Ali5qHYqtHqu5KHfHspHsx6+C1RUadyYCa122X/Krx8Xy0606CzKtti2lj636Dll2UOyTx5uKe7XRZbU5YTX5kdW9lCxwXpXt+6fy4bFvjHid1EqG1bKlIl1NzGQGjHPjGfF4n+CF0alfUcULqLTeDHPOh2mnKO5e6V4gHLJledqM7h6iLRFA4O4jvNlI1hMinRNg0k4RGlTDNwXd4F7ae0CWRnTjV/Tb3wYG1akssbkqAYgQgAJOSjWFgZE3fgyGL6k3QJ1mk4buu2LZuq/KBjhetrhclbtf2buvyvanPxXF5Krc+crmfVXa0x9EKKJyVe52Zfu+KkYftH1VBK/9rf37qjSWm+irosvGfVW+b2alXv4H0W8nUzNThDfLWswMw6jlbxDVObZEeo7dy6vCsnFflWg+p5Z6I9Wy8NSSM76JOccZEwkmaNfzqpBs3FfF+8AUdqytaZZQenPGWcx8QbN2lFoLgUXv/cgFLwXo6aWCanFZjwbsQ49GEY1O1Zy4P58DA6NY+9invCpTVrJ1X5XRG6Rv9KhFKbPHGdlHNI+WVL0XAqrFqgvjwuLEVg+AVWWVHhR9pVnYe5AgCFbJiXthSQiHinrmPuVVeTjt1ldlhP/40vLHP/z+E18Vm7WAtbGXqpCcSp0KlbtURyJcDRPLKCOOinyA3Qd2+5SVxEVSvoweZyxYi54INc7Yr7wqD23GV4VtH8Xif75bpoDjS2+//9ekbcgHJZH0Z0meyalxDlKiIOEdrhCpZ06pWVjYHLAi50qQm1mjmg0yg3U0ral3a6+KhqkiQy589Of/40+fP9j/8Gb7l4nbT//++R9FH5++feJXJhbPxEWw2HA5aJRcGpQfyz7rvkDAKWl0XxpBLly/0n3Kq6IBMvTghMgewD/v82Pv/pubte/NxTGeGYwkzS7g/OU/uUwBUkWUszc75LNCQR7dsRsEHLWAnDWjlyof1jcKrj2tKHkzILwkiMx9yasSGuGxBgk1dBvFgl3A9o/V1x6v3cjtHI8czTiNkEwZyQh+93f3Dw7fBF9/q5c+lVkfwnVYlQ5jIqLHUd1MYSUMlVwosfg6KdfqYT6FHSJ8FAfhYQrUpe5SXhVrT6X0TPZVsUwX0D6f5k8/eUf693r/gf0V9RRiBDGWGbb/8Cve9Tnvb/dRtkVlnLF3elVefdJ809c3yWsX8HP/5lF+e3nZn/zm33dteeIfBmH/oce9hcY2e9Y6sS7Rcv/0qpjh59Ca6auSj9mij775/fPd5mU//qyry//6D//t/z8un75ff1WjC2CJ6PdVmUivxExflbzOFv2l44+f/2752r/56q/+dmwX4B74qmyq1Uz2VcnHbFF/+Vvf+OZHr7/1NyN7gMSd8FWR4dhcXxXzZ4v0DsZf8vM69y+vitwjT6KJvipmzRaZ0AV8adSu51Up0suY6Ksy+vwb6WceZosc0Nt6l/KqjA4TcBN9VfIxW+SA7E9elQBeoqmn3hONzDMPs0VOl+xUXhUFBzTS0lO39YJZg7GzJjuhV0WrCygI2CW9KgVBsp95VQot9imvyujyp1zI9U2sVGTnkLiN65sYPYjWfVzfBCdu4/omMoh7LuT6JpxtreWrUviwg32+CSZ2crK+SULJVdm+UYdRXslVOcUkptY32Q7ds2m5KveL0k6uCkOPGZurcs+LZJSrghS9h+Vv4hLk9JerolvX1JirAhpmIUyMuSrQgTx9/CpB5qr88yefPH6VIHNVvLJ9SI+5Kts3xqYE+f9RUpe/khxzVd4dSocvvIkxV+WffV/WS4+5KkkiSo+5Kljx5JirglSf80dL5qoQDZNgroouRVNkrgp6XtDTlgxzVXS8Y2LMVUGdhoCmxlwVT7rnrUiNuSq1mrWn1WZ6fL/JtFIS5ftNcop8v4msmoZyVZgk1ljfpFpsrkp4cUNg3R1l+aqYK2gGynxxQfg0Q3LdyDgfemjyjE+fbfGC7ueQGkSBh0DGxv9Ui08blfte0P9//dN5ENcDbsXt4NMci7tAlvg+U4/E51iSzF1IXunTL7EDx5K5EtiB3MOSe05lu5XFbOI+qQuBLdgUuR3w+m/3A173uyDweRaCK2F/q8FV64rbtJLCjV9PMqcKN3XKJHG7gKH8Bi//mhqcTaZEIheKwBdOeIpXCIcQrGRjuKdeNjp8d6ZKpIELtb5JCGciggYCT9DLNkE6kVZws9Y3qRuLWXZ/2vBZl+4F+oD8+JWJPtWJNIM7tb4JsVT4ZKWANsSnrcqDMPvYRO84YWikGVyr9U1K5gdbZlS28bJlRfSOE1ojbdyq9U1I8HtToOomvXg5WHWCW5W8ehypvBFkVVRNRQsN4CKtbxKt0VXRamZbdZZqJq5RMd3rm+ga3fu/Uds8Xie1XGC1vu27UVxN9PebzNAvxBUEATBimRpUQmukeSLX6jdxPRQQfREOYnmoQV2lNdKKrtVv4roXuSop7nfiivijkyTGXBWFIUXmqjwEhqSYq8IAxUWpMVdl2xIUqTFXxcxAqTFXxSYqJeaq6EqCuSoxmkkwVyVGX25yVaLZsiXIS71camYq0NZitBFuLQ5hnGNLaOfYo7wqIX35yVWJb2LOccaVIGspddaSAi3jnqDdzqvycN4gV8XuqcW9t7I0+uqmaS0WFiq+0Xs/cs6EKu59YCnntLIezZLqsR6NqvboVM2J+9ulUVgHuFkf+5NX5eHD+FwVmwce5y0mqY9oOhX2RvdoTjj1CJLqKq2shbjHIkB3VsmJe2HJUhcCKuqZPyx4VUb4jy8tf/zD7z+J4memTuUXpBNyVtlqmJJ9lBFHBVG1pjrLaWUlcZGULaMpggVr0ROhxhl7lFdFwdJgbQS2LTGL375bpoDjS2+//9ekbaw2/BlAyQUJ73CFSD1zSs3CwmhX5FwJcjNrVLNBFC/EUure5FWZNIQTJRLxjYZZP0MufPTn/+NPnz/Y//Bm+5eJ20///vkfRR+fvn2OeR3VkkuD8mPZZ93bhZySRvelEeQ8ztS9yavC/7sI84s8VyWyB/DP+/zYu//mZu17r4xnBiNJsws4f/lPLlOAXBmvKGfN6KXKh/WNgmtPK0poWPfoSRCZe5NXxXK2232/iQW7gO0fq689Xrvx2H//w/9Jpnxz8Lu/u39wePT1N/lVz+trupnCShjOY4USi6+Tcq0e5lPYIcJHcRAepkBd6u7kVTGbt/t+E8t0Ae3P5U8/Wf0P/gP7K+r3745lhu1JHV/xrs95f7uPsi0m44xd06sy8X8H4dZyVfLaBfzcv3mU315e9ie/+fddW574h0HYf+hxb6Gxzb6jm1iPaLlvelUQat5arko+Zos++uY3futlP/6sq8v/+g//7f8/Lp++X39VowtgiYD3VbH6tN1mrkpeZ4v+0vHHz3+3fO3ffPVXfzu2CxD7viq5D5u3mKuSj9mi/vK3vvHNj15/629G9gCJW+CrUjtMVm8tV8X82SIzBmNbZdfyqhR3uVB6W7kqZs0WmdAFfGnTLudViYJI6HJmnGj0+TfSzzzMFjnYs/X2Ja9KFMRVupwp1gumzRY543Nod0Wvysg8zZotckD2KK/KQ6C6tVwVswZjZ0x2Ja8KDuNAd2u5KlpdgKOzN3lV4Btwgny/idUCNyLN1Ph+EzMclpPj+00mFsnx/SaW4RkICfL9JpBtnRzfb2I4gqfG95tIx1JKgvyduIpv1Ynyd+KyRPk7cc0fVfk7cc1E+Ttx2dS3lJhMcspVIQ68QDoTY67KlDNRT1t6zFWZlj/pLUHmqrSXtbcEmatSahMlx/+PkoJ/JTXmqhS65yg5/k5cJttLkLkqU5Qgc1UezjSZq/Lw4Y+mzFWZM0nmqkyzFJmrgt+Ac3LMVTE6TfwwNeaqjJcNlBpzVdpT98ev0mOuykb06nFJj7kqti21D0uCuSoBAVWCfL+J9Btp8v0mxRLl+01mqspVoa6itXxVZiBX5f5bXBH4FBeET3MqbgNZ4vsacCvuQ1Lql/yEwac5FhcC9gvHkmQuBlnCsWSuBHYgRf8pmkCWIHMeFzLxaiYx51QAlLuP4gkTl8JDuQ4w4Z7ZeMKkJbotlt5vct4NAMaqBiCHA7GwBR5nUNewmbCU6C8xAQkCaFv2XsfKiDVNXVKXEr+87V6k3buXvXvfrbjXsZ4dnqF3yGtg77CfW13vFu/18JyQpM+hCzgajcStN2j9xdr5W2uNejRp87XvBpd0crXqG2HfN5RkJL3Oz4RiRLWfRbidsbJwZNa02i/IUGTovk25GeubSEo8n5BB1d0P0d6rTWWmzAIS+BaLSmNFKXuvesGialF+u3ZV6au6y7AsylBI99D6axB904WzwpdRi6r0tdrloBdJP1t1730fS1ZD4XXSjVoYrOSUpszXSW/0LhN9S0gD9xQlLs0NKWpWjfUApW8JaVLX/bcw5Ca8XJUbv2LE/jY6V4W40mOuCo7hKTJXZaOxkpNjroogFBelxlyVsQqcG06NuSpm+CE15qoYVyfEXJWAEmGuSlAzHeaqBJQQc1VUpchcletMk7kq1+uPnsxVocE4Oeaq8BfX1JirYmO5y0ne1Ph+k5wtSb7fxGwmyfebyPplQ06PuSr4IoXkmKti9WgpMlcl991mesxVqdsfM0uOuSrFt2WNpJiroqIkxVwVFeVHSeaqwGh8TYy5KvQDNuDUmKsyrTi8SSE15qrUYnuvaTJXpWSb6TFXRYoEmati2ddIjrkqUuBv35Qac1VMtrtbasxVydBVpMdcFSsu1ckxVwVxZnLMVUGc64+GzFVRCFJjropCkBpzVYS49WYzMf5OXNAtHC095qpswJfeEmSuSjvX3hJkrkqpW3V6zFWpxVCJMVelOHQSlhx/Jy6DIkH+TlyiBJmrcp1pMlflev3RlLkqcybJXJVpliJzVaYVvMchJb7fRE1ZuSbGXBW6gWEmx1yVdrivkR5zVWrfOEp6zFWBb659T5PvN1kjRb7fZKycJt9vUixB5qqYQKXHXBXAuf5owlyV2/9zg+F6zjSSq2LZVgdfbaNH/4STqxLxFVaD0P7DjX4PS8vudTMVTmfBb8rppjridK8Cof29eaPfWbb2vfW4V6CAEs5qX/E8Fv6mzrb3anU9WhfvOxBZcc+QybLOrfZjo3M/Gma4ZCGgGxwmZJ/VNRQiUMK5p2gNK7Buu4z2lfct5+p5QwGi3Pd2VKHIR6tHs9p3YBKeAgTZrBQpahll14hASef+24k33Epuyvtlv7TadxlxSzFq6/u5UeYK0GZo7AKTy1gkGO6zKUSotJOr0g53r1bq29elrb2uAcoGbT2X1kHCM5a7S0tX2jwLqxSi1FNQmx+rWn1W9rfPCsyOa9+kFYqy1OvKhf/H2sblWVGVdKoZ1K1oX7mM+pUqDPRNNVDN2rsqWo3+x/dK1ZRyVsNYdS/4U/AM7vnsa0Br1lZ7C4UQ9PfX0ATXSTmPZT+3NKQskcugwaukdQ1EkDFcgek7IWiUBK2gT50o+dxTdL0G7ijipx4IESLBqaWjGXEFKIVMQb/qRMnp/lsYY8MgwpLOclX0D9shxhvncUYjJZPCus0uSeaqbJ72c0uPuSrbn36IUmOuSjvelyI55qoYfUiMuSrG1akwVyWsFJirEqUkmKsSpUSYqxJUgsxVuc5Ematy/cMAc1XGNy3mTPP9w6tyA6StOElluqpXfPQaq3qq3GD4luqTVOYr0ha7hFcF7nzIN8hVOUlVKigNJwaznG7WYtbSx27gVRmXZqf0+01GL4c5ifrdkhr8AX2Q9gOviln0+01OVj17f5nXUuqkxy1i3/J9wasyJ/QhMyJX5WRVheceHdQHyGjLXcGrguhRuSonrEa3Lc3+4FUxGcsDuSonr6ab2J28uwV17wdelbGKbR4pV+U0Vi3SYTOa6XRigMP2A69KkX4mPeaq7B2m4Cdzropdvn378feqBCgSYq5KgOJHS77f5AZIJ3TxA6BXRQ02jR6XKu3nL1lL3p8uCSVLvRKmqizvY9nDF5t8DebEy1XZux/tpM1V2ZhNl2t0r+VepHo7RY9704dPPjyZclWsVKt9j8pVOfF1EtffL61tW4S9kTqpclX2c4vKVTl19TAjAIVnimbm3Is9ESChYWTo/GTggODn2UIABfQWtagpImAwOtNWSM4zeb5Gj+gHRFWLtWNRmpWKIUHw7Wt5detjIhHqKESiChMIK8duVkA4TgDz4Ou/SDcbE40Y+ZDiuEB9+eILur5bvComRVSuyomrRinqlE+wQvYZ56Dkjx4rO4yMarZDOsIzqYLjbA10en+WUhnCEoUDlKpEktNNlhj+6JDaLCSpIVydSMSy3aeWuiIKLI2E8aGevODIUPSI4MUTSGOl79Xi7xSvihB7jstVOXk/YMY7pfcolOjUsWDlihjZs8u1jOWnDOp98HWxl8qzzBuJk1CwtciNEH5CamtC8N6HvEPkjAhUKhFJwk6+QzyOeqCEktx++ORDtsiglljeLZ9vQtnWWq7KKa3RbdmoqpmV6nhdeEWcjH6ACkvkjhJBs1SuZC5RNevQcBLIct2k0dmkRHgttqgyIj5u41xTChMQgMbJxJF58eQ5aSNgEanru8WrYgbjvJqrcmoXbBs9WcHa0vAzVqEIqtjMualhoQWIk1ylgRg2NvK4Xb35+OPYYtlVf694VcaqcG6Kc1VObEFp1fJcCGqBpBx9bYeRfSXOM9jKNRpqDXQJ5mtJhtCcJg9tJE5CC+5oyWeWbFwzaZkA3YSwSYwI1IJiB1QuCt5NWqxzUWQoeg/0aoXoW7xbPt9k70Km5aqc2ILl7WCXaScuj1fEydzMku+UB2QuB+U4RsWWISDwp+4LcalAApgdqiVAvU4uwFA8rAVvwH/KhETyYaNbe/DD8Koy1VsgPE4mjgwYk1X8Oa6GqoVi1ffJ55vgDPyuLldF853y+SYMcr2jy1UZZ/wQ6VVxy3eBV+VmnCktV+XKNT0G5+7nGQinXa4KmFrD5omcqzK60ea3Ui25RdHjUjxVvNI6+UXd0U03u0ncWmwIrJmVKhOoOf+0wVrMUgpKzZRdn/7gvlSWunH4Vd8UrwoxtWONUzlXhb/EP+9HWer1Jd7Mfp3pBl//zBaMQEudeiqbOQgDx3J09lKq5sQXk+6b5n+5RvdFb5BXZVwua0Tlqrx31JzrAoqt8i0jlUhO4fDkO86FOY8e0tXbPPsAsjhgKJ7/9Af3pXgwG/QG/U1cuWwfonJVTlyhswocXwIGFEG8Pccs0WWWKSGQkFCqn1a+ymY0plc3uImH3VS3CLFAadZ/hYb5wmpBYgSQbWRs0sBnkqYdfRSf9fjUQ5hS4viV60RP2ZMX4Xw3JTKcy8axevDTTzjD7Rc/3MB/2p/TEPThZsyExlxuvIl+iGPlehQJ/I3wquxrh+qIXJXTtZrntbeoaFIBDCpseCfOOIEgmuJnLRBCqXCrXjJCsVkzo6HA4bkiCqSWlR3sUGVOLhY/AjIbmaSAzOfKBTWOr4vKA7vVIQjqb0GP+PD3XgTz3QKReSMhZZIHyhQc4/3mY4yFACbcIsjFBps1q+BvxP9HSbVNMbkqJ24RPcSzPskKpsZ+mRNqIk4RJEfLSDJCUWtmtApSyGJJrNNXxXxhCXWNiQN6HxcpjppKLJaQlQ7TDRTMR+cK5rtxZLSwMwkFSEt0o30EkkxoYjcOtqA18DfBq7J335Y1DHNVTmZ5H6IEKxjUHcipc0WQIElihKJWzWiQ05DlK2IsK3oyX5hwcy0bCknbd3KcX4uzGYKiOmJKoHwnmO/GkdHCziQkSnQDuVlDySY036w18Lfh803MpIdQclVO+AKz8WSJ5Jc1c25tpEp7xYZvWuqGRqiUVYfCSpajJRyyiBXQaILvk5VV+ivg4oFWyBIsPv5YHWJVqKVfaua8WvOG/E1cU6TlqpzGkrqTY/CFoioCrUondjPCLaJMEXIaT0nB5MWEzq5N3clmDRWGA9+LhAtORd34E/EXXdx0LiJQVrshCBgePs8F8904Mlo1k5Ao9Q2l8gnv6ImjuFlr4G+DV+UKbPG5KqfuaijBaJWNfsezFmufesjqh3wYZC8oWv+MicGsZuJhaPJiQmfX2s5gz12LRJwTD5M0eQEW7l4gQeJ1ZPbJhPcy8LsXwvluFBnG+fpPv2ESEvh68zF/UFUa1yGa0HSDgCdXwN8IrwqyvdfJVYke69PK4//dQD6f9xYIPcDrNMtVeS8j97/71jGYyn98UuSq3DOm9xzFm7LxC7a/TBQWdlRJkbkq8Lygo8Xnqtyd6s3xqlg771BE5Krcsert8arUNeTPqZyrMufaO6/SHXOJF17KuP3F1CO203gZj3qpXHFvDbr4xoBgrFYJfzzqFXWj2wxePOEb2xNfVOqDQM1UBh7d187x3x6vSsb7eK8ncq4K3Z6zdXq48f0wF80nccLdPFd4X8lMOM43ZW2cW8ZqU37fyc968eQ5u20KFFkqRK6JwBdqdJ9vgFeFCNpRT+ZclRkrlUwsgKl3cIH4qFvLIdx4nhdLN1RjIfm8bBmrbS963vzfUPhHKQ6AowyIyhWA5azfqDfjb+IS9nIy56pML7QWxHxSr0eMMuDGmyNZWln3F5ovB9xAlAvEo1h5ditVfpExzgE34eDzabpOdpPQKN6Id3TrL6VUVbMU6fPFgmCL0mQjMArcIoTxQvIhOjdgOr4zNBsrcx4yLc2PqMenZumA/OEv8pZ++n+8QWwIqtiVxv3Af/H5gw+QXo3ri9/7Ot0VpL8eMTVhmOMcMAh8djIr0Ky4RdOsDBo20Zi6jyvPNn1VIpRtnsa5Kuz2VYUsguwb7C0D0hy/dEZjN6aCP2N053/FGiuN9EyvM6bC4nGcNKGwE+PEghyt1CUqWIVaQlKfIdMr3F4nvASbLdgItIW0EzDeXOscXWkcEm5FzFLZWEXnIS+EECdzmR6VjQhiP1ewpWeCOEAS5gO+kVGLyIe/iDAfZy4hkYgrIdsVExuX00YS3aKEh/+lZGPqFvq8tr2+SevtZM5VmepQNVwnJQ3msObEFIBffWJjb/iBWQCWjnoEO2EFroc6UoBgauDLWUfPBjgvKXUAKI4q0nM/JUw/CSPAHwmB4PKVKBg6L5LMCIpjxQaIhtJxCjhhasBLVfzCMPEp2NxLfSzmqcFTS1UjgnF/Q5HAmYkt+zXZyDosXrh/jY8hTW4wRqLZhvqPYt/rm1Q7mXNVqg5Q5sTs46kf57OYaSpkC89UBxMlK4RL/yhmuiipzen88/3cdUJNQ9MnRgXYS1CwotYp0VP9JhQ3a58h6NeCCntO+lqcrQU4ehoExK4jVxgrGBcMeeFhcwmELIzIPwDsBx8QtrRkfwOEP/2B1unpEYF+CHu6hCnA2kEDDXnOZpmExTfX6CzEZKoluSi/cAGyvslQPP9Th2eC80hQQv5PUhxYZE9Mpu7xmtMV+wHuoSNfZSzASKqPIzguJfAreGmf3p9HQNmT6CH1Kkufk1VLoH1Bto/i7PyYoQ9WtGEWUeVjFT0gZHw+h7lEoZ+NyIbNI70S1N/b4gB6gYH74Kc5ruokQc0pJ3bNiWfMc2tD27YGtK0cCpD1TeDqkOM5ZbagtCr4ge9N+W86POYEGqV8xIKO/Qz++DTzzEnCN9c5MZdI2QKTFtJi9JKKKSXSZwv+eXsYNH9kT8ynnN7jjInoaADzBueP3vhYja4YMiT1ETSYrJ+NCGK/+Zixf1HWffOA+pGf/gDCoceVWjP1PBQQ5jZYNtllYYzE+DswcG8oMWR5St2IvU25JUJ8VfLXYvArbPbij5SPnGqtU2II10qV1z3KtJUpZQEw668EEMgn2jmOWGKBZILrtscZEI6L9PqpWx/Su9wV/shX8iMbPgUeyS9F5wPewg7i6maJY4AnvTCKfBHMRgSwf/o5YcOWoJMBgt97AKafvAjE9bnjSWmilyjUDJbZ0lCdgqbyoCAGyxVjanlzDzpJi5Khq1gL+Kq8R8ogq+UGVcX12pEdscJxxVM+9VuE/OKnX0SbePNFkhRT7lkucXpxbkYZtyC9HScutvOKs8i1Q4bnBj24gYkvCv3Qt2xZDucXx+YGFyvT/KaRqZlec9a5dsg4h71Bp/fFoB1V7lmNycgCQISkr0pBICKS+woEsXf27K3oP0X/KfrP/q4J)

    位于 `/layers/meta-qcom-hwe/recipes-devtools/partition-utils/partition-confs` 中的 `generic-ufs-partitions.conf` 文件定义所有分区。`gen_partition.py` 工具处理并生成 `partition.xml`，这是 `ptool.py` 的必要输入。最后一步，Ptool 生成文件 `rawprogram.xml`、`patch.xml`、`gpt_main*.bin` 和 `gpt_backup*.bin`，这些文件对于 QDL 工具刷写设备至关重要。

要添加分区，应在配置文件（如 `generic-ufs-partitions.conf`）中使用通用唯一标识符 (UUID) 创建分区条目。添加条目后，运行 BitBake 命令以生成所有必要的文件：

        bitbake <image-name>Copy to clipboard

当镜像编译完成后，刷写镜像：

        cd <workspace>/build-qcom-wayland/tmp-glibc/deploy/images/qcm6490/qcom-console-image
        ./qdl prog_firehose_ddr.elf rawprogram*.xml patch*.xmlCopy to clipboard

### 容器化

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

Docker 容器可在 Qualcomm Linux 中启用。若要使用 Docker，需确保在 Qualcomm BSP 中已启用容器化功能，这些功能已经过集成和测试。要在 Qualcomm LE 设备上使用容器化功能，应确保添加 `meta-virtualization` 层 ([https://git.yoctoproject.org/meta-virtualization](https://git.yoctoproject.org/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 的情况下经过验证：
    1. 从 `Linux/arm64`平台的 Docker 存储库中获取并在设备上测试成功运行的镜像如下：
        - `busybox`
        - `python`
        - `alpine`
        - `ubuntu`
        - `postgres`
        - `mongo`
        - `nginx`
        - `redis`
    2. 使用 Docker 加载实用工具通过 tar 文件加载 Docker 镜像。
    3. 通过 Docker 文件编译 Docker 镜像。
    4. 将获取/编译的 Docker 镜像保存到 `.tar` 文件中。
    5. 加载保存为 `.tar` 文件的 Docker 镜像。
    6. 运行多个获取/编译的镜像的多个容器实例。
    7. 检查设备上已加载的 Docker 镜像列表。
    8. 检查设备上活动容器和全部容器的列表。
    9. 使用 Docker 检查实用工具检查 Docker 镜像。
    10. 使用 Docker 日志实用工具从容器中获取日志。
    11. 使用 Docker 停止实用工具和 Docker 终止实用工具停止和终止容器。
    12. 从设备中删除容器和 Docker 镜像。
- **从 Docker 访问硬件节点**
在 Docker 容器内运行的应用程序可能需要访问设备 (target-host) 中的设备节点和文件。在容器内运行的应用程序可以访问设备节点。这通过使用 Docker 运行命令将相应的设备节点作为选项进行传递来执行：

        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 的节点之一。

从设备 (target-host) 中 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 包含在镜像中：
    - `python3-docker-compose` 软件包将添加到 `meta-qcom-distro` 元数据层的 `packagegroup-qcom-multimedia` 软件包组中。

**在设备上运行 docker-compose：**
    1. 在设备上的可写路径（例如 `/var`）下创建或复制 Docker-compose YAML 文件（例如 `/var/docker-compose-yaml`），以便与设备上的 Docker-compose 一起使用。
    2. 确保设备上提供了 Docker-compose YAML 文件中列出的 Docker 镜像。由 Docker-compose 实用工具启动的容器需要使用这些镜像。
    3. 若要对多个 YAML 文件运行 Docker-compose，可使用以下命令：

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

    Docker-compose 按照 Docker-compose YAML 文件中的配置运行并启动 Docker 容器。Docker-compose 命令返回结果后，运行 `docker ps -a` 和 docker 日志 `<container-id>` 以检查 Docker 容器是否按预期运行。

    如需了解有关 Docker-compose 的更多信息，可访问 [https://docs.docker.com/compose](https://docs.docker.com/compose)。

### Kubernetes

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

Kubernetes 是一个开源平台，用于自动部署、扩展和管理容器中运行的应用程序。它有助于跨多个设备协调容器，确保应用程序实现高效资源利用、高可用性和可扩展性。有关 Kubernetes 的更多信息，可访问 [https://kubernetes.io/](https://kubernetes.io/)。
- **启用 Kubernetes**
- Qualcomm Linux 发行版通过如下更改默认在 `qcom-multimedia-image`中启用 Kubernetes：
        - 在 `meta-qcom-hwe` 中定义 `packagegroup-qcom-k8s`。
        - `packagegroup-qcom-k8s` 包含在 `recipes-products/packagegroups/packagegroup-qcom-multimedia.bb` 中。
    - Qualcomm Linux 内核在 `arch/arm64/configs/qcom_defconfig`中启用了以下内核配置，以支持 Kubernetes runtime：
        - CONFIG_CGROUP_FAVOR_DYNMODS=yCopy to clipboard
        - CONFIG_CFS_BANDWIDTH=yCopy to clipboard
        - CONFIG_CGROUP_HUGETLB=yCopy to clipboard
        - CONFIG_NETFILTER_XT_MATCH_COMMENT=mCopy to clipboard
        - CONFIG_IP_NF_TARGET_REDIRECT=mCopy to clipboard
        - CONFIG_HUGETLBFS=yCopy to clipboard
    - | 未使用 `kubeadm` 将设备设置为 Kubernetes 节点时的 `systemctl status kubelet` 输出。 | 使用 `kubeadm` 将设备设置为 Kubernetes 节点时的 `systemctl status kubelt` 输出。 |
        | --- | --- |
        | 非活动（死锁） | 活动（运行中） |

Kubernetes 会将多个容器视为一个容器组来进行协调，允许用户将应用程序及其依赖项（库和配置文件）打包到一个单元中。这样可简化部署，并确保集群中不同环境和节点之间的一致性。在 Kubernetes 的上下文中，节点是指设备或机器。Kubernetes 的架构有两种类型的资源：
    - **主节点/控制平面：**主节点是充当 Kubernetes 的控制平面的设备。它对集群做出全局决策（例如调度），并检测和响应集群事件（例如在不符合部署的复制字段时启动新容器）。
    - **工作节点：**这些节点是包含运行容器所需服务的设备，由主节点管理。每个工作节点都会运行 `Kubelet`，这一进程负责 Kubernetes 主节点与工作节点之间的通信；它管理机器上运行的容器组。

    容器组是 Kubernetes 中最小的执行单元。它代表集群中正在运行的进程的单个实例，作为对 Kubernetes 运行的容器的抽象。
- **使用 Kubernetes**
以下是两个设备作为节点连接到公共接入点的示例：
    - **主节点**：其中一个设备被指定为主节点。
    - **工作节点**：另一个设备充当工作节点。从主节点创建的部署和容器组在工作节点上运行。

部署和容器组使用 YAML 文件创建。这些文件定义了在创建过程中部署和容器组的首选状态。用户可以从主节点和工作节点进入这些容器组/容器的 shell 来执行调试、监测和其他任务。
    - **将设备设为主节点**
以下是将设备设为主节点的步骤：
        1. 将设备连接至 Wi-Fi。
        2. 运行以下命令：

kubeadm init --ignore-preflight-errors=SystemVerification
                            --apiserver-advertise-address=<ip-address>Copy to clipboard

Note: `<ip-address>` 是 `wlan0` 接口的 IP 地址，同时也是将设备连接到 Wi-Fi 后 `ifconfig` 命令的输出。
        3. 上述命令初始化 Kubernetes 控制平面。要开始使用集群，应以 root 用户身份运行以下命令：

                mount -o remount, rw /
                mkdir -p $HOME/.kube
                cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
                chown $(id -u):$(id -g) $HOME/.kube/configCopy to clipboard

        使用 `kubeadm init` 成功将设备初始化为主节点/控制平面后，`kubeadm` 将打印任何设备在作为工作节点加入集群时必须使用的命令。
    - **将设备设为工作节点**
要将设备设置为工作节点并加入集群，应运行 `kubeadm join` 命令，其中 `kubeadm` 将在初始化主节点后打印命令。
Note: 要抑制 Kubernetes 在使用 vfs 图形驱动程序运行 Docker 时报告的错误，应运行 `--ignore-preflight-errors=SystemVerification flag` 与 `kubeadm join` 命令。

Note: 集群中的每个节点都应该具有不同的 hostname。如果尝试将多个具有相同 hostname 的设备添加到单个集群时失败，应使用 `hostname <new-name>` 命令更改设备的 hostname。
    - **从主节点创建部署和容器组**
要在工作节点上创建部署/容器组，应运行以下命令：

            kubectl apply -f <path-to-podnetwork-yaml-config-file>Copy to clipboard

在某个位置（如 `/var`）创建用户自己的 YAML 文件。YAML 文件示例：
        - 用于针对 Ubuntu 镜像创建部署的 YAML 文件：
**ubuntu-deployment.yaml**

                apiVersion: apps/v1
                kind: Deployment
                metadata:
                  labels:
                    app: ubuntu-deployment
                  name: ubuntu-deployment
                spec:
                  replicas: 2
                  selector:
                    matchLabels:
                      app: ubuntu-deployment
                  template:
                    metadata:
                      labels:
                        app: ubuntu-deployment
                    spec:
                      containers:
                        - name: ubuntu-depl-pod
                          image: ubuntu:latest
                          command: ["sleep", "3650d"]Copy to clipboard
        - 用于针对 Ubuntu 镜像创建容器组的 YAML 文件：
**ubuntu-pod.yaml**

                apiVersion: v1
                kind: Pod
                metadata:
                  name: ubuntu-pod
                  labels:
                    app: ubuntu-pod
                spec:
                  containers:
                    - name: ubuntu
                      image: ubuntu:latest
                      command: ["sleep", "604800"]
                      imagePullPolicy: IfNotPresent
                  restartPolicy: AlwaysCopy to clipboard
    - **通过 `kubectl` 使用 Kubernetes 容器组**
        - **使用 `kubectl` 获取集群中的节点**
要列出集群中的节点，应在主节点上运行以下命令：

                kubectl get nodesCopy to clipboard
        - **使用 `kubectl` 获取集群中现有的部署**
要列出集群中现有的部署，应在主节点上运行以下命令：

                kubectl get deploymentCopy to clipboard
        - **使用 `kubectl` 获取集群中现有的容器组**
要列出集群中现有的容器组，应在主节点上运行以下命令：

                kubectl get podsCopy to clipboard
        - **从主节点访问容器组的 shell**
要从主节点访问容器组的 shell 实例，应在主节点上运行以下命令：

                kubectl exec -it <pod-name> -- <command>Copy to clipboard
        - **从工作节点访问容器组的 shell**
要使用 Docker 访问容器组（容器）的 shell 实例，应在工作节点上运行以下命令：

                docker exec -it <container-id> <command>Copy to clipboard

Note: 通过使用 `docker ps -a` 命令列出所有容器来获得 `<container-id>`。

**Docker 和 Kubernetes 相较于上游解决方案的更改**

- 配方 `meta-qcom-hwe`/`recipes-containers`/`docker`/`docker-ce_git.bbappend` 对 `/lib/systemd/system/docker.service` 进行了更改。在此更改过程中，`--exec-opt native.cgroupdriver=systemd` 被传递给作为服务的 `ExecStart` 的一部分运行的 `dockerd` 命令。这样做是为了在 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 的平台软件已启用 zram，因此 swap 设为 **ON**。
- 上游 `kubelet.service` 会尝试在设备启动时自动启动，即使设备未配置为 Kubernetes 节点也是如此。但是，此行为会占用资源并降低功耗效率。为解决这个问题，可删除 `meta-qcom-hwe/recipes-containers/kubernetes/kubernetes_git.bbappend` 文件中的 `WantedBy=multi-user.target`，以此来修改 `kubelet.service`。现在，它会在使用 `kubeadm` 将设备设置为 Kubernetes 节点时启动，而不是在 `multi-user.target` 中自动启动。

### 属性

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

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

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

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

        getprop "my-key"Copy to clipboard

<samp class="ph systemoutput"># Result of the previous command: my-value</samp>
要使用 CLI 设置属性并在重启后保留该属性，应使用以下命令：

        setprop "persist.my-key" "my-value"Copy to clipboard
- **在 C/C++ 源文件中使用属性**
在 C/C++ 源文件中使用属性的设置如下：
    1. 如果必须在配方（例如 `example-recipe.bb`）中使用 `property-vault` 等属性，应对 `property-vault` 添加依赖项：

            DEPENDS = "glib-2.0 property-vault"
            RDEPENDS:${PN} = "property-vault"Copy to clipboard
    2. 更改 `make`文件：
        1. 如果使用 `automake`：
`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@ -lpropertyvaultCopy 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 (techteamlocalibname propertyvault)Copy to clipboard
    3. 将源文件修改为 `get` 和 `set` 属性：
`source.c`

            #include "properties.h"
             
            int main() {
                // setting a property
                property_set("my-key", "my-value");
             
                // getting a property
                char paramstr[PROPERTY_VALUE_MAX];
                property_get("my-key", paramstr, ""); // value gets stored in paramstr
             
                // setting a property and persisting it across reboot
                property_set("persist.my-key", "my-value");
             
                return 0;
            }Copy to clipboard

### syslog() 的日志工具

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

Qualcomm 专有项目和开源项目中的日志被记录到 `syslog` 中。

`syslog()` 用于将日志写入设备。使用 `rsyslog` 作为日志系统，根据指定规则处理日志。`rsyslog` 不仅可以接受来自系统和内核消息的输入，还可以接受来自使用 `syslog protocol` 进行记录的应用程序的日志。

当应用程序调用 `syslog` 时，`rsyslog` 会根据其配置重定向这些日志。`rsyslog` 配置位于 `/etc/rsyslog.conf` 或 `/etc/rsyslog.d` 目录下。

使用 `logrotate` 服务对旧日志进行存档。

### persist 分区

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

为 UFS 定义的 persist 分区用于存储 BSP 软件组件在重启期间所需的持久性数据。在设备生命周期内，用户请求的操作不得擦除此数据。

- **persist 挂载点**
    `/var/persist` 目录用作文件系统的挂载点，该文件系统在名为 persist 的分区上创建。配方 `overlayfs-qcom-paths_1.0.bb` 负责在 rootfs 上创建目录并将 systemd 单元 `var-persist.mount` 安装到 `local-fs.target`。

在启动时，systemd 单元 `var-persist.mount` 将 `/dev/disk/by-partlabel/persist` 挂载到 `/var/persist`。通过运行如下挂载命令显示 persist 挂载点：

        sh-5.1# mount | grep persist
        /dev/sda10 on /var/persist type ext4 (rw,relatime,rootcontext=system_u:object_r:qcom_persist_t:s0,seclabel,stripe=128)Copy to clipboard
- **调整 persist 分区的大小**
    使用配方 `resize-partitions.bb` 和 `resize-partition.service.in` 文件调整 overlay 分区的大小。调整分区大小的服务在设备启动时运行，以根据分区的大小创建和设置文件系统。

### 辅助虚拟机

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

### About this task

本节提供了详细步骤，用于编译支持访客虚拟机 (guest VM) 的 Qualcomm Linux 镜像，包括 VM 管理工具（`crosvm`、`qemu`）、内核镜像和 guest VM 的 rootfs。编译完成后，会生成一个 Guest VM 内核（镜像）和 rootfs (`initrd.img`)，并打包到系统根文件系统中。以下小节提供了有关用户如何为镜像启用 VM 支持的分步指南。

### Procedure

1. **设置主机**
                
使用以下命令在主机上安装 clang：

        sudo apt install clang-11Copy to clipboard
2. **启用 meta-rust 层**
                
meta-rust 层提供 rust 编译器 (rustc) 和软件包管理器 (cargo) 来编译 crosvm（使用 rust 语言实现）。

向 `meta-qcom-distro/conf/bblayers.conf` 目录中的 EXTRALAYERS 添加 meta-rust 层。

`vi conf/bblayers.conf`

        EXTRALAYERS ?= " \
         ${WORKSPACE}/layers/meta-rust \
        "Copy to clipboard
3. **升级 rust 版本**
                
创建文件 `meta-qcom-distro/conf/distro/include/rust_version.inc`，内容如下：

`vi 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` 路径中。

`conf/distro/qcom-wayland.conf`

        require conf/distro/include/rust_version.incCopy to clipboard
4. **将 VM 软件包添加到镜像中**
                
创建一个软件包组 `packagegroup-qcom-vm` 并通过 `packagegroup-qcom` 将其添加到镜像中。更新软件包 `RDEPENDS:${PN}` 变量并添加 `RDEPENDS:packagegroup-qcom-vm`，如下所示：

`meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom.bb`

        PACKAGES += "packagegroup-qcom-vm"
         
        RDEPENDS:${PN} += "packagegroup-qcom-vm"
         
        RDEPENDS:packagegroup-qcom-vm = "\
            crosvm \
            pack-svm \
            kvmtool \
            qemu \
        "Copy to clipboard
5. **编译镜像**
                
要编译镜像，应使用以下命令：

        bitbake qcom-console-imageCopy to clipboard
6. **启动 VM**
                
若要查看 [Guest VM 编译支持](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-3/features.html#guest-vm-build-support)所述的预期输出，需启动 VM。

### 使用配方处理 out-of-tree kernel modules 和设备树

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

有关编译 out-of-tree kernel module 的信息，参见[添加内核模块](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-3/customize.html#add-kernel-module)。

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

Last Published: Oct 09, 2024

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