# Qualcomm Linux features

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

This section provides information on the features of Qualcomm Linux including the
            following topics:
- Metadata layers, which are included in the Qualcomm Linux
- Recipes and configurations in the Qualcomm Linux metadata layers
- Software features added Qualcomm Linux by Qualcomm
- Tools introduced by Qualcomm in the release
- Instructions on how to build Qualcomm Linux images and metadata layers

Note: The Qualcomm software
                release is based on the Yocto Kirkstone release.

For the complete index of the Yocto Project documentation corresponding to the Kirkstone
            release, see [https://docs.yoctoproject.org/4.0.18/singleindex.html](https://docs.yoctoproject.org/4.0.18/singleindex.html). If you are new to the
            Yocto Project and want to know about builds, you must try the first build using the
            Yocto Project documentation at [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).

The Qualcomm Linux environment consists of several community-maintained metadata layers
            that deliver recipes, package groups, images, and configurations. The Qualcomm metadata
            layers are stacked on the community layers to provide additional software components
            required for Qualcomm reference devices.

## Overview of metadata layers

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

The overview of metadata layers introduces the layers that are included in the manifest
                [https://github.com/quic-yocto/qcom-manifest](https://github.com/quic-yocto/qcom-manifest). This manifest
            includes all the layers that are required to reproduce the reference build. The layers
            maintained by the Yocto Project are introduced in the following sections. Qualcomm
            maintains the layers specific to Qualcomm reference devices, which depend on the
            community layers to realize full functionality. The following figure shows the layers
            included in the Qualcomm Linux release:
Figure : Qualcomm Linux metadata layers
                
                ![](data:image/png;base64,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)

Table : Qualcomm Linux metadata layers and descriptions

| Metadata layer | Description |
| --- | --- |
| `meta-qcom-distro` | This layer provides a reference distribution configuration for<br>                                Qualcomm products. Image recipes and package groups are defined in<br>                                this layer. |
| `meta-qcom-extras` | This layer is an optional metadata layer for registered users.<br>                                This layer enables source compilation of select components, which<br>                                are otherwise present as binary in<br>                                `meta-qcom-hwe`. |
| `meta-qcom-qim-product-sdk` | This layer provides Qualcomm's offering of Qualcomm Intelligent<br>                                Multimedia (QIM) and AI SDKs based on the GStreamer framework. This<br>                                includes a set of GStreamer plugins, sample applications for<br>                                multimedia and AI use cases. |
| `meta-qcom-realtime` | This layer contains changes specific to real-time kernel<br>                                configurations. |
| `meta-qcom-hwe` | This layer contains recipes that build software components for<br>                                Qualcomm device support and value-added software features applicable<br>                                to Qualcomm SoCs. |
| `meta-qcom` | This layer contains Qualcomm device support and upstream OSS<br>                                software components. |
| `meta-virtualization`<br>[https://git.yoctoproject.org/meta-virtualization](https://git.yoctoproject.org/meta-virtualization) | This layer contains packages for constructing OpenEmbedded<br>                                virtualized solutions and virtualization tool stacks such as dockerd<br>                                and Kubernetes. |
| `meta-selinux`<br>[https://git.yoctoproject.org/meta-selinux/](https://git.yoctoproject.org/meta-selinux/) | This layer enables SELinux. |
| `poky/meta`<br>[https://git.yoctoproject.org/poky/](https://git.yoctoproject.org/poky/) | This layer provides build tools and files that provide various<br>                                software components needed to build an embedded OS. |
| `meta-openembedded`<br>[https://git.openembedded.org/meta-openembedded/](https://git.openembedded.org/meta-openembedded/) | This layer provides a cross-compile environment. |

### Qualcomm BSP metadata layers

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

The following layers represent Qualcomm BSP metadata:
- [meta-qcom](https://docs.qualcomm.com/doc/80-70014-27/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-27/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-27/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-27/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-27/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-27/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_rpw_3dd_51c_vinayjk_03-18-24-1703-35-615)

### meta-qcom

The `meta-qcom` metadata layer is hosted at [git.yoctoproject.org](http://git.yoctoproject.org) and provides recipes to build the Qualcomm OSS. The
                software image is built using the following recipes from `meta-qcom`:

| `recipes-devtools/qdl/qdl_git.bb` | Qualcomm downloader (QDL) flashing tool.<br>QDL communicates<br>                                        with USB devices with ID 05c6:9008 to upload a flash loader<br>                                        and uses this to flash the images. |
| --- | --- |
| `recipes-support/pd-mapper/pd-mapper_git.bb` | Qualcomm protection domain mapper application.<br>pd-mapper is<br>                                        an implementation for the protection domain mapper<br>                                        service.<br><br><br>The protection domain mapper service allows<br>                                        user space applications to access remote processors on<br>                                        Qualcomm SoCs. |
| `recipes-support/qrtr/qrtr_git.bb` | Qualcomm QRTR applications and library. |
| `recipes-support/initrdscripts/initramfs-module-copy-modules_1.0.bb` | `initramfs-framework` module for copying<br>                                    kernel modules from `initramfs` to<br>                                        `rootfs`. |

### meta-qcom-hwe

The `meta-qcom-hwe` metadata layer is hosted at [https://github.com/quic-yocto/meta-qcom-hwe](https://github.com/quic-yocto/meta-qcom-hwe). It provides
                additional software support for enabling Qualcomm device.
- **BitBake classes**
See [https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/classes](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/classes) for an introduction to the BitBake
                                classes.

| `classes/uki.bbclass` | Implements logic to pack a kernel image as a<br>                                                unified kernel image (UKI).<br>The UKI is composed of<br>                                                  the following:<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_jbh_lcj_p1c_rasam_03-01-24-1541-50-230"><br>                                                  <li class="li">A UEFI stub, from<br>                                                  <code class="ph codeph">systemd-boot</code></li><br><br>                                                  <li class="li">The kernel image</li><br><br>                                                  <li class="li"><code class="ph codeph">initramfs</code></li><br><br>                                                  <li class="li">Other metadata such as<br>                                                  <code class="ph codeph">cmdline</code></li><br><br>                                                  </ul><br><br><br>To understand the UKI image, see [systemd-boot](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#systemd_boot) |
    | --- | --- |
    | `classes/image-efi.bbclass` | Implements logic to generate images to pack in an<br>                                                extensible firmware interface (EFI) system<br>                                                  partition.<br>The generated image contains the<br>                                                  device tree blob (DTB), kernel image, and<br>                                                  `systemd-boot` manager<br>                                                binary. |
    | `classes/qprebuilt.bbclass` | Implements logic to use a prebuilt package<br>                                                instead of fetching and compiling the source. For<br>                                                any recipe inheriting **qprebuilt**, this class<br>                                                allows to unpack binary packed in a<br>                                                  `tar.gz` archive and provides these<br>                                                to be packaged using a BitBake task. |
    | `classes/qmodule.bbclass` | By default, Qualcomm BSP enforces kernel module<br>                                                signing by enabling the<br>                                                  `CONFIG_MODULE_SIG_FORCE` in the<br>                                                kernel. However, some out-of-tree modules might not<br>                                                be properly signed. To avoid module loading issues,<br>                                                the `qmodule.bbclass` inspects all<br>                                                packages providing kernel modules and signs them if<br>                                                they are not already signed. |
- **Machine configurations**
Qualcomm Linux machine configuration files
                            are available here: [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` | Machine configuration for the development board,<br>                                                with Qualcomm QCM6490, such as RB3 Gen 2 core kit,<br>                                                RB3 Gen 2 video mezzanine kit, and RB3 Gen 2 vision<br>                                                mezzanine kit. |
    | --- | --- |

    - **Kernel cmdline**
        To update the kernel command line
                                        parameters, update the `KERNEL_CMDLINE_EXTRA`
                                        variable.

        `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"`
    - **Include DTB**
        To include the corresponding DTB, update
                                            `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
                                            \`

        `"`
    - **Include additional DTBOs**
        To include the additional list
                                        of device-tree overlay (DTBO)s to be overlaid on top of the
                                        base kernel device-tree, update
                                            `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"`

        The package, which is
                                        used to generate DTBO, must be added to a
                                            `MACHINE_EXTRA_RDEPENDS` variable to set
                                        the dependency. For example,
                                            `qcm6490-graphics.dtbo` is added to
                                            `KERNEL_TECH_DTBOS` list above and the
                                        corresponding package `graphicsdevicetree`,
                                        which generates DTBO is added to
                                            `MACHINE_EXTRA_RDEPENDS` variable as
                                        follows:

        `MACHINE_EXTRA_RDEPENDS += "
                                            \`

        `packagegroup-firmware-qcm6490
                                            \`

        `graphicsdevicetree
                                        \`

        `displaydevicetree
                                            \`

        `cameradtb
                                            \`

        `wlan-devicetree
                                            \`

        `btdevicetree
                                            \`

        `videodtb
                                            \`

        `"`
- **Firmware recipes**
    Qualcomm Linux firmware recipe files are located
                            here: [https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-firmware](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-firmware).
                            When the Qualcomm Linux source code is synced, the firmware recipes are
                            available in the following directory:
                                `<workspace>/layers/meta-
                                qcom-hwe/recipes-firmware/firmware`.

    - **Boot critical binaries**
Critical boot images are required to
                                    boot the kernel on the device. The following firmware recipes
                                    provide the SOC-specific boot firmware:

| `firmware-qcom-bootbins_1.0.bb` | Handles fetch, unpack, and deploy for<br>                                                  critical boot firmware binaries for compatible<br>                                                  targets.<br>For the QCM6490-based targets, the<br>                                                  files are packed in the<br>                                                  `QCM6490_bootbinaries.zip`<br>                                                  file. |
        | --- | --- |

        After the build completes, the firmware binaries
                                    in these zip files are available for flashing in the following
                                    directory:
                                        `<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/<machine-name>/<image-name>/`.

        `firmware-qcom-bootbins_1.0.bb`
                                    recipe fetches the boot binaries based on SRC\_URI, unpacks the
                                    zip. The binaries can be found in the following directory:
                                        `tmp-glibc/deploy/images/<machine>/<image-name>`.
    - **Subsystem firmware binaries**
Qualcomm Linux includes
                                    firmware binaries that are loaded and run on the corresponding
                                    subsystems. As the Qualcomm SoC boots, individual subsystems
                                    execute the firmware as they come out of reset:

| `firmware-qcom-hlosfw_1.0.bb` | Handles fetch, unpack, and install for<br>                                                  subsystem firmware binaries such as aDSP, cDSP,<br>                                                  modem, and WLAN.<br>The firmware files for<br>                                                  QCM6490-based targets are packed in<br>                                                  `QCM6490_fw.zip` file. |
        | --- | --- |

`firmware-qcom-hlosfw_1.0.bb` recipe
                                    fetches the subsystem firmware binaries from the remote server
                                    based on SRC\_URI, unpacks the zip, and installs the firmware in
                                        `rootfs`.
    - **DSP libraries**
User space utilities refer to the DSP
                                    libraries and these libraries must be available in the
                                        `rootfs` image. The following firmware
                                    recipes provide the SOC-specific DSP libraries:

| `firmware-qcom-dspso_1.0.bb` | Handles fetch, unpack, and install for DSP<br>                                                  libraries.<br>The libraries for QCM6490-based<br>                                                  targets are packed in<br>                                                  `QCM6490_dspso.zip`<br>                                                  file. |
        | --- | --- |

`firmware-qcom-dspso_1.0.bb` recipe
                                    fetches the DSP libraries from the remote server based on
                                    SRC\_URI, unpacks the zip, and installs the DSP libraries in
                                        `rootfs`.
    - **Installation of boot, subsystem, and dspso**
        When the
                                    Qualcomm Linux source code is built, the build system uses the
                                    firmware recipes to deploy the prebuilt firmware based on
                                    MACHINE\_EXTRA\_RDEPENDS configuration, which is set in the
                                    machine configuration file. For example, in
                                        `layers/meta-qcom-hwe/conf/
                                        machine/qcm6490.conf`, see the inclusion of
                                        `packagegroup-firmware-qcm6490` in the
                                    variable
                                        MACHINE\_EXTRA\_RDEPENDS:

        `MACHINE_EXTRA_RDEPENDS
                                        += " \`

        `packagegroup-firmware-qcm6490
                                        \`

        `graphicsdevicetree
                                        \`

        `displaydevicetree
                                        \`

        `cameradtb
                                        \`

        `wlan-devicetree
                                        \`

        `btdevicetree
                                        \`

        `videodtb
                                        \`

        `"`

Note: The
                                        `packagegroup-firmware-qcm6490` recipe is
                                    present in
                                        `<workspace>/layers/meta-qcom-hwe/recipes-firmware/packagegroups/`,
                                    and groups the firmware recipes to be used for image
                                    generation.

        When Qualcomm Linux is built, based on the
                                    configuration in `qcm6490.conf` and package group
                                    recipe file, the respective firmware recipes from
                                        `<workspace>/layers/meta-qcom-hwe/recipes-firmware/firmware`
                                    are built.
- **Kernel recipes**
    The Linux kernel recipe used by Qualcomm Linux is at
                                [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 supports the 6.6 LTS kernel and is maintained through Yocto recipe
                                `linux-kernel-qcom_6.6.bb` at
                                `recipes-kernel/linux` under the
                                `meta-qcom-hwe` layer. This recipe refers to Qualcomm
                            kernel source, which is publicly hosted at [https://git.codelinaro.org/clo/la/kernel/qcom.git](https://git.codelinaro.org/clo/la/kernel/qcom.git). The
                            Qualcomm Linux kernel recipe is referred to as
                                `linux-kernel-qcom`.

    For example,
                                `qcm6490.conf` is a machine configuration file hosted
                            at `meta-qcom-hwe/conf/machine` and supports the QCM6490
                            machine, and that selects the kernel
                            `linux-kernel-qcom`.

    ***Kernel                                configuration***

The Qualcomm Linux kernel recipe uses
                            the following kernel configuration fragments:

| Kernel configuration fragments | Description |
    | --- | --- |
    | `<kernel_src>/arch/arm64/configs/qcom_defconfig` | Base configuration that is aligned to<br>                                                product/performance needs and upstream<br>                                                kernel |
    | `<kernel_src>/arch/arm64/configs/qcom_debug.config` | Debug configuration fragment from upstream<br>                                                kernel |
    | `<kernel_src>/arch/arm64/configs/qcom_addons.config` | Additional Qualcomm downstream additions on top<br>                                                of upstream aligned base |
    | `<kernel_src>/arch/arm64/configs/qcom_addons_debug.config` | Qualcomm downstream debug enablement |

The Qualcomm Linux kernel recipe supports two build
                            variants, `perf` and `debug`, for QCM6490
                            machine configuration. The default build is `perf`.

| Build variant | Defconfig/config fragments |
    | --- | --- |
    | `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> |
    | `Debug` | <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> |

    You can modify the kernel build configurations by
                            updating KERNEL\_DEFCONFIG and KERNEL\_CONFIG\_FRAGMENTS variables in the
                            kernel recipe
                                `linux-kernel-qcom_6.6.bb`:

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

    If the distro supports SELinux, then the SELinux
                            configuration fragments `selinux.cfg` and
                                `selinux_debug.cfg` are available at
                                `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)}"`

    Kernel modules
                            can be autoloaded for the Qualcomm platforms by updating the
                            KERNEL\_MODULE\_AUTOLOAD variable in the Qualcomm Linux kernel recipe. For
                            example, the CoreSight and STM modules are autoloaded:

    `#
                                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
                            "`
- **Licenses**
Licenses used by recipes in `meta-qcom-hwe`
                            are listed at
                                `<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
                            provides support for automatically creating SPDX SBOM documents based on
                            image generation. To enable this the `create-spdx` class
                            is required to be inherited in `local.conf` as
                            follows:

        INHERIT += "create-spdx"Copy to clipboard

                            After the class is inherited, the user can rebuild the image with
                            BitBake
                            command:

        bitbake qcom-multimedia-imageCopy to clipboard

The
                            SPDX output is found under the following paths:
    - For each recipe, the generated files are available in
                                        `tmp/deploy/spdx/<machine>`
                                    directory.
    - The top level SPDX output file is
                                        `tmp/deploy/images/MACHINE/<image-recipe>-<MACHINE>.spdx.json`.

### meta-qcom-realtime

The `meta-qcom-realtime` metadata layer is hosted at [https://github.com/quic-yocto/meta-qcom-realtime](https://github.com/quic-yocto/meta-qcom-realtime). This layer provides additional software support for building
                a real-time kernel for the Qualcomm devices.
- **Kernel recipes**
    Qualcomm Linux supports the 6.6 LTS kernel plus
                            real-time extensions and is maintained through the Yocto recipe
                                `linux-kernel-qcom-rt_6.6.bb` at
                                `recipes-kernel/linux` under the
                                `meta-qcom-realtime` layer. The pending preempt RT
                            patches can be found at [https://wiki.linuxfoundation.org/realtime/start](https://wiki.linuxfoundation.org/realtime/start). These
                            patches are fetched and applied on top of the Qualcomm Linux kernel
                            source, which is publicly hosted at [https://git.codelinaro.org/clo/la/kernel/qcom.git](https://git.codelinaro.org/clo/la/kernel/qcom.git).

    The
                            Qualcomm Linux real-time recipe is referred to as
                                `linux-kernel-qcom-rt`. When compiling a real-time
                            kernel for the Qualcomm machines, `conf/layer.conf`
                            selects the kernel as
                                    `linux-kernel-qcom-rt`.

    ***Kernel                                    configuration***

        KERNEL_CONFIG_FRAGMENTS:append = " ${WORKDIR}/qcom_rt.cfg"Copy to clipboard
- **Enabling `meta-qcom-realtime` in build**
To include
                                `meta-qcom-realtime` in the build, export
                                `meta-qcom-realtime` layer to EXTRALAYERS in
                                `bblayers.conf`as shown in the following steps:
    1. Source the environment, following is an example to source the
                                    environment for QCM6490 and `qcom-wayland`
                                    distro:

            MACHINE=qcm6490 DISTRO=qcom-wayland source setup-environmentCopy to clipboard
    2. Open the `build-qcom-wayland/conf/bblayers.conf`
                                    file and update the EXTRALAYERS variable as
                                    follows:

            EXTRALAYERS ?= " \
              ${WORKSPACE}/layers/meta-qcom-realtime \
             "Copy to clipboard
    3. Run the build command to rebuild with
                                        `meta-qcom-realtime` as
                                    follows:

            bitbake qcom-multimedia-imageCopy to clipboard

### meta-qcom-distro

This layer provides a reference distribution configuration for Qualcomm products.
                Image recipes and package groups are defined in this layer.
- **BitBake classes**
Following table provides an introduction to the
                            BitBake classes, which are available at [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 provides support for SSH and UART<br>                                                serial shell. Use SSH or UART for accessing the<br>                                                  device.<br>Some users find it easier to use ADB for<br>                                                  debugging issues when IP interfaces are down or<br>                                                  large files are to be transferred. For them ADB is<br>                                                  provided as an option.<br><br><br>This class installs<br>                                                  adbd into the image.<br><br><br>The adbd daemon is<br>                                                  disabled unless IMAGE\_FEATURES contains the<br>                                                  enable-adbd.<br><br><br>You can disable adbd by<br>                                                  removing<br>                                                  `/var/usb-debugging-enabled` from<br>                                                  `rootfs` manually. |
    | --- | --- |
    | `image-qcom-deploy.bbclass` | Deploys the image files under the path<br>                                                  `tmp-glibc/deploy/images/<machine>/<image-name>`.<br>The<br>                                                  generated images are deployed in the<br>                                                  `<image-name>` subdirectory.<br> |
- **Distro configuration**
    Following table provides an introduction to
                            the distro configurations, which are defined at [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` | This distro configuration file defines the<br>                                                `qcom-wayland` distro that users use<br>                                            in the following example command.<br>                                            <br><br>        MACHINE=qcm6490 DISTRO=qcom-wayland source setup-environmentCopy to clipboard<br><br>This<br>                                            configuration file includes<br>                                                `meta-qcom-distro/conf/distro/<br>                                                include/qcom-base.inc`file, which defines<br>                                            common DISTRO\_FEATURES and adds following<br>                                                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>These distro features are defined by Yocto<br>                                                Project documentation and they are available at:<br>                                                  [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` | The INIT\_MANAGER is set to `systemd`.<br>                                            For Yocto documentation regarding INIT\_MANAGER, see<br>                                                [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>Other<br>                                                DISTRO\_FEATURES enabled<br>                                                are:<br><br>        DISTRO_FEATURES:append = " pam overlayfs acl xattr selinux ptest security virtualization"Copy to clipboard<br><br><br>To<br>                                                understand the purpose of these DISTRO\_FEATURES, see<br>                                                  [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>This<br>                                                file selects `systemd` as<br>                                                INIT\_MANAGER and `udev` as the dev<br>                                                manager. |
    | `conf/distro/include/qcom-security_flags.inc` | This file includes the security flags as defined in<br>                                                [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). |
- **Package groups**
Package groups are defined in
                                `meta-qcom-hwe` and
                            `meta-qcom-distro`. These package groups help you to
                            understand the features defined by the Qualcomm BSP.

| `packagegroup-qcom.bb` | Package group that contains all the basic<br>                                                packages |
    | --- | --- |
    | `packagegroup-qcom-multimedia.bb` | Package group that contains packages to enable<br>                                                multimedia support:<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` | – |
- **Image recipes**
Qualcomm Linux metadata layer
                                `meta-qcom-distro` defines image recipes, which are
                            available at [https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/recipes-products/images](https://github.com/quic-yocto/meta-qcom-distro/tree/).
                            The following table lists various images, their IMAGE\_FEATURES, and the
                            functions that the images serve:

| Image recipe | Description of the image |
    | --- | --- |
    | `qcom-minimal-image.bb` | Defines a small `rootfs` to boot<br>                                                to shell.<br>The IMAGE\_FEATURES enabled are as<br>                                                  follows:<br><br>        IMAGE_FEATURES += "splash tools-debug debug-tweaks enable-adbd read-only-rootfs"Copy to clipboard<br><br><br>For<br>                                                  more information on IMAGE\_FEATURES, see [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` | Extends `qcom-minimal-image` by<br>                                                adding more images and enables a few more<br>                                                IMAGE\_FEATURES:<br><br>        IMAGE_FEATURES += "package-management ssh-server-openssh" Copy to clipboard |
    | `qcom-multimedia-image.bb` | Requires DISTRO\_FEATURE Wayland and it includes<br>                                                all the multimedia packages in<br>                                                  `rootfs`. |
    | `qcom-multimedia-full-image.bb` | Provides an extension to<br>                                                  `qcom-multimedia-image.bb` with<br>                                                GStreamer support. |
    | `qcom-multimedia-test-image.bb` | Includes test packages in `rootfs`<br>                                                to test<br>                                                `qcom-multimedia-image`. |
    | `qcom-multimedia-crossesdk-image.bb` | Generates eSDK for<br>                                                  `qcom-multimedia-image`. |
- **QDL flashing tool**
    Qualcomm download tool
                            (QDL) is a flashing tool that communicates with USB devices of ID
                            05c6:9008 to upload a flash loader to the device. The flash loader
                            flashes the images to UFS or eMMC built into the device.

There are
                            two ways to set up QDL on a host PC:
    - QDL tool is built by default in your Qualcomm Linux
                                        workspace.
The QDL tool is integrated in the build
                                        workflow for ease of use. The QDL recipe is found at the
                                        path
                                            `<workspace>/meta-qcom/recipes-devtools/qdl/qdl_git.bb`.
                                        This recipe fetches and compiles the QDL tool, after which
                                        you can BitBake the recipe. The QDL tool is integrated by
                                        default due to the
                                            `image-qcom-deploy.bbclass`, which adds
                                        it is a dependency for the image being
                                        built:

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

        When the image build completes, the
                                        QDL binary is generated at the following directory:
                                            `tmp-glibc/deploy/image/<MACHINE>/<IMAGE>`.
                                        This QDL binary is for host architecture.
    - **QDL is built as a standalone                                        project**
        Clone the source project, install dev
                                        dependencies, and compile QDL.

On the host
                                        PC:

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

The QDL compiled in this way can be copied
                                        and moved around on your host PC as it links to the dynamic
                                        linker at `/lib64/ld-linux-x86-64.so.2`,
                                        which is native to the host PC you are using.

**Prerequisites to run QDL**
    - A one-time prerequisite on the host machine is required to use
                                    QDL flasher.
To enable the host PC to enumerate the Qualcomm
                                        device for the host correctly so that QDL can flash, follow
                                        these steps:
        1. Change the directory to
                                                  `/etc/udev/rules.d`.
        2. Create a file `51-qcom-usb.rules` at
                                                this path.
        3. Add the following line in the file
                                                  `51-qcom-usb.rules`:

                SUBSYSTEMS=="usb", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9008", MODE="0666", GROUP="plugdev"Copy to clipboard
    - Examine if the host PC is running
                                        `ModemManager`.
Note: Check
                                        this every time that you use QDL.

        Some Linux
                                        distributions come with `ModemManager`, a
                                        tool for configuring mobile broadband. When the Qualcomm
                                        SoC-based device is connected in USB mode, it is identified
                                        as a Qualcomm modem and `ModemManager` tries
                                        to configure the device. The `ModemManager`
                                        interferes with QDL flashing and hence, if you have
                                            `ModemManager` running, you must disable
                                        it before connecting your test device. If you are using a
                                        Linux distribution with `systemd`,
                                            `ModemManager` can be stopped by using
                                            `systemctl`. To determine how to manage
                                            `ModemManager` with QDL flashing, see
                                            [QDL and ModemManager](https://docs.qualcomm.com/doc/80-70014-27/topic/debug.html#qdl_and_modemmanager).

    **Flashing using QDL**

The following is a generic
                            command to run
                            QDL:

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

This
                            sample generic input depicts that the QDL tool expects three types of
                            input files. All these input files are generated under the directory
                                `tmp-glibc/deploy/image/<MACHINE>/<IMAGE>`.
                            When the image recipe completes successfully, you must perform the steps
                            to flash the device. If you want to use the QDL generated as part of the
                            build, change the directory to
                                `tmp-glibc/deploy/image/<MACHINE>/<IMAGE>`, as
                            the Qualcomm Linux workflow generates and deploys QDL at this path. For
                            example:

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

Run the flash command as
                            follows:

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

    **Copying                                QDL to other locations**

The QDL binary at
                                `<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/qcm6490/qcom-multimedia-image/`,
                            which is built as part of the Qualcomm Linux build workflow may not be
                            copied or moved to other paths but is used as-is because of the
                            dependencies. To understand these dependencies, run the following
                            command:

        file qdlCopy to clipboard

    The
                            output is as follows:

    <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>

    This output shows
                            that there is a dependency on
                                `<workspace>/build-test-distro/tmp-glibc/sysroots-uninative/x86_64-linux/lib/ld-linux-x86-64.so.2`,
                            which is due to the way Qualcomm Linux builds QDL. If you are interested
                            to run QDL independently, see [standalone
                                QDL](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__qdl_standalone).

    **QDL advanced options**

QDL supports
                            more advanced options that are optional flags passed to QDL from the
                            command line. These advanced options are described in the following
                            table: 

| Option | Description |
    | --- | --- |
    | `--debug` | Prints debug logs while flashing the<br>                                                image |
    | `--storage<br>                                                <emmc|nand|ufs>` | Use this to define the storage type. If this<br>                                                option is not provided, QDL detects the storage<br>                                                type. |
    | `--finalize-provisioning` | Irreversible one-time provisioning (OTP) for UFS<br>                                                storage. Perform the following safety mechanisms to<br>                                                prevent unintentional device locking:<ul class="ul" id="qualcomm_bsp_metadata_layers__ul_swb_5vz_s1c_rasam_03-14-24-1623-16-802"><br>                                                  <li class="li">Unless you intend to lock your device, set<br>                                                  <code class="ph codeph">bConfigDescrLock = 0</code> in your XML<br>                                                  and do not use the command-line parameter<br>                                                  <code class="ph codeph">--finalize-provisioning</code>.</li><br><br>                                                  <li class="li">If you want to perform OTP, ensure that your<br>                                                  XML includes the property <code class="ph codeph">bConfigDescrLock<br>                                                  = 1</code> and provide the command-line<br>                                                  parameter<br>                                                  <code class="ph codeph">--finalize-provisioning</code>.</li><br><br>                                                </ul><br><br>Note: Provisioning is not performed if there is a<br>                                                  mismatch between command-line parameter and<br>                                                  XML. |
    | `--include` | Points to the path where the images are present.<br>                                                By default it is NULL, that is, images are present<br>                                                at the same location. This is useful when QDL is<br>                                                built as a standalone, `--include` is<br>                                                used to point to the path where images are<br>                                                present. |

Example usage with the
                            flags:

        <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

This layer is an optional metadata layer for registered users. This layer enables
                source compilation of select components, which are otherwise present as binary in
                    `meta-qcom-hwe`. If you are entitled to receive this metadata
                layer, you can use the clone steps shared in the [Qualcomm Linux Build Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254/introduction.html).
- **Firmware recipes**
Firmware recipes in
                                `meta-qcom-extras` integrate the firmware ZIP that is
                            generated on compiling other subsystems.

| ├── 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 | The recipes in `meta-qcom-extras`<br>                                                  override the recipes in<br>                                                  `meta-qcom-hwe`.<br><br><br>                                                <br>`meta-qcom-hwe` uses pre-built<br>                                                  firmware binaries by default, while<br>                                                  `meta-qcom-extras` builds the<br>                                                  firmware from Qualcomm proprietary<br>                                                  repositories.<br><br><br>                                                <br>The `meta-qcom-extras` layer<br>                                                  ignores the pre-built binaries found in the<br>                                                  following .zip files. These recipes instead search<br>                                                  the Zip files set in the path FWZIP\_PATH as<br>                                                  follows:<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>:<br>                                                  Searches FWZIP_PATH variable for<br>                                                  <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>:<br>                                                  Searches FWZIP_PATH variable for<br>                                                  <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>:<br>                                                  Searches FWZIP_PATH variable for<br>                                                  <code class="ph codeph">QCM6490_dspso.zip</code></li><br><br>                                                </ul> |
    | --- | --- |

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

- **BitBake classes**

| BitBake class | Description |
    | --- | --- |
    | `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">Provides a packaging task to pack QIM Product SDK<br>                                                artifacts into an archive. It is invoked by the<br>                                                  <code class="ph codeph">qim-product-sdk</code> recipe.</li><br><br>                                            <li class="li">The easy-to-install artifact archives are available<br>                                                at the<br>                                                  <code class="ph codeph">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/qim_prod_sdk_artifacts</code><br>                                                directory after the recipe build is complete.</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">Provides a task to package Qualcomm Multimedia SDK<br>                                                packages into an archive along with an easy-to-use<br>                                                install script. The archives are generated with<br>                                                packages for deployment, debug, and development<br>                                                separately.</li><br><br>                                            <li class="li">The artifact archives are available at<br>                                                  <code class="ph codeph">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/qimsdk_artifacts</code><br>                                                directory.</li><br><br>                                            <li class="li">Invoked by <code class="ph codeph">qim-sdk</code> recipe during<br>                                                the build.</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">Provides a packaging task to pack TensorFlow Lite<br>                                                SDK artifacts into several archives for deployment,<br>                                                development, and debug. It is invoked by the<br>                                                  <code class="ph codeph">tflite-sdk</code> recipe during the<br>                                                build.</li><br><br>                                            <li class="li">The easy-to-install artifact archives are available<br>                                                at the<br>                                                  <code class="ph codeph">&lt;workspace&gt;/build-qcom-wayland/tmp-glibc/deploy/tflitesdk_artifacts</code><br>                                                directory after the recipe build is complete.</li><br><br>                                        </ul> |
- **Distro configuration**

| `layer.conf` | Configures the project layers with the following<br>                                            information:<br><ul class="ul" id="qualcomm_bsp_metadata_layers__ul_twn_xqc_51c_rasam_03-18-24-1528-52-666"><br>                                            <li class="li">Recipe file path information</li><br><br>                                            <li class="li">Yocto version supported</li><br><br>                                            <li class="li">Qualcomm<sup class="ph sup">®</sup> Hexagon™ version supported</li><br><br>                                            <li class="li">Qualcomm<sup class="ph sup">® </sup>Neural Processing SDK version<br>                                                supported</li><br><br>                                            <li class="li">Qualcomm neural network (QNN) SDK version<br>                                                supported</li><br><br>                                        </ul> |
    | --- | --- |
- **Image recipes**

| Recipe | Description |
    | --- | --- |
    | `recipes-gst` | Consists of the upstream GStreamer recipe changes<br>                                            (`.bbapend`) along with Qualcomm recipes:<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` | Consists of two recipes:<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>: Used to package QNN<br>                                                SDK</li><br><br>                                            <li class="li"><code class="ph codeph">snpe.bb</code>: Used to package Qualcomm<br>                                                Neural Processing SDK</li><br><br>                                        </ul> |
    | `recipes-qim-product-sdk` | Recipe to install QIM product SDK that has QIM, Qualcomm<br>                                        Neural Processing, QNN, and TensorFlow Lite SDKs |
    | `recipes-tensorflow-lite` | TensorFlow Lite recipes build and install TensorFlow Lite<br>                                        for the following versions:<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, and 2.15.0</li><br><br>                                            <li class="li">Default version: 2.15.0</li><br><br>                                        </ul> |
- **Package groups**

| Package group | Description |
    | --- | --- |
    | `packagegroup-qcom-gst` | Package group for upstream basic GStreamer enablement<br>                                        along with Qualcomm plugins:<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>It also packs the upstream GStreamer packages:<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` | Package group for upstream GStreamer enablement:<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` | Package group to pack the following packages along with<br>                                        an install script:<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` | Package group to pack Qualcomm ML framework:<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 software components

### Filesystem overlays

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

Qualcomm Linux uses an overlay filesystem to create overlays on certain mount-points. It
            is recommended to have a read-only rootfs, but many applications might need read-write
            access to some parts of the filesystem. This is achieved by `overlayfs`
            bbclass keeping the base rootfs read-only.

The `overlayfs-qcom-paths` recipe creates `/var`,
                `/etc`, and `/opt` as overlay mount points and it
            inherits the `overlayfs` bbclass. In the recipe, the variable
                `overlayfs_mount_point` is defined as `mnt-overlay`,
            which implies that the `mnt-overlay.mount` systemd unit is defined in the
            BSP and it is installed into the image. At boot, the systemd unit
                `mnt-overlay.mount` mounts the
                `/dev/disk/by-partlabel/overlay` disk partition to all the mount
            points.

The variable `overlayfs_writable_paths` specify the writable paths used at
            the runtime, that is, `/opt`, `/etc`, and
                `/var`.

To include `overlayfs`support, it must be added to the
                DISTRO\_FEATURES.
- Overlay for `/var`
To see the `/var` overlayfs
                        mount point, run the following mount
                        command:

        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
- Overlay for
                    `/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
- Overlay for
                    `/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
- Overlay for
                    `/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
- Resizing the overlay partition: This is performed using the recipe
                        `resize-partitions.bb` and
                        `resize-partition.service.in`file. The resize-partition
                    service runs at device bootup to create and set the filesystem according to the
                    size of the partition. In resize-partition service, running the command to
                    resize the overlay partition performs the following:
    - `/sbin/e2fsck -n /dev/disk/by-partlabel/%i` checks the
                            specified filesystem based on its partition label for errors, without
                            making any changes.
    - `/sbin/mkfs.ext4 /dev/disk/by-partlabel/%i` invokes the
                                `mkfs.ext4` utility and formats a partition with the
                            ext4 filesystem.
    - `/sbin/resize2fs /dev/disk/by-partlabel/%i` attempts to
                            increase the size of the partition.
    - `/sbin/tune2fs -O encrypt,stable_inodes
                                /dev/disk/by-partlabel/overlay` modifies various parameters.
                            For example, `encrypt` allows you to encrypt data stored
                            on the filesystem and the stable\_inodes option ensures that inode
                            numbers remain stable across filesystem operations.

### System initscripts

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

System initscripts added to the image by `meta-qcom-hwe` are as
                follows:

| System initscripts | Description |
| --- | --- |
| `mnt-overlay.mount` | Mounts `/dev/disk/by-partlabel/overlay` disk<br>                                partitions to all the mount points. |
| `var-persist.mount` | Mounts `/dev/disk/by-partlabel/persist` disk<br>                                partition to `/var/persist`. |
| `android-tools-adbd.service` | Provides adbd daemon on the device. |
| `logrotate.service` | Archives old logs. For more information on this service, see<br>                                    [Logging shim for syslog()](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#logging_shim_for_syslog). The<br>                                    `logrotate.service` is an upstream systemd<br>                                    unit.<br>The `rsyslog.logrotate` configuration<br>                                    file is modified in Qualcomm Linux to manage on-device logs. The<br>                                    modified `rsyslog.logrotate` is at<br>                                        `meta-qcom-hwe/dynamic-layers/openembedded-layer/recipes-devtools/rsyslog/rsyslog/rsyslog.logrotate`<br>                                    directory. This overrides the default configuration file<br>                                    provided by the upstream at<br>                                        `meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate`<br>                                    directory. |
| `pd-mapper.service` | Configures and manages protection domains. The<br>                                    `pd-mapper.service.in` file is updated to run the<br>                                service as a system user instead of as the root user by the<br>                                    `pd-mapper_git.bbappend` in the Qualcomm Linux<br>                                BSP layer<br>                                `meta-qcom-hwe`.<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` | Provides `property_get` and<br>                                    `property_set` functionality. For more<br>                                information on this service, see [Properties](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#properties). |
| `persist-property-vault.service` | Runs `set-persist-prop.sh`, which sets the flag<br>                                    `le.persistprop.enable` to true. To use persist<br>                                properties, set this flag. |
| `resize-partition@.service` | Resizes the filesystem at boot time according to the size of the<br>                                partition.<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` | Redirects logs according to a specified configuration. For more<br>                                information on this service, see [Logging shim for syslog()](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#logging_shim_for_syslog). |
| `sys-kernel-debug.mount` | Masks the `sys-kernel-debug.mount` point when<br>                                    `perf` is built. |

### Debug tools

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

Debug tools are added as part of `rootfs` by
                `packagegroup-core-tool-debug` defined in the
                `<workspace>/layers/poky/meta` directory. This recipe is appended
            in `<workspace>/layers/meta-qcom-hwe/recipes-devtools/` as
                `packagegroup-core-tools-debug.bbappend`. This append file adds
                `valgrind` and `ltrace`. For more information, see
                [Debug Linux user space](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-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html)

systemd-boot is a unified extensible firmware interface (UEFI) boot manager. It presents
            a menu of boot options to control the boot flow and loads the user-selected boot loader.
            systemd-boot can support different boot loaders from different operating systems. Pack
            the kernel and other related information in an EFI partition.

The kernel must be built as EFI using `EFI_CONFIG_STUB`. systemd-boot
            supports Type1 and Type2 configurations. Type1 configuration is not tested. Type2
            configuration is enabled where the kernel and other details are packed in the UKI. Type2
            is enabled for better security. UKI contains all the information for the device to boot.
            Signing a UKI image ensures that all the entities included in it are secure. If UEFI
            secure boot is enabled, only signed images are loaded; therefore, signing is required.
            For more details on systemd-boot, see [systemd-boot](https://wiki.archlinux.org/title/systemd-boot).
Note: Signing
                is optional during the development phase.

- **UKI**
    A UKI is a combination of a UEFI boot stub program, a Linux kernel
                        image, an initrd, and other resources in a single UEFI portable executable
                        (PE) file. The UEFI boot stub looks for various resources for the kernel
                        invocation inside the UEFI PE binary. This allows combining various
                        resources inside a single PE binary image (UKI), which may then be signed
                        using OpenSSL utilities.

For more details on UKI, see [unified_kernel_image](https://uapi-group.org/specifications/specs/unified_kernel_image/). The content
                        of `uki.efi`is shown in the following figure. It contains:
    - Ramdisk image
    - Uncompressed kernel image
    - Architecture information
    - systemd-boot stub
    - Command-line parameters passed to the kernel
    - OS-release information

Table : uki.efi file

    | Components of uki.efi file | Contents |
    | --- | --- |
    | Initrd = Init ramdisk | `initramfs-qcom-image-qcm6490.cpio.gz` |
    | Linux = Kernel Image | Image |
    | Efi-arch = Architecture | `aa64` |
    | Stub = System-boot efi stub | `linuxx64.efi.stub` |
    | Cmdline = Command line parameters | `root=/dev/disk/by-partlabel/system rw<br>                                                rootwait console=ttyMSM0,1150200n8 pcie_pme=nomsi<br>                                                earlycon<br>                                            kernel.sched_pelt_multiplier=4` |
    | OS-release = 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<br>                                                  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<br>                                                  with Wayland 1.0”</code></li><br><br>                                            </ul> |

    **Image classes**

`meta-qcom-hwe/classes` contains two classes,
                            `uki.bbclass` and `image-efi.bbclass`:
    - `uki.bbclass` generates
                                `uki.efi`.
    - `image-efi.bbclass` generates
                                    `efi.bin` using `uki.efi`.
    - `qcom-minimal-image` inherits the
                                    `image-efi.bbclass`.
- **EFI image**
    EFI system partition (ESP) contains
                            `efi.bin`, a vfat file. This file contains all the
                        details necessary for UEFI to enable systemd-boot. UEFI mounts the ESP
                        partition and executes systemd-boot manager (`bootaa64.efi`).
                        systemd-boot manager parses the UKI image, loads the kernel image, and then
                        transfers the control to it.

For more information on the structure of
                        ESP, see [EFI system partition](https://wiki.archlinux.org/title/EFI_system_partition). A sample
                        structure of the ESP partition is shown in the following figure. It contains
                        systemd-boot (`bootaa64.efi`) and UKI
                            (`uki.efi`).
Figure : efi.bin file
                            
                            ![](data:image/png;base64,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)
- **Signing**
    Secure boot is a security feature found in the UEFI standard
                        and it is not enabled in development devices. It adds a layer of protection
                        to the preboot process by maintaining a cryptographically signed list of
                        binaries that are authorized or forbidden to run at boot. It helps ensure
                        confidence that the machine boot firmware and HLOS boot components (boot
                        manager, kernel, and initramfs) have not been tampered with.

    UEFI
                        secure boot uses a digital signature to validate the authenticity and
                        integrity of the code that it loads. All the keys are stored in UEFI secure
                        variables. UEFI secure boot is achieved by using PK, KEK, db, and dbx
                        keys.

    To use a secure boot, the keys PK, KEK, and db are required.
                        While multiple KEK, db, and dbx certificates can be added, only one platform
                        key is allowed.

    UEFI secure boot is enabled only when PK is registered
                        in the system. It is advised to provision PK key in the last step of the
                        secure boot enabling process. For more information on Qualcomm's
                        implementation of UEFI secure boot, see [Secure boot](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-11/secure-boot.html).

    **Host tool                            for signing HLOS images**

    When UEFI secure boot is enabled, the
                        EFI and DTB images must be signed. To streamline this process, a host
                        signing tool is used. This command-line Python script runs on a Linux host
                        machine (preferably Ubuntu 18.04 or later versions). It automates the
                        signing of EFI and DTB images in two separate operations, invoked after the
                        build process completes.

    **Overview of host signing                        tool**

The host signing tool runs on a Linux machine with Python3
                        installed. It can sign either the EFI image or the DTB image in a single
                        operation. To sign both the EFI and DTB images, the user must invoke the
                        tool twice with different inputs.
![](data:image/png;base64,UklGRnQ6AABXRUJQVlA4TGc6AAAvHwKIAP8nJEjw/3jrBEzA/Ce2e+DD/n+VEm+fGYZuBBFRQcVWsFvXWLu7W1fXzrXXXjvXxO7u7sBAXUWRUFFBBUGaCZg87z/OmT7E2d9zPRvR/wnAf5JVL2w1+iO/yV+cO3ouUUjJ+LVi/wRDop1JvJcXYjtXZFdrNeSQ1KAPk6r4erh5lK61USqYJNlSifuGvLEj+psXTohIr13lmzo9qtVuIiKRmIgkdR8LJvZU8p4h2aPK94zlhWMi8mjSqmX9QFcim71cuUtsSOTXacWWeZ39JDQkS5jhz2MiGpEHQHcshMj3PccqCUn6fAT78+ySTb8LfkOzwA4rSzSRAfBPKZIMT4Xe6wekAk3a4ziOjMexauDplkUrjqfokUU8SdKjfvEsCcCHZ+FJepKePJeaCKNEVE8F6IYSVUqG8GqU8reg1i8BMMeDWkRkL65IRG6/3uG616TCWC3X2+qV/mSAWRUqjVVwfOlcocV7Uy23o8rZwNdgkvwN4UceTC7nAOg2irzX9LMhN3siqhjBcdKdGmq47otoAAM8siWHPSzVfKJZclOtdqQ6CmC3K/klCUH1qNhF1haRgzcF7PwWv6s00e9K1hkfaq7noYSGMgA2i6jxBwBPXanhB5jqNxE11QCTiBqohSWiGpEMwIQ6UECyyVIakGipDpm1yOMQTJXYmGguA2V/orGMwBT8Cuyk1kTvTIYbrlTyHjbZUP8840bksn7+LqYSsYCsG9FCoWkbuEcRXTWdch5R5wclqPRDGNf5zrNnD3c3IbLZCCC7A9F6CEyb9PxOdM10iKlOkuo29itgAgcnBwciohJzcvVsEKommofZ4UpEv0pNwelSbeRlsKWdiRYwQhwiqxOJJjGmaL732LGTtyIU4FQNIOqgFeR2uBBRpXhTjFTD8AlEIbnC2SMDwvwoqDjRMMYEQ7OM2O5MrpEC19ni1EDFdVmkRzqaxLsfelHx8+b7VJVEIxlh60U5KpfJ8b0N6TkoojbfMJaoRbLZMEJE/s8MUCSphRP/cEvJqEe221gJHUjP17LkeRVIq0GiBRqzxQYSVb2n5Yqa3PSTcOI+bQf3eZmZMEZEfgfjv1xpRaUkHJrfSDxODuCiHZUNMxt2uBAVn3PtzbuIi0srU7H3AkmiDRlY4h3kdcjzAmuziDbqGU90leOfMkROLZq7U51DLjSEAS6IqPIbAFAMIur106CjIhpsHHaUISKv4DrBLkSSOTkCSVqQIYExyG1J/vcAMLtEtFvPQqKHHLhal9j93mYXo+EMFDXJfgM4X5QgumbQGRGNkxmH+8MciFPU9ZQMAqn24wsDY1TQfX4RrQCAjBevMvX8/OelggsJl6cNXnA3A7p3L74Cmtcv3sq5tLEvXmQalP3qRaLOBMh6eeKP4SPmH3qdCsE6T66ClSsVChX+8/9//v+fXq1Coc3/mFy5yjQqhTzPQlRyZdEQk5LNGPfgt1FX87/UGcM2MMapIvbNGzFs2tkPjAUoVw5anGSunBRdEYhqZ/sRr41bSjQ0/4t2p+A8o9IWeRBnwHa5+WSB5HPdTK9GdQhVFX2k2BGtNO4vOxqd/8UUp7pGpY0kcmnZv0cgke1JnfkqUalbZlpE5J1U9JFMROtYOX//tjmrgKMJFVGVvQnyzAcdiZqn8cB8onIpRR+q0MHTP7MSQigwqoCT3YHoL7Cv+5B7DA+8nND/gqboA0x2LtjxtSngTQEnpSS5XuGIqUPukTwAeRaKUr/VpcAoYxit1nQ6rc4EjFZrlE6rNYFOqzNCq9UZpNNqzZDsSw5nOO54U8kvJmK0WqN0Wp1hjFbL6DOY0Wp1JtBpdYWl1PivGi7mW3yKHtW3+CwGyIlPVAJp8WE1qNT1+Pj4NH2q6B3T5u5PNklm5KElkxae/yTXI01I1EEdtX3anIOJagM0yedWTJ5zLkGr52f8T0D6ePmklTdy9GkTz8+dsuhakpor9c6iKXNPf8kzVU5PopU6ADkTiUbKTJL1ZMv0accipPruIOvqysnLwzL1KeJ2zpq67nm6jqVMjM/hUn0JnT1l9dP4+Pj4byqASY5PA7KuL5q66rGsUKTrQ3STK8qW6qRwXbShv7RQzyWvm0AT0t+Ra2zqny5EROWuaoxS329DnB6jo7nWkm9q8mJnIiLP1Vl6kleXIbb3mnQO7a/UTPVqALG7f+JS7ShF7BL7OS7UILbjEq2JdPvFVOEdkDaTqGwETPm6I3EO+8ZV5sbbzsT+9aGWI3mChNgN37JuetNsJSt1mSvpt70O5NWl9syTzsQe8rUwhCkiGsBwrLeh4hc4FBPJ9iSQO4wcTgItXZ3FRE5urq49OEQte5BdcG1XIp/rxqj2eBF516hd1oYo5C3HUrH3uU4kKl83gIgW5XF870xUrk23ll5Eg3NYyrZU5WggedWtJCZq9JWlXWdDfq27/FqWWjAATrmT6y+d21cln2wT4XsToonK532Jyt6FKT82JNu6nTs1dKC9XP5jAsm1VrALUeBz1o++RNXbdmnmQVtYx+xpsBxA1miiUq261LUl8nAtfQnIrUtVjvqSf/2yRNQlozB01Y9KgLOjiCSLOb5XoKqRQO4IcjwFRB/ZGEjFVhw5fPgFy56Iqm6PjD1cm6hrmhE3/IiGnHsT+2BtWaIWMtYyiX0VqrQm7OOdLkR+Yayc34m6PJAi/XQjoi0Ml5sPdTv1MXyVO9ksYX1xpWrns3TZD8bP0AGyICqx86c2958F/WWmwik3sh0TRPTLA5hSNZ/sJ37QaOJ39r/CZSui3odjIreXJ+opBbDDhrq/lumST/Y5zwA47kBDWYddqN6VTObjbA+qved8HoeLu2TQ9c/359iTS2hhSN6YbF+x0koTUYdUVjjROIUBwM96VC4O3KzgfwDgniP53zUsvQfR2Gywr5Yg0TYOW6K64QCQ0JJoqhzATTf6NQHs++WospyLaEwKAMwj6qEAcE0kmseA/QNApDt1Y8BOZEyWN4mIqPTCLzBpenWq/QFsqZSLxDPSAWC/D4nDAN0Msn8CdrYUhqT3JturAKAYQMW+AhwknpsNgBlGNFxdCMJEG9F01u1i5EhVXgDQ/kWiHTAovg4FvtVnRzUjwc7rRbaHDbvnSFViwD1CTO30lA8H50miqh+B3BkkOgROXW+ye8olHpcOdpwr1YkBcFYkXg0DnzvTUC5O09yvTUR2RzVgP2vV4YJhKX7ULpmDkzVOCnZuX6K5OmgnkOs7Dm4972tTnSQWVtrSfj0OC2RghztSu5TC0H5XqsWaLHaYQvb7AMibk88Vs4wAp2Y50S6DtOuJ5mj03HKj8p9YEhoB7tggcgwDvgZQhddcmEw0m+GwfwxOmQ8FPQZwV0wNIw14700BN8yj3uJDRCTqkM6xR0R/GpbZmJy2MIaVuA7uFTZUXwvMJfEouQle+FG3NI5NDvS3nmLR4PzmR43jCkOfAsnvB8C0oqZPRDRRC3yTUOdMs4zhYkKNyZ1MoqPQ+6M0+d7iGqcnqQ2J7gDvbKjpg7hYdsIUCQ3U85xL0YiCwgAkVyKqekiq5VK3JvJbk6oxw2E7sl2x3Yuom5K1VmTzl2HarSKyH/VJZUjp23r2ulJQDnDai8RtH+YxxnxpSjW/cSwgOqrH+wNXaiVq9LEwhI7ksAV4X4UmpDagJp+AYyRaCLOM1rPbmIw25HRRX2558jrNNVZP9giiS8BDMnKAnnA9TbhwtzgR1fjzs4qFj0FEFDDpjdxUkR7kuB1Y7UKSaQqAGUZu+wxDSm87Isde9zL1lbql52ZpKpUMYJ4LkU2LPclGZA0hm3OslA5k/1Lf+8LWQTvqBuxzo1fapVTsHtCHfC/xwyljcidx3CJy9C3pp7fMWpgKT7uWJCLXxaksfBwWSETicfGmYQaReHAegBViksySIac0VY40AllLqtgSUftnjFFPy3Np9jRwJ6IqJ1UG4aQbhZyP+/hyIFFnaaEtqQRVz8QU8pDiCNF6jdKXflVYR2tyvqRPUY6KnTdGOoroMnCXqP7RG9f03ss1HbQ3xtYgojFpLODZ7AZE1DbBJJmB5HkcAORjRWQzW3nJnjrpjAHiVrVzIwp6YNSdMlQ6Bez0g71LEbnu0Rh0I4CIQoJdiep+QKENDcn7vLId9VUitiz1ynxkS+NgFdndyfa4vqRS5P/UmB/tye4+8IKo8VcYaSoAEdNdyOkQF/BpRUmi+YwpPpegMmEsyCYQ2UyrS46hMGXW4aZEg6UcpW/r2eNCFeQcgPpWNwmVSzAkpRP90smPSFxjSiwKcStJPPdjVdrOQDaWAj//QS6h1qGcS7Rcq+eWB1WXGvOqGPlGAJ99yPeRxUAzjWgOowfYZEuddab4UoJ8znEge4YdEdGvMpMAj12pxluO4jf0zCfqwegBElqR+JEh1xzoaPKjo0cuv9WiMBcrpp5L7ezeAlhLdLEWBf40qjaVem0BzBGi2vF6RoqpD1i2VPkFh24HUZskQDqMxLstB3dENMOQD57UziQZ5chmAcMB+Sp3IvudMHFmQyoXziEZn82R3J5oDwydRXTbkIMi2g0jC2fK+lS+FlX/AeCaF9VzogEwJrk92T60AMRWJ9FUOcc2N3J7oYfq/cNKKE+0UwcwR4nKx+hRJTAmYq7+5NoionkM7n7huuhIXRlTML2JKj3iShtpQySqcsqIxBtcn/wpOJKD7GdJWTvtyecz8ONhDkfOAJI8MuSyA/n8tnHn+WvhMbLCHLOdRCIaIwOQ2pWI7A8ZpZxD1CVeGhVmLmatDdmM+pAtjZ/vRaKx0COiyocycsLqEtWKBICU7kRVzmcqFLKoVSHBOSbSlfVZECNTSPd6kPcZoI3j2HCpQna1HNmthikQ7UUUuCExJ+fTikoicvMi8lj8U2PIVbvmFzIUsk/diKaoOSRiUc+X0owtPkRzVMB9j5DQJLk8aYqEQpINkc2UEJHIxsbW3nVgQuENb4iIzoM9g4h8cvQMIckJFs45Etn7USMAy0Q0XM9Ooh2GQT7Fnoic/R2JHIapuCSSOtWIihUnIp8T4Hxck4gcGzYoLyaqJ2e1IvFTPfUp8CGgq0dEFRv4EdnPZID+RFS6cSCRqJsaQLQXhRjB7PAmIvL2JiJJzYtxnWyJnM8YcteWyK9RBTFR7RcAZOWo/QxHIl8vImr3HUB4SSLberXciDxvAMBRGxooB/A8mFz8S/r4eNkTBYazapJ7LNfPclTvQyEps1MZv/oxHMeqlvKfCm7lPL/qtznylvkTkd1oALvLlV6q52xA6RNGQLasphcRkUetVWroEY2P7OpFRO6NT0Fv5MCyTkREbkHtrwKAekSpStFceUNLtnwDIKK5j4SIXKouUQH41qOkPRHZB43PBID42qV6qwwDbnQIcCIicbHa81IA5YJyRHsNkc2r4EJEVLrzEwDI7VBqonRzFQci8h8eDwDMgWB3IiLvJhfBvlbJf24u8PkX8tn+MfbRoytraoupeR6g6uZfP4Erq5Nfr2+FJKQ+uPIJnLr3t25m60HSlVcqDqhuLhgzcd1nAJn370i5IHt4L80Y4MexWaPHTDv4HXqXSWgsZMcmjZ6+PwWGPt42a/T4+fv+AXfcrWfQ++NahA4AlGdWThg9a+cHcF9bP2X0lI3/gFP75NYXGM082jp19PhlJ1LB+WzGxDeGAK93zho9dsk9OdhM3K0vDCI3jh678Ab0ftm3aMyY+SczwSl9cjMZUC4m+40MOJ+WpJJxAN7diNRxMfFXopjCEp9zFNy/16bgj+DW1SHfWBRBF/A+laKan/S8C6Ryyf86SGlN9hPSOF63thFN1/zrQHdARJJS3afM/L25F1HwVxRJEY0rwEG9r7wdcUrcxyajSPps7VpHCnJA8vbRbapVq99rUwr+8/9//v+/a1Mi7p7at1eIPnDm+tsU63v197g2waVdSJC2cStRs+1vW95bU25o54oOJHQ71Oh2VGElqkONXEkY92i6J9cKmOctHUg4d+gWwViaYp0zCeulN+Va1vdRJLyP+2ZJUc1JiG8SZTkR9UiYbxhlKV/bklDfOdEysn8XC3aScZmWoN1sT8K97QFLeONDJhWJhWeRSah0lPmUw8l4d/+67afNEJ5H9art72IcDVWa7R4ZXWbwpQwI1ZkH+vsYRWHm0rYwashjCNraU12M6qg202Uy0nmhBkJ33lwPI2yfm6mnEZJdEMB1oY6GiYcyZkkKMGIBI4RB94dhFJhilqPOhvXNgDCe0s0wtzNmmWZjkP8dCOXHXAyync+YQdeQDB4FwTyts0HUQmeGtGCDbLcIZ9hoZ1CdNDO8LmdQuTAB7W6AQeVfmeGOv0GNUgW073UMKhNmhrM+BrVWCWjqlgaVuGKGw54GdYGQ3s4g71NmOGJYV0GtvWGn/x8X2pdhj4XfsNc6HpM3Lx8k/JZvr+AxaUkSgivI+SxAEKr6n//+d8guoGplobRqGUm+VP6uSi6Uqq+WypcqhEM4vV86f3oqoNz9P1/UqvxQzQg5IZL8sEmKkFOdnHy8+b24MzUUdkR9Ll0w/fkLfHh1hNAjXgy+3yz4LOC99f8vpNzvCfz7TSYoPWxfrw7f1v3lvKB02p2c+ZYk2wSls96lzt/g13Mh9juFpWLVdOBXTRtboamKnGekrf6lwigV2n83SId53/p3g3Kk0xXhLzsuTq3nx/vvHEz6Zw2SPiizX/V03BYXqxb0FPv61Ko18pQWQMzSltWaTnoKQLOsz9u9revsXV3FU1wmuOpTIU8x18G9ax8Xt6vAkybUeUpPUYWHgLqHRy/HysELLo4rb9t55uQYIe+aQ/D9tKyIIceR0Yc2p6kzt1H3VKgHiiWT4j6nIGOQ0xmtCgKeaiwtAQBpLk7b9cwBkNzK7TnUA6i7DADkI5wuooixgMRoVMpcuUyWwy2TKXLzVBrGGnJKFjvHArCGxt++fevOtU50G+r+9n+DLR3udEFgUWWlxL+79PeMkV1rly/uSdzuxavXbTFk5tbjrxJ+ZOZZVpZN1Wg9C8jexZXtcZe1VYiRxr24sKB7iA2xxY4ePn4lS5cPCipT0s/X3daG2M4VOs069vxDhgXZV3qjZzENOnL0yJEjh89nCDKauNubfwuWEJFb2drt+o6euXb7kQs3rt/75/Wrh9dvXD66Ye3icX3aNwxyIiJxtQFrb0QyliEt73VWzzqaD/2GDHO+JIhE7/2tiTsRhXSZ9ve5R9HZMHXOpyfH1//Rs5oNkXOt37e9sgT1BJrAigjDVZ8KCRyMzhD5WNtjwof68sRaEqKSgzdciUqBJaa9vb5peGkiqjrgbKbZ8NLFa37YvaVVJkI+nDpdSYy/P29miiHqhdQ/7FB6YYIJP51mYcyeIXEFnPctfImqTLoUnQlLzo65OjmIyLvBPbNpdhQnP19q+hqI70telYKK286QQd3HZgsHwnxt/JzCCgGv5/7SpO/6ROB7rWI7LEzZl24VcE6RfdczKbmw/NyUWwMdaLbZoHmzccrssAwAkD79a9zUfRFyQHduTgSXNnLFmD3ZBb8d/pJiniL7KTKkt/Q4ZWG5g+hmAUdxLlwFa1WnHM8xH8BotdCr02jByWgZLkCnQcH/ZVmbLbm53+aukAFqpa6wwZdmKQwvFw/RQW+ujCs3OysrKyuHQV4OAyZbYYAsS2lAdg60gtgs6qkvd9nEDwCk1yf26Na3X9dRucod0xMi1vWYcDCNI+HQ4I7Tzko5Pmzr2W/nx2FC2CFnu71arszKXtcAZjb5/1qZqOEQZWZ3/yneviF2NFsG4HlzqtO6LI1PB/CkFgUES+rUFcIUQ8hp/H2OrBC/m8ATpxph0nfdaL8MmQNsRUPCPob6Fr8HZNZzXJ2Q86ojrQRS29OEZx8OBpMQhq9/2FDgsAcGzLDdDuCEy+86ZA6k8VJAM4q2AFtoOAPgpWNNBc661f4B4EmIIIbc8FHOVOowo2eU3RUAV4r1UyFzAF0GwITSYqCHw7q42NjY16XLfMMmmqkEoBxYKPtZ+AIUr9qR+xM9K+3GMMAS0RyNPhykP6FtLvLw8fHx8Zb4f8Ac2qgDkDu4MFY/XpHP52rzI+B7O1rOZHN8KuUw/sKfJVyeg3WJdYDVTNJvxdKlS5cuD9VgNm0qvPlPnjcnX58940r+hKU0V8u107lOSRefOhcZY9DJcT/0r6YlGgDKQYWST3IgM80MQduPHsnXD42cw+iJv/qJ4Yi7FsdjTGQiSzGQ9oCD+cUr4cvl12AbMZf66jh0wH5JywwA4bULJQMmySMH7zZD4yzk8/tn61tECzUcM2iMznSq23tSrEvdts2RZ+/CptmVeY0sFpb6Tv177/Ezd6VGffX32PBFnvZu934griHNj4s/XZMKHblfEF+RBjegASp8VZmoYUo+p91twDxawTWN+mlNl92T7lqXbpmISlXxparnNMis5HkNuOlJ9o525NU/ARm96DxrL81jgLNlqW6X1hVFCwGcKU516nt07krXCjiXe5h7jVEffunSxpmIqFiH9iOyCjzz9U2nAWbIGy56ZF3IvrOiR6cxO98BUCwcEwNtV9tlTx/fPtmbJjG5W/u8YYV1PQ0AL9f3bdVr3rV0AJons9v13vfzWo9XBZw1ZO4ORn0JJqLO3n5NiGi4vAAWd2Tv7TSuvHu7TmeAidrcSDRz/550awJ0GelysBlZphbhPs00AHDTsxIDeYaGpUrNZQHZqVkacCvTsoC8NFUB59Escx8yhknsQMHN3338sK9qWVqQVwD6S8sxgyu2k5ezs1vJ1SoAd2u4u7j5XFbPcZaQo6vbResyNrxE8TdanTa5h+h3BhZfAGF0jIE6xoQ6xojs5fXFNFcJgPnZk2zaHmQKPEtkeezJHLFNxb+sPDrRmdZokVLKe0XYhSGHdelXWok3v3gs5RNmkrN9UIu6nk5tfqAQYOkptYgqHcoDANXekkRDUOCpPXT4sGHDxlSlgVpo/qQBGQDOu5R4iceivgw4pUPF98C3Z36rG9yg3wE5Cl+ILUW9UsD5tQm1lhZ83PxKlixZspQz61MDu4cAkNGHjiNGVPM1V/YQ8V3eseaC34ea1PQ9V1RNGqMo+Iy+8+D+/fthfVlhjjU/sDCHdiN3KJVffI8pcvrRgKjVcx1LdSuYaIy0wLManH/QAC3ui1p941hO24HU9XXJd8SXoo/sT+ZONiJrWk0SzQU7byDRL5uUBZ4VGo7prCduQe9YzBzaDQCfjjemAbIij32B5v7dCCjf96Zm/aNlspvdgmhWkhYFquhq9vdZaV3oCguIq+79jXWvKGOTyNy9jMG32iSmocH1ehDRqDwUrFTTaFg6w6g2SH79htdfdEBC5eI/kPs77WO0TJFFTryZvyQZ9da/UnV7IiK3kNJdswo8c2kZ1xTqqwVe1KSaK/9qTWWuA6vdxx3bVctmohrMX1Rz2dCYIgvLV8vxsQLVDKDeOiRrCjwrvbdqOVb4TtAC+Kd7WS/PgF/vAojpHuBerOLUHAAfevh5BD4tMmKPGvTjn46bYHCB5eP5n+BMvfoBnO+vXowG9/tzt1LAqXx0Npaxqq8x2iKGeAA58QWi/DKhR83IIgZTFvJiS1LYvxu0zx/K/93Ar8KU9tBGOfBuVaT29epN0VpoX6xYF6FjaTOvLF1zPoOD+XJ82dLly/88JgWY9JMLt0VrWMy3k8vWxmmELUWwyycgVLzhD2d3B9Hc71Nc3OydVmkAzSwXN59iEp+7ADSHfJ19XEjiNSgZ6p2ezsU9RCOyAM1hHxcfT891BY9qWp5R/1oEsNveo8TsK3+5+wWUnHzpT4fAJ0BWnY5nY15OcQrIAh6VCQiNOVrZ5+90HXbaVNvz8W5nGqvDy6Aye2MeLtlV4PAuc/Mhv16vZVcEYFPiAKCeSsUvAcr+tA5QPQO7lSQc2ECbAVygGQx+Bvq+ApBW0TUeJ2gGA4MLCqfdyc2dX91Isq3wR+PVAI7QuDwAB2kWA7ZGKu1qFwYsousAwmm0FqdsW+dlZ2fLu9hfxgPvahcKIvdbhdTg2+BGZ4oAFmoAHKL5GgBnaQbr+JjOrVsVt38CrKR9AE7QBB3m25Ru3bJly9bFaSdyFpLPkCOyAof884ePfPshLrsIYJ6KY44awGmWZrSHuGmXbiVZd8pUPvT+UmXP48AksX/3rl27du09LALIPtODXNuEFTT4vUjhuE1QZHq2tKf9Y+Ckm8jNz8N5TR6w3rZnNmcOAwBZ4f2oY0YhTCnTcmnlSjMkzt4ms7CP9drkWI5WLtMv15kusWx7GX+NsfkTAPrYP0ZG71K3jy3c+5MBcNW+Rh70MgCQElQxpvAlG0hPuK55d1Ob7pjI/7mFvSofmGo5V0Wk3/GF6T45183kr0XUXsrIQz0lTyD/3f/A58/ff2ToAEVth43ZWkaRdFeHFzdzdOpIz5pfC1+pnemhHp/6eaaL7j4jxdKCylpQeItmzZp5UJlmzZq1izKDSz0eqGIXB+yk2awDNJN1kqYw+BAg6rdxkIeLTRhwy5dI5O7eJDQHuO1PnVdsGFGqohRbqcuaBYF2S1AI62JIAzNYoWVxthWvgHl5QdmzbiJwttJmDYALFf/WArhdcQ2Aq50qlW608s/6byCbRl1WrZk+uIrdLh1wu2+N0v71+p4DPs2oX6rCL6tRBJAVngZEv8zQ8+lJFCv3ny8MS/0unP0ZeZGfga8vEvVlvXyZqe/7sw94Z3mtxH9yaROevEnTp44Lf6PkDybmlQbICE8GgNSnqQCQ/TQRAHIiX6Qi41Uennq2/gkA52m4FADehz/7Ac7EZ5EZKAo4W/nm3QFVglrvVQGIHB5SslLP90BE9cmZAK52qVSqXKUKpafjTYu/Xo6tU7bp4lRW9pqWAQEt5ipZ6Qsal6kx9URVq3kwoG6pii0WZXOc6V6zTKVOG2V8YZk3qWM6AO1cmqRkmb4Qt406lis1sQV5XAUyakgGr5tV7hzwQNQhGXjt5/L72iZUYuVtPPSrU81+yAAHuy1aIG2YuPbyZTVpjAKQD6CSI3s5+TtVsJKj5aj19P4u4gHZgHa7N7Wb2lnssECRjyR1FoWM+WNyE/uQFyii2Eni/l/yMhbT5FxcpgFyRpUiBx6JuqaAGWa3LleXVsf+PRAWJK4eIZftFdWPB7Nf3CdZq/3ewPUksM/JP0aec7sqVbSOb7VpU6ZSGlZNdAZ46u9yMisv+7qPw/l8BF8XV5eIbSvMfc8UeP7kvU2ma5sI4Lb4l2+4QT014OTQlghKAzDW5hgQVrbYGwBx9dxfQlax5F0A2EO/M+hLuwDgvG9582HvXBNsdmihAICF4o463WpaBADahTRTmY9AmyvNyVFoYe6CwPiPfD/HdFNzAURWDohCSoC437MMQ/zK/QAwSnwcCAuolAggu7/oIb45ld159PDhIwupN6NoRxGs10FlzaL6mZiU9G3thB9JSUk/dAYNo61gP/QtlZnZjw6zcJj6p+cnlpr/VaL8sE4yqzM94rrqU59jikIfnrT2oNbn8vQwwxwXZyijKkrecXxn9RM9RJSTjUcxLy8vb/9xTFI9m/esV2ZKHlK2UqWKJYpVqVSpwmCFQQPpGkdi2VKZqZ3ElzguUqeUooeulavwf6X+6QAyelIY1x7nRiqjkHdqoCdt1XBht8ih+/gg28kaYz46lD9+88aNG9dvfEBKY3EsK6KCebBUQvpPw6D+dInjtb9/Vlp3OsFxQdTtZ9FDZPhzc754zo/h0WoA6vG0nuH4jWYzxgE4VLxyNld63YoLm1Xru0sBY9LtKkRBb257esYKDyhnni+19LWWGzaexjOsw26NlPIxtJtjF03NLXrIT/c5+z9nPSxrEwFjPmsBJFYulcmVYNuWkf4Ap2GqnrZLuZRgRlJ/BkgZaVfBPFjqwCW5BMMuepb4AOBnJ9oJ3d/UOgXA1yZ2J1CUl9Obyo04uHdMGZquNGp+m8PvwnpJRqi4VFPc6zXr2n/8dqkxeO5a7I8XcXfXtTwLvA6wmXD/WDsXu4pmSqrK1THTiNxOVGfL/aOdxU2TgfiW1Dr07tYmNCynSA8Z48Xk7Eyua2Qw6mwxFx8vUY9EcGEQeTasUsLW6dd0Y3TnAiXFfD0dmkUD2Odh4+la63iTsmbCcjuW5DyMwPceIkdPF+r1EQDeNicnT0fRsBQU7UHz48jSZSe/68COXfaYAZC9b18OdNmnFmx8lQcgec1FDR44NEtR5eV+aW+3Bak7juQC0F5enQQAmdf++vNAhAoAmJTdi05mM8e3Ksz0M4jVJUXflVVfWFA/27ng71g1OFWv1i8+8E4DANINhzVFdpY7x3Y1AOjGieYw4MG1IiL7Y+BzdXYWj+fdK5I4LK564eXbp39R2Zfgw7SKRJ1/8Nqz4X378XbvA8+KJBSzAsnWw9bhl3Pgx79FrgfA68ftiMdH/lMkATzeu2L5pvOJ4Mncut20/HbK1emPVfy8MpjGvsz3ZvTJD+dnW55540f1sfReZcv372PxDyysWCp4emBBoDzlhyEp/PLaifLDvRbm9ZmnmD4Fgeqihn/MMP30GXw4twU1/Mkvb7wdxs+cwavTZxg7c2oVOliEIJ6v4/t1POSZquP53EFFCwvA9+v5KB08rxz8P3GaD28j+fJtpIFvswWktN41Q/gyOER/zZq3ivDkFy8q+CWpIolteJfoRBHexWJl3/DLj2qiW1F8G9GDThXhvShf5xPvJIF3R/ELY/YCmDTNtFl5fAGdDryTwDuqEbzyefEM807/K6agpb7Y2tXdaA93d4/gia90/KDLljKAKkMJTUY2S52epU+RnqHRJ01LT09Pk3JkZOTpy05T8gijh+HS8tR9d+cSZnWjllEFK81WIr/AAFM6UvnQDF74NnlWGpgb/R98XNh18OGfiFrQccABGSv22Nh2XRY9ULJS9gz5tVOP7m1WAIjZ2rnDlOPZrPcbe7eacknFE+o76/amAkjZsu4NAObGsv3J/OQ66tlTMz5bSNQiukAV6+U079rDB8bef/Dg/r6uZDPkGR889yv9AbpV1L+2T31XGnG+kmdDG5oP4EsDqtuxma3nGR2Q1o2CO5chm86rgRsh1KxDGZqYCnyqK2rSqZrnd56I8iZarYFmLFHwW+CJO9FfDC85L4FZD0uq2TSPLkiFUgOYOnOlH1XZlmN9L8tWiINuI1HrR/EXJOJSne4m7Hb0/g68nHQoXvpji3vDb2AOUc8P8vAQj7tKxNRw3f0j52UH0RHoFtL0JFnsWRlPnBYR9clCTnEi2gusFhEN1/LTn+bZa7t3LjWOKkAtFfcwGfCyA7n0COeJDdTuG4De1PwngMYOu4FcGQCkNHePgGqo9zUAq2wXMPhTvAYAzrt0zWRGSnbCQOt7F0iiVWqohhPVegeE25LNWiY/El3JnkSN3hacVoh7mgGpmxyo7FY5L6ynJQCwSDQHAMbbzAFb+zXqcUvPCCi7l3kGYK/teCa3Px2NiYyMuVSx7FccEwVf5xHd03kHpQB+bpn/ggG0jxYcyka+dA7SydTwbeEAuo91yLb7O35YyvpTtIA11WY2gA9DfL08PWz9IqCZKV7HQNPbdiPSOpGbp6enl4dduU/I+V3iXHdnDl8AagZsnRqcagb5FeSTqPG7wgGgWulBgXukOsbMOsYClnDNZ01hvaxs13z2usVVfCKAB1Ri3smhNrVSkN6JJq5dvXr16pXn8wBNWE9Pcf1E3jB9PgT5ZEmzqEIC8LKRhIZs227mbaGReRbHjKHZDCDv4xEB9VS3Rn5ugR1eAXkD6AkMj2ojmskYk8w7GJ3/IGeSpGVUYQGyJeXIAl0Wp1mabgA9ARBXv1gEsqiZPOpmItjTaR6jh0kHgJMuHYw685hv73fMh5A5UdQyqrAAPJo/drSZx3SX2GywNEyhQVHZz3pQyQgoh5ebvm73/gO31UB4aY9tX3JSniy/xeQNPPBFGtWHVsGw6uThxbPFPO3yI6RPombRhQZLzFxGDT+Z6HnJ0h+hW00LWfNoFms8TQfe1KNqrf3LVPd4BewXkbuTA/lM+Qkc86XabZr4So4w6l+pdtsq1PenUd7FedbXxyFfQvpEahxVeEK8h+9NE32fPjcdzO1+F1knB99inRl4GUDM2p59lr49OO4bEsv7H3nz7OHp9qL1APPP6mEdBm2+Jwe+HhnVcfTRNBhRTXTlFd+Gd82fkDmJGkUWnhJ8TaaTyhlAnaVk5WVrWKosNQDosnO0UObocIHGgn2YRgOATpYpBbc8Uw69hvwA747OpyCdRI0iC03xxU1mmVeo+QelShlR1WEDy9SGJPCOakR+BdkkUeOoIpGs3i5OVRtUtXcbzxSGLhsC1UynFlFFIVAcGvJLg6ZTrsKshYV9onURrw2MuP8rtY5iikAss7CwW0TGT1b8q+DVvLlzjBxXfED2vwpMmFK7b44wp1Nk5xicLdOaKi6kX+EoobjvrYJJ9NxnTD6VPDzAyO4JhYWs3ZNGjbbCMf2d7TuMGz36t+1fGH7RWRizbWaGUdNtGipY2kv9MvlBmqqzlLQ5TVoa3HRCYiEhojyRWGSVYrFYJBIRlTun4xPtjWPplqTbZ29/zpjEOrQD7E8VqGM6Lzwuti5JZxmWW9BSVKfSfWZMtd5pE0MoJJpPsJ6anU+ynP0OjvNzjNnsWCaZA9s9qesPPngqosDNHwtxJ+zdH8K6ExvRBoZPNomI2h5NtJA9Dg7zZDAyqxMt0nJhlzd1/84PRNXWvyu0daFhsPZNNEnNN0Ttd6Zawg4nyTwpjD3t5fEO+nf7UM9EniCqtTQK5wtjz0rQA2vLnUrLGT2Ns3lgCwfZtNyc+9FcW11poRTG5o6l8QoDdHt8qHuKuY6ZL5KLqNbSpe7mUdzec8DM+z4WxOaL6+Ra20tPxxPQU37zgX2WuP/oq6h3po6KmkN6nRpPdjPPVjdaJIfRYSXtb8FQzR5v6pJuptH7THnw7+716+mvQvpFnjbm+dHd3tG8Dvb7CmBJjWkHrFy9mDpn6vOfunC+Jc7p0bmr6btV10dUTGKW7S60OBdGa1ZQ958GQbPLizpkmafrfJPOWvg4Sv9Rkb5qPVzMo7h78JC54wpgOxw8flhbennH3dDX4LvKMhUyc64RcYn9l13zMQOz21G8KBfGx1UV7YORuu2e1CHTLHtVptXCwOdckoC/c0+6msdyC1TK/jRXZW17qKXMgIapsP5NHDaBfyTirbfpdPsd7BfKYTxziBp9MAbY6kGd0s1xEGZ/yrKvsFoBnCp83Sxl9xJWLi1ruwKG/OSLyjM+AXhjurzdTp6L5DBh+i/iJTDhDn/q+sXKbGouywYKY7q51CPD2jZTxe/8EzInGmwzpNehqtEw5W1R0FNToCc5HLCmR6JGy5PBWfj6VNvmLKw8LUg0AfzCbKiy+C24zYC71annNxOoe9NIjSm2F7Ofn2FNn1Z/hl5zZW4eY/ZHBa5DVCPW2nbblojnGcS9hn5z4H4N6vrDuEgHn6sw4WZX0UIprImBgeb60dfV08xuhwpaOYNopdrKpE1pKvjGYLPgfjXqlGbUGGqjNMFmV1osh1UZbC7Nt+gYM0dnFbTC7L0uw8qve3um5Fe4V4naZRqR5O+4B8ZvdaUlecgnLLfgpF1IA5RWpu1Ok7T5Fu4GUbsMw5aKa+QYpdvlZLM4D0U1P4o77YGVX/OXPEb+hTtB1DHVkMxatBjG6vY6OvypQJHNRqqbYGV5g6mbLD/DnSDqkmjAXlef70btdXCaL0f+ofke897MsdkFK011+0Ww8usl7e8iX8PdytTtm57cDjRZZ0yoo8N8GfKRlFEB5c0ceKJgdZn8YqxMMYn6ZudzuF+Nun3guuzr+BaGqzY6SxZIkZ9krh08xMyD7xeselEPrZVFl3O+jPwO9yo73uHQjqO+CiPyWtJCKfIVRilXmFtToIrxs78I69Zto7Y/8j/cOyPnCK8gugEjmchQBfIXyy0oLRJX0ljZt3KinUwBQP8W8S8pxgA6FOVkhdBWWDezjULeogChvhquM86cRSG73DxSrCyttM0iFCQsnafynl++Yu5vBShNOxqvtbL9VO1dUUNSezJ7aAHqYYBjDKxbWVsyB0UN8subtpl365aYghMzg36VWtkNCoovcrDcAlF8E7qgsy5dS5oA4aoXdtgFxMG6Lzs7vBCw+mjG0VKtdelaUUddEYTO/ExBacArp+JhsO4L3uKXKHrIWNG9j3l797pTQJJ0XkwDMqyL+Z16qIogkkcEmv14wWi5XUg5r6uw7tiqjs9RBKFJ/vTFzJ+lBaOVYicqM3eDdXenLtJ8Jol3MIqXLLfA88STeFB0jslf6Ma7SH5996p7UYbu3IRevY3v1duye05MRr5SnSpU5dsqHkUZgDzD+qW6fCWpMvHyiaIM/uYtXWYqLysFJF7njUUW9lmA+yNHasmyt9WFtruOlYcOG2rBw3s59xXYXrWsUaWyRVcNWSQX1uQx76IsPDJRV0BZwnt/81EO3zFDeYEXCwjkXZXvfXnIec2O7by+Y0uDooQQm/ywMc9EeJId74vpgKUl8BT6FgQOrttgzo0b+HHtcQW/xNQKsPTSYreyARZ/xsI8HiXwc3yngkCh+J3zIAa8fsKeeHxUUZhmBPle4rfrNSvwd9Ci50Vgr+yJhubwWnr44yf8/PTJk7CEB0VfTG8i8rrOazx/t+jrmSsR0Yisfy90I7brvaIb9dLFZlyymC8Xnc3H7vty0HBpkY3chvLDfvmXphdxOz8pupFIKjfn+2LUP/+6VVoPDVIW3RQ7D77vlY/l9CQDbxXdeB3lva752Jc/Bg8e3Kdyy2GDBw889K+EvGyZTP59/JlcmUwm/VcCZ87UayjAF4llTrnyn//+M9uCek+FJobhmTZ0TDjSSlOfHlw5a/aSfde+ZKt4o71wlPF2ZUNb0l/jj0cJun8VJJzpRUR+tdt0Gzasa7t6Fe2IKqyK5BFlQoqOlfQ1k6VIyOXQJv/UAdLErxqhI+94S6LAweuvfgXnj392TKhLVGnlJ75QrG20Qw2EzW7RoOffGcDtVkvkrKddluSqDw1u2nDCM52gEfObM1Vb/pCB4TF/NyVqcZMfFMvt6j9nmJNlJN1GhtDwFDwoYf8RADOf1utW2pUe0r/ccJmQcasu2c98BxN+3uVCpffwwHEcd2wSBXwsEXg2QxnXm1YgryedBfCzo+PLTN+ACIU0+o1GwNgfQOXv5MK0r3qQ+7wc67vs0zgKYP6k2QDwWNQCCHVplwvcdmz946drBRX4uCjpsCeVj4HJU34nyWq1tc108bsBQNfYbdWLx4+fXJNUlyGxtvN3MCtpG6NrKWofrhUwmMeVqcF7mFG7SGyz39oaU+33ALQ+IkdXFxcXF8daP4E+opn42d79HhDX3NmmyYU8weJrU2qTDLOqRotdn1jZrv40SAZoSzqP37d79+7dodcBnHevrntKY9UA8s539aHpCoFCNYfKRMDMqZ2oRo51nUqsIV6jhq6V6xEYmB4iebzJZie4b1a2iRYontg4b4fZ3/nTnzlZlpupMe4YbpQueRVYRsN1HCoAWGzXp1mld4BMCQADKUKY0Hajrmnmww6Ra7cultt5pSm0m8TV4vClvNei18kJN2ZtZkV7ONMQLfBkwImvSQdK+8YLE49t/O/DAlUNyKKddxnRmg4DOUOoRRqul6PAkKpeTjtZ2nrk9DeAWD/H6jUcXY6rhYnWNFxrCfhw3XJv3OpKnncNOzA2FkDiknFpQPzxiUMmH4zNZWEXVfoMQPvlyNCx297oIEhEO7ifAzfDmMWys1pQzc8cAzh0KrB1KrA1Kg30LhSNB7dKDR7OnloktFlUB5yyt9tW7ImS8wO+BVGbLFavHLZUmsOWSnPYUqk0hzvJz+VkDrdUmsPDCeMuFwV1pAkcrwcQe1gUP+BxCfs5uehKVf4w65yuVGz2H3w+qcu9IiBFGckF1v0AKtu1T+diVO6+OV79bbnbWpLbNnSnJqfMenZav5WnT/H5yWupRUARxR2+APhQnRo9AHC6PtVONcNysuyAlz1pEIpuCwy3PL1UAGZIgiLBfutNy81wY8iAgRY7aFANalGR+gs/B5wDASja0BZwL6CWZlBmZlhuZmZ4YxIJQTudGgFIbEwf9VynYI3pLP1eEAlBu5xqMcC3RvRKz2mqBYtWRTAGyaINYbY5CUInXcsDUHelqVzaUdTRopRL3EOVBsiGFL9twGVXiUQIuuXprQKw087tIccRe7utlqRYIiLHlbl6MkYQFb+hJ/oXGlFPCIr2tY8AkN2NyoW+jX+9xZd6yCzg8UUdh3yRRNSAnFflcaSNJu8G5H+FI+tXCknoKwTlVhJvBoCYTkTVWlQi6voe5n9RzXELS77IgaZ/GUeuq1QAMsaQ954v3anMZQDMfAq8jq5CEHrQUBa+rg6WkF3jVSkw/8vqRC4bAcUiZ5qpQNY4clupRc4o8t6tQ1JvKnMFWGrvegAC0V5x5WQW8PH54xfxsMCIytRnsq3zBu0SZ/pDDiDrN3L5K2eE2Gu3BkBSX/K//cCTJiqFogw/54NclvquAnX6plggcm3hQDMVYEtHkGNzscdODdhJvahkCeonhVCE3tROYxG3R45ijyxFbb4BmvlioikKcCuGELlt04E7sStR2XgIR88lnoctIb4yiUVsm1bfAEA3z/P3XOjPG+i9FQYmtiv1HAKSejj9mmo+5e9Uajp72ryv4FRek8LQ3Esw+EuYVkjCp7LihXlmO2RnvwNWKBTpdtkUv2Ku6OrUM1e4Q9YoqvrEPJ87Uf1YCHj40ZqCnpkjrpso6BUEPbwJoYATpouoSQ63IPAhpjnZT04wjepUaap4BYIf0ns7UsiZn8blxY4jcbMX+BcAFBvLEjU58y7XEM2XR7NdyW9qOv4VADwZX46o7MS9t1++T0iKjbh/+I9GRO49L8OKhSbg4dymRORRsUGrdg2qexNR0PizSvybAPh0ZVG/IAdiV2g9+8w/Gli3EAVoMuLehj99+vR13A8lrF6Y4tf//PcvsJO8113ocV/5hu9bCDyUL/YScnJrB5sxJJg3Zws5ujcRZnwTwZsJQkvFl4YIno/K5Eu+c/aGWubu0MLx7lBL3h2an+4ODQ3dN90rXxLZOzoIpY52onxJuP3Pf//bk+MlCJWR8Zhy1RwheIOaxwTs/zfF4X8JnDLDiWIGdRbU2hlU/LwZrvkZ1EopoEmbGlTqnhkelTao7lcB7WOwQWXDzRBdwaASlwS0Uz4GBX81g6KOQaKFAtpCkUH1c8yATgZR4zjBLKYeGdxbZ46/7A2iVTqBTLdGZJDjFpjzuadhlZ8LZI8qkMElosyCOoZRh1RB7EdbMryRyjxLRIbR8I8C2Ke+ZLh4M8z70dUIqn9T8LrSgIwsk2om/G4Mlfztg6D1up8vGbsW5o7zNYaoROuND+MZASrjy4ONLXzI6IB0s+GwcUQSe0dnAdrJ0d6GjBdvg/l//mICIX1wjgXgTYCAV+UfWOQRb8Gu2DlYpnqtk0DnukFpIZAttRfkHFYrYLGKtRIBznFfHixY/bKc4FbpsQ6WHdvfXlBz7JMIi1fvDnYQzJxqnYFVStc28RbEirXepIC1Zp4c3rKkwBXYbOoJNaw68VborKG9WzSz5ubN8vnmjZwNsq3bvJl1N68pMsizcfNmeps3s+TmzfLT5s1M37L70IXbHsSDD3PS4j8X5F9VNsjz1mdrP2NnULM3nwvyCT9zUDSYE2JQsThY+wt7g9rnQghODzYsxuqeGtY25z///ee///z3n//+899//vvPf//5r0hZGmKQd5zVvTSsfV7RnmL/Ll4M3VDaIJclobusO3SOxKBqm0N36Q3dZcmhu4w9riqiSfFx4Ed7kUEiewdrtyODxfYO/Fgpq4gm2YUKywGZRTWuhabA//z3r40fVGgullFEI108t7C8Nq+I5j8RAgA=)

    The host tool expects unsigned EFI or DTB files, along with
                        certificates and keys, as input. After invoking, the tool unpacks the
                        unsigned image, signs the available items using the provided key and
                        certificate, and then repacks the images, replacing the unsigned version
                        with the signed one.

**Working of host signing tool**
    - **Prerequisites to run the tool**
To run this tool, the host
                                    Linux machine must install the following:
        - OpenSSL and sbsign utilities
        - Python3
        - pip, subprocess, shlex, socket, and shutil python
                                            modules
    - **Configuration of the host signing tool**
The user must
                                    configure the host signing tool before starting the
                                        operation.
        - **`config.in` file**
The host tool
                                                expects users to provide necessary information in a
                                                  `config.ini` configuration file.
                                                Upon boot up, the script reads this file and signs
                                                the image accordingly. Following are the variables
                                                listed in the configuration file:
Figure : config.ini file
                                                  
                                                  ![](data:image/png;base64,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)

Table : Variables in config.ini file

            | Variable in config.ini | Values | Description |
            | --- | --- | --- |
            | `image_type` | `efi/dtb` | Use this configuration to select<br>                                                  `efi` or `dtb` to<br>                                                  sign separately. |
            | `file_path` | `local/remote` | `local` - Keys and<br>                                                  `efi.bin`/`dtb.bin`<br>                                                  are present on the same path as the<br>                                                  script.<br>`remote` - Copy<br>                                                  `efi.bin`/`dtb.bin`<br>                                                  and keys from a remote Linux machine to the<br>                                                  current path. |
            | `local_machine_private_key_path` | `<path of id_rsa file in local<br>                                                  machine>` | This file establishes an SSH connection<br>                                                  with a remote machine if `file_path =<br>                                                  remote`. |
            | `loader_conf_timeout` | `<timeout in<br>                                                  seconds>` | systemd-boot wait time to let you choose to<br>                                                  authenticate the binaries. This option is required<br>                                                  to sign `efi.bin`. |
            | `efi/keys/dtb_remote_hostname` | `<ip or hostname of the remote<br>                                                  Linux machine>` | If `file_path = remote`,<br>                                                  then the host tool selects the host name of the<br>                                                  remote machine to copy<br>                                                  `efi/keys/dtb` file from the remote<br>                                                  machine using SCP. |
            | `efi/keys/dtb_remote_username<br>                                                  ` | `<username_on_remote_machine>` | If `file_path = remote`,<br>                                                  then the host tool selects the user name of the<br>                                                  remote machine to copy<br>                                                  `efi/keys/dtb` file from the remote<br>                                                  machine using SCP, provided the user name is<br>                                                  created on the local machine. |
            | `efi/keys/dtb_remote_filepath` | `<full_path_of_file_on_remote_machine>` | If `file_path = remote`,<br>                                                  then the host tool selects the path of a<br>                                                  `efi/key/dtb` file on the remote<br>                                                  machine to copy that file from the remote machine<br>                                                  using SCP. |
        - **Configure using config.ini file**
1. Image selection: The user must specify which
                                                  image to sign by setting the
                                                  `image_type` variable. The options
                                                  are either `efi` or
                                                  `dtb`.
            2. File location: The user must indicate the
                                                  location of the unsigned EFI/DTB image, keys, and
                                                  certificates using the `file_path`
                                                  variable.
If the user selects
                                                  `local`in the configuration file,
                                                  they must manually copy the EFI/DTB image, keys,
                                                  and certificate files to the local working
                                                  directory.
                1. Create `unsigned_binaries`
                                                  directory in the same path as the script, and then
                                                  copy the
                                                  `efi.bin`/`dtb.bin`
                                                  image into that directory.
                2. Create `keys` directory in the
                                                  same path as the script, and then copy
                                                  `db.auth`, `db.crt`,
                                                  `db.key`,
                                                  `KEK.auth`, and
                                                  `PK.auth` files into that
                                                  directory.

                If the user wants the script to
                                                  automatically copy the required files from a
                                                  remote Linux machine on the same network, they
                                                  must select `remote` in the
                                                  configuration file.

In the configuration
                                                  file, the user must provide information for the
                                                  following variables:
                - `local_machine_private_key_path`
                                                  (mandatory)
                - `[efi_config]` section (if
                                                  `image_type` is
                                                  `efi`)
                - `[keys_config]` section
                                                  (mandatory)
                - `[dtb_config]` section (if
                                                  `image_type` is
                                                  `dtb`)

Note: The script supports copying from another Linux
                                                  machine over SCP within the same
                                                  network.
            3. Loader configuration timeout: If the
                                                  `image_type` is set to
                                                  `efi` in the configuration file,
                                                  the user must update the
                                                  `loader_conf_timeout`
                                                  variable.
            4. Handling missing configuration: If the user
                                                  misses any configuration information, the script
                                                  runs and prompt the user for the missing details
                                                  through the command line.
        - **Run the host signing tool**
1. Invoke the host tool: After completing the
                                                  code build process and obtaining the unsigned
                                                  `efi.bin` and
                                                  `dtb.bin` images, invoke the host
                                                  signing tool.
            2. Prepare a host machine: Store the host signing
                                                  tool files (`signing_tool.py` and
                                                  `config.ini`) on a Linux machine.
                                                  Ensure that both files are in the same working
                                                  directory.
            3. Configure the tool: Set up the host signing
                                                  tool according to the configuration
                                                  instructions.
            4. Run the tool: Execute the host tool from the
                                                  command line using the command: `$python3
                                                  signing_tool.py`
            5. Interactive process: The host signing tool
                                                  displays user selections and operational commands
                                                  on the screen. It displays errors on the command
                                                  line.
            6. Signed images: After the tool completes its
                                                  process, it creates a directory called
                                                  `signed_binaries` in the same
                                                  working directory. The signed
                                                  `efi.bin` or
                                                  `dtb.bin` image is stored there.
                                                  The tool deletes other user-created directories
                                                  after signing.
            7. Repeat for both images: Follow this process
                                                  twice, once for `efi.bin` and once
                                                  for `dtb.bin`. After each signing
                                                  operation, delete the
                                                  `signed_binaries` directory before
                                                  starting a new operation.
    - **Host signing tool workflow**
Following figure shows the
                                    workflow of host signing tool:
Figure : Host signing tool workflow
                                        
                                        ![](data:image/png;base64,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)

        - The host tool requires the `efi.bin` and
                                            `dtb.bin`paths (absolute path or network
                                        path).
            - `efi.bin` contains
                                                  `uki.efi` (Linux kernel image) and
                                                  `bootaa64.efi` (boot loader
                                                image).
            - `dtb.bin` contains
                                                  `combined-dtb.dtb`.
        - The host tool requires the path of
                                            `certificate` and `key`
                                        (absolute path or network path) to sign the images.
        - The host tool mounts
                                            `efi.bin`/`dtb.bin` on FAT
                                        partition, which provides the following directory structure
                                        and follows its separate signing process:
![](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==)
        - After signing the images, the host tool copies the
                                            *Auth* files under
                                            `/loader/keys/authkeys` directory for
                                        both `efi.bin` and `dtb.bin`.
                                        The *Auth* files must be available with keys and
                                        certificates on Target or Security team hosted path.
        - The Host tool must configure the wait-time in
                                            `systemdboot` loader configuration. This
                                        wait-time stops the Kernel loading and allows the user to
                                        review and select `systemdboot` menu options.
                                        The `loader.conf` file must be available in
                                        an updated `efi.bin` file. 
Note: This
                                            process is not followed for `dtb.bin`
                                            file.

            - The host tool configures
                                                  `/loader/loader.conf`.
            - The syntax for `loader.conf` is as
                                                follows: `timeout x`, where x =
                                                timeout in seconds.
        - After completion of the image signing, the host tool must
                                        unmount the `efi.bin/dtb.bin` from FAT
                                        partition. Store the signed `efi.bin/dtb.bin`
                                        on the host machine on the similar path as the host tool
                                        under the `signed_binaries` directory.
        - Following is the directory structure for signed
                                            `efi.bin` and
                                            `dtb.bin`.
![](data:image/png;base64,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)

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

**`efi.bin` signing process**
        - The host tool uses the `sbsign` utility
                                            to sign `uki.efi` and
                                                `bootaa64.efi` images
                                            separately.
        - `sbsign` requires
                                                `certificate` and
                                                `key` for the signing process. Check
                                            the following syntax where `dsk1.key` is
                                            key, `dsk1.crt` is certificate, and the
                                            output filename is the same as the input file:

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

Examples:
            - 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` signing process**
        - The host tool requires the path of
                                                `dtb.bin` file.
        - The host tool requires the path of `key`
                                            and `certificate` (absolute path or
                                            network path) to sign the images.
        - UEFI secure boot requires PE format files for
                                            verification. Non-PE files, like `dtb`,
                                            cannot be signed using `sbsign` as this
                                            signing tool requires PE format files as input.
        - The host tool uses the `openssl` utility
                                            to sign the `dtb` file. Check the
                                            following syntax where `dsk1.key` is key
                                            and `dsk1.crt` is certificate:

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

Example:

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

This
                                            command adds the signature for dtb file in a separate
                                            file (`foo.dtb.sig`) and does not alter
                                            the original file (`foo.dtb`). Hence, the
                                            host tool must keep both the files where the
                                                `*.dtb.sig` file is used during the
                                            UEFI secure boot verification.
- **Multi-DTB support**
    Qualcomm supports multiple board variants based on
                        the same SoC. For instance, the QCS6490 board variants include the RB3 core
                        kit and RB3 Gen2 vision kit. Each board variant has its own DTB in the
                        kernel. During bootup, UEFI selects the appropriate DTB based on the
                        specific board variant. To facilitate this, all DTBs for boards sharing the
                        same SoC are combined and stored in the DTB partition.

    **Combined DTB                            generation**

To enable multi-DTB support, all supported DTBs are appended one after the other and a combined
                        DTB is generated.
![](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)

For RB3 Gen 2, the following DTBs are combined to generate a
                        combined 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                            partition**

- `dtb.bin`, a `vfat` image is
                                generated, which contains the combined DTB image. A dedicated
                                partition named `dtb` is created and
                                    `dtb.bin` is flashed on this partition.
    - The UEFI parses the combined DTB present in the `dtb`
                                partition and selects a matching DTB for the hardware.

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

### Partitioning

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

Partitioning in the Yocto workflow involves the following entities:

| Entity | Description |
| --- | --- |
| Partition layout file | Defines all partitions for storage in JSON format. |
| gen\_partition tool | Reads the partition layout file and generates an internal XML<br>                                format handled by the Qualcomm Ptool. |
| Partition XML | Defines the Qualcomm internal XML format. |
| Ptool | Provisions Qualcomm partition tool that converts information in<br>                                partition XML to GPT binaries. |

The following are details on partition definitions, existing partitions, and the tool
            that generates the GUID partition table for Qualcomm boards:
Note: The following partition layout and
                examples are specific to UFS.

- **Partition layout file**
    The UFS on the device is partitioned to store
                        various images of bootchain and high-level OS. Complete information
                        regarding the partitions defined for a specific board are defined in the
                        configuration file. For the RB3 Gen 2 board, the UFS flash partitions are
                        defined in the following configuration file in the workspace:
                                `meta-qcom-hwe/recipes-devtools/partition-utils/partition-confs/generic-ufs-partitions.conf`.
- **Partition layout file syntax**
To understand the syntax of the partition
                        layout file, a few examples from the
                            `generic-ufs-partitions.conf` file are discussed as
                        follows. One of the first entries in the configuration file defines the disk
                        type, disk size, LBA size (sector size), and whether the last partition
                        should grow till the last usable
                        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

The
                        following are a few examples of partitions defined in the file
                            `generic-ufs-partitions.conf`. A couple of partitions are
                        defined in LUN0 and each line defines an individual partition:
Note: In the following
                            examples, GUIDs are taken from the `partition.xml`
                            file.

    - Example 1: `ssd` partition of size 8 kB defined for
                                LUN0. This partition does not need a file
                                flashed.

            --partition --lun=0 --name=ssd --size=8KB --type-guid=2C86E742-745E-4FDD-BFD8-B6A7AC638772Copy to clipboard
    - Example 2: `misc` partition of size 1024 kB defined
                                for LUN0. This partition does not need a file flashed.

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

A couple of partitions are defined in LUN1. Each line defines an
                        individual partition:
    - Example 3: `xbl_a` partition of size 3604 kB defined
                                for LUN1. File `xbl.elf` is flashed to this
                                partition.

            #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
    - Example 4: `xbl_config_a` partition of size 300 kB
                                defined for LUN1. File `xbl_config.elf` is flashed to
                                this
                                partition.

            #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

A partition defined in LUN4:
    - Example 5: `aop_a` partition of size 512 kB defined
                                for LUN4. File `x` is flashed to this
                                partition.

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

The options used for each partition entry are as follows:
    - Mandatory
                                options:

            --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
    - Optional
                                options:

            --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 partitions**

| Partitions | Description |
    | --- | --- |
    | EFI partition | The EFI system partition (ESP) contains<br>                                            `Esp.bin` and a `vfat`<br>                                        file. It contains all the details necessary for UEFI to<br>                                        enable systemd-boot. For more information on this image, see<br>                                            [EFI image](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#systemd_boot__efi_image). |
    | Rootfs partition | This partition is used to flash the<br>                                            `system.img` image file. This image<br>                                        consists of all the user space libraries and<br>                                        binaries. |
    | Overlay partition | This partition is left empty. On boot, a filesystem is<br>                                        seeded into this partition that is used as an overlay on a<br>                                        few of the `/var` mount-points. The image in<br>                                        this filesystem works as a writable storage filesystem.<br>                                        Associated IMAGE\_FEATURES with this image is<br>                                            `overlay-etc`. |
- **Partition tool                        (Ptool)**
To partition the storage on the device, use the
                            `gen_partition` command to generate a
                            `partitions.xml` file, and then process the
                            `partitions.xml` file with Ptool. Ptool generates a GUID
                        partition table binary that the QDL tool uses to partition the flash. The
                        Ptool workflow is shown in the following figure:
Figure : Ptool workflow
                            
                            ![](data:image/png;base64,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)

    The `generic-ufs-partitions.conf` files present
                        in the location
                            `/layers/meta-qcom-hwe/recipes-devtools/partition-utils/partition-confs`
                        define all the partitions. The tool `gen_partition.py`
                        processes and generates `partition.xml`, which is a mandatory
                        input for `ptool.py`. As a final step, Ptool generates the
                        files `rawprogram.xml`, `patch.xml`,
                            `gpt_main*.bin`, and `gpt_backup*.bin`,
                        which are crucial for the QDL tool to flash the device.

To add a
                        partition, make a partition entry in the configuration file, for example
                            `generic-ufs-partitions.conf` with a universal unique
                        identifier (UUID). After adding an entry, run the BitBake command to
                        generate all necessary files:

        bitbake <image-name>Copy to clipboard

After
                        the image build is complete, flash the
                        image:

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

### Containerization

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

Docker containers are enabled in Qualcomm Linux. To use Docker, ensure that
            containerization features are enabled in Qualcomm BSP, which are integrated and tested.
            To use containerization on Qualcomm LE devices, ensure that
                `meta-virtualization` layer ([https://git.yoctoproject.org/meta-virtualization](https://git.yoctoproject.org/meta-virtualization)) is added
            as part of the workspace.
- **Docker**
Docker is enabled in the
                            `qcom-multimedia-image`:
    1. For the image recipe `qcom-multimedia-image`,
                                    `packagegroup-container` is included using
                                    `meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom-multimedia.bb`.
    2. After the image is built and flashed, Docker is available on the
                                device.
    3. To check kernel compatibility, run the script
                                    `check-config.sh` on the device. To check
                                configuration, the required kernel configurations must be enabled
                                and the image is rebuilt. For more information, see [Kernel compatibility](https://docs.docker.com/engine/install/troubleshoot/#:~:text=Kernel%20compatibility,check%2Dconfig.sh%20script.&amp;text=The%20script%20only%20works%20on%20Linux).
    4. | `systemctl status docker`<br>                                                  output after any docker command is run on the<br>                                                  device. | `systemctl status docker`<br>                                                  output if no docker commands have been run on the<br>                                                  device. |
        | --- | --- |
        | Inactive (dead) | Active (running) |

The following use cases are verified with Docker enabled:
    1. Images pulled from the Docker repository for the
                                    `linux/arm64`platform and tested to run
                                successfully on the device are as follows:
        - `busybox`
        - `python`
        - `alpine`
        - `ubuntu`
        - `postgres`
        - `mongo`
        - `nginx`
        - `redis`
    2. Load Docker images from tar files using the Docker load
                                utility.
    3. Build a Docker image from the Docker file.
    4. Save Docker images that were pulled/built into a
                                    `.tar` file.
    5. Load Docker images, which are saved as `.tar`
                                files.
    6. Run multiple container instances of multiple images
                                pulled/built.
    7. Check for the list of Docker images loaded on the device.
    8. Check for the list of active and total containers on the
                                device.
    9. Inspect Docker images using the Docker inspect utility.
    10. Obtain logs from a container using the Docker logs utility.
    11. Stop and kill container using Docker stop and Docker kill
                                utilities.
    12. Remove containers and Docker images from the device.
- **Hardware node access from                        Docker**
Applications running inside a Docker container might need
                        access to device nodes and files from the device (target-host). Applications
                        running inside containers can access device nodes. This is performed by
                        passing the respective device nodes as an option with the Docker run
                        command:

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

    The
                        device nodes to be passed can be found under the `/dev/`
                        directory on the device. Depending on the use case, for example, in a
                        graphics scenario, `/dev/kgsl-3d0` is one of the nodes to be
                        passed to the Docker using
                        `--device=/dev/kgsl-3d0`.

Storage partition access from
                        Docker files/directories from the device (target-host) can also be exposed
                        to the inside of a container. Exposing files/directories as bind mounts is
                        achieved using the following
                        command:

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

Run
                        a docker container exposing multiple directories, files, and device nodes to
                        the inside of the container using the following
                        command:

        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 is a powerful tool for defining and
                        running multicontainer applications. It simplifies the management of the
                        entire application stack by allowing you to define services, networks, and
                        volumes in a single, comprehensible YAML configuration file. By default,
                        Qualcomm Linux release includes Docker-compose to the image:
    - The `python3-docker-compose` package is added to the
                                    `packagegroup-qcom-multimedia` package group in
                                    `meta-qcom-distro` metadata layer.

**To run docker-compose on device:**
    1. Create or copy Docker-compose YAML files under writable path on a
                                device such as `/var` (for example
                                    `/var/docker-compose-yaml`) to be used with
                                Docker-compose on the device.
    2. Ensure that the Docker images listed in your Docker-compose YAML
                                files are available on the device. The containers started by the
                                Docker-compose utility need these images.
    3. To run Docker-compose for multiple YAML files, use the following
                                    command:

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

    Docker-compose runs and initiates Docker containers as
                        configured from the Docker-compose YAML file. After the Docker-compose
                        commands returns, run `docker ps -a` and docker logs
                            `<conatiner-id>` to check if the docker containers are
                        running as expected.

    To know more about Docker-compose, see [https://docs.docker.com/compose](https://docs.docker.com/compose).

### Kubernetes

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

Kubernetes is an open-source platform used to automate the deployment, scaling, and
            management of applications running in a container. It helps orchestrate containers
            across multiple devices, ensuring efficient resource utilization, high availability, and
            scalability of applications. For more information on Kubernetes, see [https://kubernetes.io/](https://kubernetes.io/).
- **Enable Kubernetes**
- Qualcomm Linux release enables Kubernetes by default in
                                    `qcom-multimedia-image`, via the following
                                    changes:
        - `packagegroup-qcom-k8s` is defined in
                                            `meta-qcom-hwe`.
        - `packagegroup-qcom-k8s` is included in
                                            `recipes-products/packagegroups/packagegroup-qcom-multimedia.bb`.
    - Qualcomm Linux kernel has the following kernel configurations
                                enabled in ` arch/arm64/configs/qcom_defconfig`to
                                support the 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
    - | `systemctl status kubelet`<br>                                                  output if the device is not setup as a Kubernetes<br>                                                  node using `kubeadm`. | `systemctl status kubelt`<br>                                                  output if the device is setup as a Kubernetes node<br>                                                  using `kubeadm`. |
        | --- | --- |
        | Inactive (dead) | Active (running) |

Kubernetes operates with containers that run as pods, which allow users
                        to package an application along with its dependencies (libraries and
                        configuration files) into a single unit. This simplifies deployment and
                        ensures consistency across different environments and nodes of a cluster. A
                        node in the context of Kubernetes refers to a device or a machine. The
                        architecture of Kubernetes has two types of resources:
    - **Master node/control plane:** The master node is the device that
                                acts as the control plane for Kubernetes. It makes global decisions
                                about the cluster (like scheduling), and it detects and responds to
                                cluster events (like starting up a new container when a replica
                                field of deployment is unsatisfied).
    - **Worker node:** These nodes are devices that contain the
                                necessary services to run containers, managed by the master node.
                                Each worker node runs `Kubelet`, a process
                                responsible for communication between the Kubernetes master node and
                                the worker node; it manages the pods running on a machine.

    A pod is the smallest unit of execution in Kubernetes. It
                        represents a single instance of a running process in a cluster acting as an
                        abstraction to the containers run by Kubernetes.
- **Use of Kubernetes**
The following is an example of two devices connected
                        as nodes to a common access point:
    - **Master node**: One of the devices is designated as the master
                                node.
    - **Worker node**: The other device serves as the worker node.
                                Deployments and pods created from the master node runs on the worker
                                node.

Deployments and pods are created using YAML files. These files
                        define the preferred state of deployments and pods at the time of creation.
                        Users can enter the shell of these pods/containers for debugging,
                        monitoring, and other tasks from both the master node and the worker
                            node.
    - **Set up a device as a master node**
Following are the steps to
                                    set up a device as a master node:
        1. Connect the device to Wi-Fi.
        2. Run the following command:

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

Note: `<ip-address>` is the IP
                                                  address of `wlan0` interface, which
                                                  is the output of `ifconfig` command
                                                  after connecting the device to Wi-Fi.
        3. The previous command initializes the Kubernetes
                                                control plane. To start using the cluster, run the
                                                following commands as root
                                                user:

                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

        After successful initialization of the device as
                                    master node/control plane using `kubeadm init`,
                                        `kubeadm` prints the command that must be
                                    used for any device to join the cluster as a worker
                                node.
    - **Set up a device as a worker node**
To set up the device as a
                                    worker node and join the cluster, run the `kubeadm
                                        join` command, where `kubeadm` prints
                                    after initializing the master node.
Note: To suppress
                                        an error that Kubernetes reports when running Docker with
                                        the vfs graph driver, run
                                            `--ignore-preflight-errors=SystemVerification
                                            flag` with the `kubeadm join`
                                        command.

Note: Each node
                                        in a cluster is supposed to have a different hostname. If
                                        when trying to add more than one device with the same
                                        hostname to a single cluster fails, change the hostname of
                                        the device using the `hostname <new-name>`
                                        command.
    - **Create deployment and pods from a master node**
To create
                                    deployments/pods on the worker node, run the following command:

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

Create
                                    your own YAML file at a location such as `/var`.
                                    Example for YAML files:
        - YAML file to create a deployment with the Ubuntu
                                                  image:
**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
        - YAML file to create a pod with the Ubuntu
                                                  image:
**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
    - **Using Kubernetes pods with `kubectl`**
        - **Using `kubectl` get nodes in the                                            cluster**
To list the nodes in the cluster, run the
                                            following command on the master
                                            node:

                kubectl get nodesCopy to clipboard
        - **Using `kubectl` get deployments present in                                            the cluster**
To list the deployments present in the
                                            cluster, run the following command on the master
                                            node:

                kubectl get deploymentCopy to clipboard
        - **Using `kubectl` get pods present in the                                            cluster**
To list the pods present in the cluster,
                                            run the following command on the master
                                            node:

                kubectl get podsCopy to clipboard
        - **Access the shell of a pod from the master node**
To
                                            access the shell instance of a pod from the master node,
                                            run the following command on the master
                                            node:

                kubectl exec -it <pod-name> -- <command>Copy to clipboard
        - **Access shell of a pod from the worker node**
To
                                            access the shell instance of a pod (container) using
                                            Docker, run the following command on the worker
                                            node:

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

Note: `<container-id>` is obtained
                                            using listing all the containers using `docker ps
                                                -a` command.

**Changes made in Docker and Kubernetes in contrast to the upstream solution**

- Recipe
                        `meta-qcom-hwe`/`recipes-containers`/`docker`/`docker-ce_git.bbappend`
                    changes `/lib/systemd/system/docker.service`. During this change,
                        `--exec-opt native.cgroupdriver=systemd` is passed to a
                        `dockerd` command that runs as part of
                        `ExecStart` of the service. This is performed to keep parity
                    with `cgroupdriver` between Docker and Kubernetes.
- Recipe
                        `meta-qcom-hwe`/`recipes-containers`/`kubernetes`/`kubernetes_git.bbappend`
                    changes `/lib/systemd/system/kubelet.service.d/10-kubeadm.conf`.
                    During this change, `--fail-swap-on=false` is passed as part of
                        `KUBELET_EXTRA_ARGS`. This is performed because Kubernetes
                    expected the swap to be **OFF**. As the platform software of Qualcomm has
                    zram enabled, swap is set to **ON**.
- The upstream `kubelet.service` attempts to start automatically
                    upon device bootup, even if the device is not configured as a Kubernetes node.
                    However, this behavior consumes resources and impacts power efficiency. To
                    address this, `kubelet.service` is modified by removing
                        `WantedBy=multi-user.target` in the
                        `meta-qcom-hwe/recipes-containers/kubernetes/kubernetes_git.bbappend`
                    file. Now, it starts when the device is set up as a Kubernetes node using
                        `kubeadm`, rather than automatically in
                        `multi-user.target`.

### Properties

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

Properties (`property-vault`) provide functionality to store and share
            key-value pairs stored as strings across the system. Any software component can share
            any value for a particular key and any other process can access the value by using the
            same key. `property-vault` gives an option to define persistent
            properties across reboot. Components can use `property-vault`to share
            specific information, which might be relevant to any other module on the device. These
            key-value pairs can be accessed using the command-line interface (CLI).
- **Properties using CLI**
To set a property using the CLI, use the following
                        command:

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

To
                        access a property using the CLI, use the following
                        command:

        getprop "my-key"Copy to clipboard

<samp class="ph systemoutput">#
                        Result of the previous command: my-value</samp>
To set a property
                        using the CLI and persist it across reboots, use the following
                        command:

        setprop "persist.my-key" "my-value"Copy to clipboard
- **Properties in C/C++ source files**
Setting up to use properties in C/C++
                        source files:
    1. If you must use properties such as `property-vault`
                                in a recipe, for example, `example-recipe.bb`, add a
                                dependency on
                                `property-vault`:

            DEPENDS = "glib-2.0 property-vault"
            RDEPENDS:${PN} = "property-vault"Copy to clipboard
    2. Change `make`files:
        1. If you are using
                                                `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. If you are using
                                                `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. Modify the source files to `get` and
                                    `set`
                                    properties:
`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

### Logging shim for syslog()

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

Logs from Qualcomm proprietary and open-source projects are logged into
                `syslog`.

The `syslog()` is used to write logs on the device. Use
                `rsyslog` as the logging system to process logs according to
            specified rules. `rsyslog` can accept inputs not only from system and
            kernel messages, but also accepts logs from applications that use `syslog
                protocol` for logging.

When an application makes a `syslog` call, `rsyslog`
            redirects these logs based on its configuration. `rsyslog` configuration
            is found at `/etc/rsyslog.conf` or `/etc/ryslog.d`
            directory.

Use the `logrotate` service for archiving old logs.

### Persist partition

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

The persist partition defined for the UFS is used to store persistent data that BSP
            software components require across reboots. User-requested operations must not erase
            this data during the device lifecycle.

- **Persist mount point**
    The `/var/persist` directory serves as a
                    mount point for a filesystem, which is created on the partition named persist.
                    The recipe `overlayfs-qcom-paths_1.0.bb` is responsible for
                    creating the directory on the rootfs and installs the systemd unit
                        `var-persist.mount` to
                    `local-fs.target`.

At boot, the systemd unit
                        `var-persist.mount` mounts
                        `/dev/disk/by-partlabel/persist` to
                        `/var/persist`. The persist mount point is displayed by
                    running the mount command as
                    follows:

        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
- **Resize persist partition**
    Resize the overlay partition using the recipe
                        `resize-partitions.bb` and
                        `resize-partition.service.in` files. The resize-partition
                    service runs at the device bootup to create and set the filesystem according to
                    the size of the partition.

### Secondary virtual machine

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

### About this task

This section provides the steps to build a Qualcomm Linux image with guest virtual
                machine (VM) support, including VM management tools (`crosvm`,
                    `qemu`), the kernel image, and a minimal rootfs for the guest VM.
                Once built, it generates a Guest VM kernel (image) and rootfs
                    (`initrd.img`), which are then packaged into the system root
                filesystem. The following subsections provide a step-by-step guide on how users can
                enable VM support for the image.

### Procedure

1. **Setup the host**
                
Install clang on the host machine using the following
                        command:

        sudo apt install clang-11Copy to clipboard
2. **Enable meta-rust layer**
                
The meta-rust layer provides rust compiler (rustc) and package manager
                        (cargo) to compile crosvm, which is implemented in rust language.

Add the meta-rust layer to EXTRALAYERS in the
                            `meta-qcom-distro/conf/bblayers.conf` directory.

`vi
                        conf/bblayers.conf`

        EXTRALAYERS ?= " \
         ${WORKSPACE}/layers/meta-rust \
        "Copy to clipboard
3. **Upgrade the rust version**
                
Create a file
                            `meta-qcom-distro/conf/distro/include/rust_version.inc`
                        with the following content:

`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

Include the
                            `rust_version.inc` file in the
                            `meta-qcom-distro/conf/distro/qcom-wayland.conf`
                        path.

`conf/distro/qcom-wayland.conf`

        require conf/distro/include/rust_version.incCopy to clipboard
4. **Add VM package into image**
                
Create a packagegroup as `packagegroup-qcom-vm` and add it to
                        the image via `packagegroup-qcom`. Update the packages,
                            `RDEPENDS:${PN}` variables and add
                            `RDEPENDS:packagegroup-qcom-vm` as follows:

`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. **Build an image**
                
To build an image, use the following
                        command:

        bitbake qcom-console-imageCopy to clipboard
6. **Launch VM**
                
To see the expected output as mentioned in [Guest VM build support](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-3/features.html#guest-vm-build-support), launch the
                        VM.

### Handle out-of-tree kernel modules and device tree using recipes

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

For building out-of-tree kernel module, see [Add kernel module](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-3/customize.html#add-kernel-module).

For device-tree/device-tree blob management, see [Platform support](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-3/customize.html#platform-support_0).

Last Published: Jul 11, 2024

[Previous Topic
Overview](https://docs.qualcomm.com/bundle/publicresource/80-70014-27/topics/intro_yocto_linux_qualcomm.md) [Next Topic
User customizations](https://docs.qualcomm.com/bundle/publicresource/80-70014-27/topics/user_customizations.md)