> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Evaluate overlays using supported workflows

Use one of the following workflows to evaluate overlays:

* [Flash the image and install packages from the package server corresponding to a release snapshot](#flash-the-image-and-install-packages-corresponding-to-a-release-snapshot).
* [Build locally, flash images, and use packages from the local build](#build-locally-flash-images-and-use-packages-from-the-local-build).
* [Define the BitBake image recipe for Config #3 and Config #4, and flash the generated image with the overlays included](evaluate-overlays-using-supported-workflows#define-the-image-recipe-for-config-%233-and-config-%234).
  > * For more information on Config #3 and Config #4, see [Overlay configurations and corresponding image recipes](./use-overlay-configurations-to-derive-image-recipes).

## **Flash the image and install packages corresponding to a release snapshot**

Use this workflow to deploy the image and packages built from the Qualcomm Linux 2.0 release. The images and packages corresponding to the Qualcomm Linux release milestone are posted on [CodeLinaro](https://artifacts.codelinaro.org/artifactory/qli-yocto-rpm-signed/).

The [package server](https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm) hosts all the packages generated from the Qualcomm Linux 2.0 Config #2 build, that is, `qcom-multimedia-proprietary-image`. These packages are generated from the `qli-2.1` release snapshot of the Qualcomm Linux 2.0 release. The scope of this package server is to provide an image snapshot corresponding to Config #1, that is `qcom-multimedia-image`, and the corresponding packages generated from Config #2 (`qcom-multimedia-proprietary-image`).

A high-level overview of the steps involved in flashing the image and installing packages from the package server of the release snapshot are as follows. For detailed instructions, see [Install packages from the Qualcomm Linux reference package server](#install-packages-from-the-qualcomm-linux-reference-package-server).

1. Download and flash the `qcom-multimedia-image` [upstream image](https://artifacts.codelinaro.org/artifactory/qli-ci/flashable-binaries/meta-qcom/).
2. Install the packages corresponding to the overlays:
   1. Add the following package feed URL available as part of Qualcomm Linux 2.0 release: [https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm](https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm)
   2. Install package on the device using package manager.
3. To manage the configurations, update the relevant files in `/etc/modprobe.d/` (for example, `asoc-blacklist.conf`, `video-blacklist.conf`) for driver selection.
4. Set EFI variables to select the camera driver.
   * If required, set the EFI variable for the DTB overlay indication to UEFI.

<div className="flex flex-col items-center gap-2">
  <img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Key-Documents/Migration-Guide/media/overlay_workflow.svg?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=9725707bc67e6280996bb5728d51412c" alt="Figure: Qualcomm Linux overlay workflow" width="680" height="600" data-path="archives/2.1/Key-Documents/Migration-Guide/media/overlay_workflow.svg" />

  <p className="text-sm text-gray-700">
    Figure: Qualcomm Linux overlay workflow
  </p>
</div>

### **Install packages from the Qualcomm Linux reference package server**

You can install packages using overlays without software builds. A test server is set up on [CodeLinaro](https://artifacts.codelinaro.org/artifactory/qli-yocto-rpm-signed/) with all the images and RPM packages.

To flash images and install RPMs for overlays, do the following:

1. To flash `qcom-multimedia-image` for `RB3Gen2 Core Kit`, do the following:
   1. Download `qcom-multimedia-image-rb3gen2-core-kit.rootfs.qcomflash.tar.gz` from the artifactory server.
   2. Unpack `qcom-multimedia-image-rb3gen2-core-kit.rootfs.qcomflash.tar.gz`.
   3. Flash it using the [Qualcomm Device Loader (QDL) tool](https://dragonwingdocs.qualcomm.com/Key-Documents/Flash-Guide/flash-with-qdl) or [Product Configuration Assistant Tool (PCAT)](https://dragonwingdocs.qualcomm.com/Key-Documents/Flash-Guide/flash-with-pcat).
2. Bring up and log in to your device.
3. To configure the `yum.repos.d` repository on the device, append the following lines to the configuration file:

**Note**

* `/etc/yum.repos.d/` is a directory that stores repository configuration files. Ensure this directory exists; if not, create it.
* Inside this directory, ensure the file `overlay.repo` exists. If it does not, create it at `/etc/yum.repos.d/overlay.repo`.
* To configure the `yum.repos.d` repository, append the required configuration to `/etc/yum.repos.d/overlay.repo`.
* The `yum.repos.d` repository is protected using GNU Privacy Guard (GPG)-based signing to ensure authenticity and integrity of the repository metadata. These settings in the `.repo` file enforce the following checks:
  * `gpgkey` defines the trusted public GPG key used to verify the repository metadata.
  * `repo_gpgcheck=1` enables mandatory GPG validation of the repository before any package operation.

The base overlay repository depends on the target architecture tune used by the platform.

Use the appropriate base overlay repository as follows:

| Target | Base Overlay Repository |
| - | - |
| RB3 Gen2 (QCS6490) | armv8\_2a |
| IQ-9075 EVK | armv8\_2a |
| IQ-8275 EVK | armv8\_2a |
| Shikra EVK | armv8\_2a |
| IQ-X5121 EVK (Purva) | armv8\_6a |
| IQ-X7181 EVK (Hamoa) | armv8\_6a |

Configure the base overlay repository accordingly:

### armv8\_2a Targets

Use the `armv8_2a` base repository for:

* QCS6490 (RB3 Gen2)
* IQ-9075 EVK
* IQ-8275 EVK
* Shikra EVK

  ```text theme={null}
  [overlay-armv8_2a]
  name = Qualcomm Overlay Repository (armv8_2a)
  baseurl = https://artifacts.codelinaro.org/artifactory/qli-yocto-rpm-signed/qli-2.1/rpm/armv8_2a/
  enabled = 1
  gpgcheck = 0
  gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
  repo_gpgcheck=1

  [overlay-<target-specific>]
  name = Qualcomm Overlay Repository (<target_specific>)
  baseurl = https://artifacts.codelinaro.org/artifactory/qli-yocto-rpm-signed/qli-2.1/rpm/<target-specific>/
  enabled = 1
  gpgcheck = 0
  gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
  repo_gpgcheck=1
  ```

  The second block, `[overlay-<target-specific>]`, determines which feed the DNF uses for your hardware or build target. For example:

  <Tabs>
    <Tab title="QCS6490">
      ```text theme={null}
      [overlay-rb3gen2]
      name = Qualcomm Overlay Repository rb3gen2
      baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/rb3gen2-core-kit/
      enabled = 1
      gpgcheck = 0
      gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
      repo_gpgcheck=1
      ```
    </Tab>

    <Tab title="IQ-9075">
      ```text theme={null}
      [overlay-iq-9075-evk]
      name = Qualcomm Overlay Repository IQ-9075 EVK
      baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/iq-9075-evk/
      enabled = 1
      gpgcheck = 0
      gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
      repo_gpgcheck=1
      ```
    </Tab>

    <Tab title="IQ-8275">
      ```text theme={null}
      [overlay-iq-8275-evk]
      name = Qualcomm Overlay Repository IQ-8275 EVK
      baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/iq-8275-evk/
      enabled = 1
      gpgcheck = 0
      gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
      repo_gpgcheck=1
      ```
    </Tab>

    <Tab title="Shikra-evk">
      ```text theme={null}
      [overlay-shikra-evk]
      name = Qualcomm Overlay Repository Shikra EVK
      baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/shikra-evk/
      enabled = 1
      gpgcheck = 0
      gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
      repo_gpgcheck=1
      ```
    </Tab>
  </Tabs>

### armv8\_6a Targets

Use the `armv8_6a` base repository for:

* IQ-X5121 EVK (Purva)
* IQ-X7181 EVK (Hamoa)

```text theme={null}
[overlay-armv8_6a]
name = Qualcomm Overlay Repository (armv8_6a)
baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/armv8_6a/
enabled = 1
gpgcheck = 0
gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
repo_gpgcheck=1
```

<Tabs>
  <Tab title="IQ-X5121 (Purva)">
    ```text theme={null}
    [overlay-iq-x5121-evk]
    name = Qualcomm Overlay Repository IQ-X5121 EVK
    baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/iq-x5121-evk/
    enabled = 1
    gpgcheck = 0
    gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
    repo_gpgcheck=1
    ```
  </Tab>

  <Tab title="IQ-X7181 (Hamoa)">
    ```text theme={null}
    [overlay-iq-x7181-evk]
    name = Qualcomm Overlay Repository IQ-X7181 EVK
    baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/iq-x7181-evk/
    enabled = 1
    gpgcheck = 0
    gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
    repo_gpgcheck=1
    ```
  </Tab>
</Tabs>

Ensure that both the architecture repository (`armv8_2a` or `armv8_6a`) and the corresponding target-specific repository are configured in `/etc/yum.repos.d/overlay.repo`.
\`\`

4. To refresh the package index using your custom configuration file, run the following command:

   ```text theme={null}
   dnf update
   ```

   **Note**

   If you experience an SSL certificate validation error during DNF update, ensure that your system time is accurate.

   In this step, DNF does the following:

   1. Downloads the repository metadata (for example, `repomd.xml` and related files)
   2. Retrieves the associated metadata signatures
   3. Accepts and uses the repository metadata only if the verification is successful

### **Run DNF installation commands to derive Config #2, Config #3 and Config #4**

**Note**

As Config #1 and Config #2 are images, commands are required to install overlays only for Config #3 and Config #4. You should flash the device with Config #1, that is `qcom-multimedia-image`.

The following table lists the `dnf install` commands to install overlay packages and configuration file changes you must make on the device to derive Config #2:

**Table: DNF commands and configuration file changes for Config #2**

| **Config** | **Overlay** | **Instructions** | | |
| :- | :- | :- | - | - |
| **Config #2** | **Graphics** | To install RPM packages for the graphics overlay, run:<br /><br />`dnf install kgsl-dlkm -y`<br />`dnf install qcom-adreno -y`<br /><br />The `/etc/modprobe.d/qcom-adreno.conf` file is automatically populated with:<br />\`install msm /bin/sh -c "( modprobe --ignore msm skip\_gpu=1 && modprobe msm\_kgsl ) | | modprobe --ignore-install msm"\` |
| | **Audio** | To install packages for the audio overlay, do the following:<br /><br />1. To install RPM packages, run the following DNF commands:<br />`dnf install tinycompress -y`<br />`dnf install audioreach-audio-utils -y`<br />`dnf install audioreach-conf -y`<br />`dnf install audioreach-graphservices -y`<br />`dnf install audioreach-graphmgr -y`<br />`dnf install audioreach-pal -y`<br />`dnf install audioreach-pipewire-plugin -y`<br />`dnf install audioreach-kernel -y`<br />`dnf install kernel-module-audioreach-driver -y`<br /><br />2. Create a file named `asoc-blacklist.conf` in `/etc/modprobe.d/`.<br /><br />3. Add the following blacklist entries:<br />`blacklist q6apm_dai`<br />`blacklist q6apm_lpass_dais`<br />`blacklist q6prm`<br />`blacklist q6prm_clocks`<br />`blacklist snd-soc-sc8280xp`<br />`blacklist snd_q6apm`<br />`blacklist snd_q6dsp_common` | | |
| | **Camera** | To install packages for the camera overlay, do the following:<br /><br />1. Run common DNF commands:<br />`dnf install camx-dlkm -y`<br />`dnf install camx-nhx -y`<br /><br />2. Run device-specific command:<br /><Tabs><Tab title="QCS6490">`dnf install camx-kodiak -y`</Tab><Tab title="IQ-9075/IQ-8275">`dnf install camx-lemans -y`</Tab><Tab title="IQ-x7181-EVK/ IQ-x5121-EVK">`dnf install camx-hamoa -y` <br /> `dnf install chicdk-hamoa -y`<br /> `dnf install camxlib-hamoa-skel -y` <br /> `dnf install camxlib-hamoa -y`</Tab><Tab title="IQ-615">`dnf install camx-talos -y`</Tab></Tabs><br />3. To select the DTB overlay:<br />`echo -n "camx" > /tmp/overlay`<br />`efivar -n 882f8c2b-9646-435f-8de5-f208ff80c1bd-VendorDtbOverlays -w -f /tmp/overlay`<br /><br />4. To verify:<br />`efivar -n 882f8c2b-9646-435f-8de5-f208ff80c1bd-VendorDtbOverlays -p`<br /><br />5. To save before reboot:<br />`sync` <br /> <br /> 6.To install camera service & camera plugin: <br /> `dnf install camera-service -y` <br /> `dnf install gst-plugins-imsdk-prop-qticamsrc -y` | | |
| | **Video** | To install packages for the video overlay :<br /><br />1. To install RPM packages, run the following DNF command:<br />`dnf install kernel-module-iris-vpu -y`<br /><br />2. Create a file named `video-blacklist.conf` in `/etc/modprobe.d/`.<br /><br />3. Add the following blacklist entries:<br /><Tabs><Tab title="QCS6490">`blacklist venus_dec`<br />`blacklist venus_enc`<br />`blacklist venus_core`</Tab><Tab title="IQ-9075 / IQ-8275 / Shikra EVK / IQ-X5121 EVK (Purva) / IQ-X7181 EVK (Hamoa)">`blacklist qcom_iris`</Tab></Tabs> | | |
| | **Sensors** | To install packages for the sensors overlay, do the following:<br /><br />1. To install RPM packages, run the following DNF command:<br />`dnf install qcom-sensors-binaries -y`<br /><br />2. Restart the device to apply changes. | | |
| | **AI/ML** | To install packages for the AI/ML overlay, do the following:<br /><br /> **Prequisites:** Install the `Graphics Overlay` for adreno GPU backend <br /> <br /> 1. To install qairt-sdk <br />`dnf install qairt-sdk -y`<br /><br /> 2. To install SNPE & QNN plugins <br />`dnf install gst-plugins-imsdk-prop-qtimlqnn -y` <br /> `dnf install gst-plugins-imsdk-prop-qtimlsnpe -y` | | |
| | **Vision** | To install packages for the FastCV overlay, do the following:<br /><br />1. Install the prerequisite package:<br />`dnf install qcom-fastcv-binaries -y`<br /><br />2. Install the FastCV runtime package:<br />`dnf install libfastcvopt1 -y`<br /><br />3. Run the device-specific command:<br /><Tabs><Tab title="QCS6490">`dnf install libfastcvopt-thundercomm-rb3gen2-dsp -y`</Tab><Tab title="IQ-9075">`dnf install libfastcvopt-sa8775p-ride-dsp -y`</Tab><Tab title="IQ-8275">`dnf install libfastcvopt-qcs8300-ride-dsp -y`</Tab><Tab title="IQ-615">`dnf install libfastcvopt-qcs615-ride-dsp -y`</Tab><Tab title="IQ-X5121 (Purva)">`dnf install libfastcvopt-hamoa-iot-evk-dsp -y`</Tab><Tab title="IQ-X7181 (Hamoa)">`dnf install libfastcvopt-hamoa-iot-evk-dsp -y`</Tab><Tab title="Shikra EVK">`dnf install libfastcvopt-shikra-evk-dsp -y`</Tab></Tabs> | | |
| | **IMSDK** | To install packages for the IMSDK overlay, do the following:<br /><br /> **Prequisites:** Install all the above overlays from current config <br /> <br /> 1. To install IMSDK proprietary plugins: <br /> `dnf install gst-plugins-imsdk-prop-meta -y` | | |

The following table lists the `dnf install` commands to install overlay packages and configuration file changes you must make on the device to derive Config #3:

**Table: DNF commands and configuration file changes for Config #3**

| **Config** | **Overlay** | **Instructions** |
| :- | :- | :- |
| **Config #3** | **Audio** | To install packages for the audio overlay, do the following:<br /><br />1. To install RPM packages, run the following DNF commands:<br />`dnf install tinycompress -y`<br />`dnf install audioreach-audio-utils -y`<br />`dnf install audioreach-conf -y`<br />`dnf install audioreach-graphservices -y`<br />`dnf install audioreach-graphmgr -y`<br />`dnf install audioreach-pal -y`<br />`dnf install audioreach-pipewire-plugin -y`<br />`dnf install audioreach-kernel -y`<br />`dnf install kernel-module-audioreach-driver -y`<br /><br />2. Create a file named `asoc-blacklist.conf` in `/etc/modprobe.d/`.<br /><br />3. Add the following blacklist entries:<br />`blacklist q6apm_dai`<br />`blacklist q6apm_lpass_dais`<br />`blacklist q6prm`<br />`blacklist q6prm_clocks`<br />`blacklist snd-soc-sc8280xp`<br />`blacklist snd_q6apm`<br />`blacklist snd_q6dsp_common` |
| | **Camera** | To install packages for the camera overlay, do the following:<br /><br />1. Run common DNF commands:<br />`dnf install camx-dlkm -y`<br />`dnf install camx-nhx -y`<br /><br />2. Run device-specific command:<br /><Tabs><Tab title="QCS6490">`dnf install camx-kodiak -y`</Tab><Tab title="IQ-9075/IQ-8275">`dnf install camx-lemans -y`</Tab><Tab title="IQ-x7181-EVK/ IQ-x5121-EVK">`dnf install camx-hamoa -y` <br /> `dnf install chicdk-hamoa -y`<br /> `dnf install camxlib-hamoa-skel -y` <br /> `dnf install camxlib-hamoa -y`</Tab><Tab title="IQ-615">`dnf install camx-talos -y`</Tab></Tabs><br />3. To select the DTB overlay:<br />`echo -n "camx" > /tmp/overlay`<br />`efivar -n 882f8c2b-9646-435f-8de5-f208ff80c1bd-VendorDtbOverlays -w -f /tmp/overlay`<br /><br />4. To verify:<br />`efivar -n 882f8c2b-9646-435f-8de5-f208ff80c1bd-VendorDtbOverlays -p`<br /><br />5. To save before reboot:<br />`sync` <br /> <br /> 6.To install camera service & camera plugin: <br /> `dnf install camera-service -y` <br /> `dnf install gst-plugins-imsdk-prop-qticamsrc -y` |
| | **Video** | To install packages for the video overlay :<br /><br />1. To install RPM packages, run the following DNF command:<br />`dnf install kernel-module-iris-vpu -y`<br /><br />2. Create a file named `video-blacklist.conf` in `/etc/modprobe.d/`.<br /><br />3. Add the following blacklist entries:<br /><Tabs><Tab title="QCS6490">`blacklist venus_dec`<br />`blacklist venus_enc`<br />`blacklist venus_core`</Tab><Tab title="IQ-9075 / IQ-8275 / Shikra EVK / IQ-X5121 EVK (Purva) / IQ-X7181 EVK (Hamoa)">`blacklist qcom_iris`</Tab></Tabs> |
| | **Sensors** | To install packages for the sensors overlay, do the following:<br /><br />1. To install RPM packages, run the following DNF command:<br />`dnf install qcom-sensors-binaries -y`<br /><br />2. Restart the device to apply changes. |
| | **AI/ML** | To install packages for the AI/ML overlay, do the following:<br /><br /> **Note:** GPU backend is not available in the current config <br /> <br /> 1. To install qairt-sdk <br />`dnf install qairt-sdk -y`<br /><br /> 2. To install SNPE & QNN plugins <br />`dnf install gst-plugins-imsdk-prop-qtimlqnn -y` <br /> `dnf install gst-plugins-imsdk-prop-qtimlsnpe -y` |
| | **Vision** | To install packages for the FastCV overlay, do the following:<br /><br />1. Install the prerequisite package:<br />`dnf install qcom-fastcv-binaries -y`<br /><br />2. Install the FastCV runtime package:<br />`dnf install libfastcvopt1 -y`<br /><br />3. Run the device-specific command:<br /><Tabs><Tab title="QCS6490">`dnf install libfastcvopt-thundercomm-rb3gen2-dsp -y`</Tab><Tab title="IQ-9075">`dnf install libfastcvopt-sa8775p-ride-dsp -y`</Tab><Tab title="IQ-8275">`dnf install libfastcvopt-qcs8300-ride-dsp -y`</Tab><Tab title="IQ-615">`dnf install libfastcvopt-qcs615-ride-dsp -y`</Tab><Tab title="IQ-X5121 (Purva)">`dnf install libfastcvopt-hamoa-iot-evk-dsp -y`</Tab><Tab title="IQ-X7181 (Hamoa)">`dnf install libfastcvopt-hamoa-iot-evk-dsp -y`</Tab><Tab title="Shikra EVK">`dnf install libfastcvopt-shikra-evk-dsp -y`</Tab></Tabs> |
| | **IMSDK** | To install packages for the IMSDK overlay, do the following:<br /><br /> **Prequisites:** Install all the above overlays from current config <br /> <br /> 1. To install IMSDK proprietary plugins: <br /> `dnf install gst-plugins-imsdk-prop-meta -y` |

The following table lists the `dnf install` commands to install overlay packages and the configuration file changes you must make on the device to derive Config #4:

**Table: DNF commands and configuration file changes for Config #4**

| **Config** | **Overlay** | **Instructions** | | |
| :- | :- | :- | - | - |
| **Config #4** | **Graphics** | To install RPM packages for the graphics overlay, run:<br /><br />`dnf install kgsl-dlkm -y`<br />`dnf install qcom-adreno -y`<br /><br />The `/etc/modprobe.d/qcom-adreno.conf` file is automatically populated with:<br />\`install msm /bin/sh -c "( modprobe --ignore msm skip\_gpu=1 && modprobe msm\_kgsl ) | | modprobe --ignore-install msm"\` |
| | **Camera** | To install packages for the camera overlay, do the following:<br /><br />1. Run common DNF commands:<br />`dnf install camx-dlkm -y`<br />`dnf install camx-nhx -y`<br /><br />2. Run device-specific command:<br /><Tabs><Tab title="QCS6490">`dnf install camx-kodiak -y`</Tab><Tab title="IQ-9075/IQ-8275">`dnf install camx-lemans -y`</Tab><Tab title="IQ-x7181-EVK/ IQ-x5121-EVK">`dnf install camx-hamoa -y` <br /> `dnf install chicdk-hamoa -y`<br /> `dnf install camxlib-hamoa-skel -y` <br /> `dnf install camxlib-hamoa -y`</Tab><Tab title="IQ-615">`dnf install camx-talos -y`</Tab></Tabs><br />3. To select the DTB overlay:<br />`echo -n "camx" > /tmp/overlay`<br />`efivar -n 882f8c2b-9646-435f-8de5-f208ff80c1bd-VendorDtbOverlays -w -f /tmp/overlay`<br /><br />4. To verify:<br />`efivar -n 882f8c2b-9646-435f-8de5-f208ff80c1bd-VendorDtbOverlays -p`<br /><br />5. To save before reboot:<br />`sync` <br /> <br /> 6.To install camera service & camera plugin: <br /> `dnf install camera-service -y` <br /> `dnf install gst-plugins-imsdk-prop-qticamsrc -y` | | |
| | **Sensors** | To install packages for the sensors overlay, do the following:<br /><br />1. To install RPM packages, run the following DNF command:<br />`dnf install qcom-sensors-binaries -y`<br /><br />2. Restart the device to apply changes. | | |
| | **AI/ML** | To install packages for the AI/ML overlay, do the following:<br /><br /> Prequisites: Install`Graphics Overlay` for adreno GPU backend <br /> <br /> 1. To install qairt-sdk <br />`dnf install qairt-sdk -y`<br /><br /> 2. To install SNPE & QNN plugins <br />`dnf install gst-plugins-imsdk-prop-qtimlqnn -y` <br /> `dnf install gst-plugins-imsdk-prop-qtimlsnpe -y` | | |
| | **Vision** | To install packages for the FastCV overlay, do the following:<br /><br />1. Install the prerequisite package:<br />`dnf install qcom-fastcv-binaries -y`<br /><br />2. Install the FastCV runtime package:<br />`dnf install libfastcvopt1 -y`<br /><br />3. Run the device-specific command:<br /><Tabs><Tab title="QCS6490">`dnf install libfastcvopt-thundercomm-rb3gen2-dsp -y`</Tab><Tab title="IQ-9075">`dnf install libfastcvopt-sa8775p-ride-dsp -y`</Tab><Tab title="IQ-8275">`dnf install libfastcvopt-qcs8300-ride-dsp -y`</Tab><Tab title="IQ-615">`dnf install libfastcvopt-qcs615-ride-dsp -y`</Tab><Tab title="IQ-X5121 (Purva)">`dnf install libfastcvopt-hamoa-iot-evk-dsp -y`</Tab><Tab title="IQ-X7181 (Hamoa)">`dnf install libfastcvopt-hamoa-iot-evk-dsp -y`</Tab><Tab title="Shikra EVK">`dnf install libfastcvopt-shikra-evk-dsp -y`</Tab></Tabs> | | |
| | **IMSDK** | To install packages for the IMSDK overlay, do the following:<br /><br /> **Prequisites:** Install all the above overlays from current config <br /> <br /> 1. To install IMSDK proprietary plugins: <br /> `dnf install gst-plugins-imsdk-prop-meta -y` | | |

To verify that the RPM and driver packages were installed successfully for each overlay, see [Verify the installation of RPM and driver packages](#verify-the-installation-of-rpm-and-driver-packages).

**Note**

The package server is based on the Qualcomm Linux 2.0 release snapshot to demonstrate overlays. It’s not intended to meet the needs of a production-class packaging server. When next version of Qualcomm Linux is released, a new feed (package server URL) will provide packages generated from that release. However, package-based upgrades from one version to another are not guaranteed to work.

### **Verify the installation of RPM and driver packages**

The following table lists the `dnf` and `lsmod` commands to verify that the RPM and driver packages for overlays were installed successfully:

**Table: RPM and driver packages verification commands**

| **Overlay** | **Verification commands** |
| :-: | :- |
| Audio | To verify RPM packages: `dnf list installed \| grep <rpm_name>`. To verify driver packages: `lsmod \| grep audioreach`. |
| Camera | To verify RPM packages: `dnf list installed \| grep <rpm_name>`. To verify driver packages: run `lsmod \| grep cam*` and check for: QCS6490: `camera_qcm6490`; IQ-9075/IQ-8275: `camera_qcs9100`; IQ-615: `camera_qcs615`. |
| Video | To verify RPM packages: `dnf list installed \| grep <rpm_name>`. To verify driver packages: `lsmod \| grep iris_vpu`. |
| Graphics | To verify RPM packages: `dnf list installed \| grep <rpm_name>`. To verify driver packages: `lsmod \| grep msm_kgsl`. |
| AI/ML | To verify RPM packages: <br />`dnf list installed \| grep qairt-sdk`.<br />`dnf list installed \| grep gst-plugins-imsdk-prop-qtimlqnn`.<br />`dnf list installed \| grep gst-plugins-imsdk-prop-qtimlsnpe`. |
| Sensors | To verify RPM packages: `dnf list installed \| grep qcom-sensors-binaries`. |
| IMSDK | To verify RPM packages :<br /> `dnf list installed \| grep gst-plugins-imsdk-prop-meta` |
| Vision | To verify RPM packages: `dnf list installed \| grep libfastcv`. |

To uninstall overlays, see [Uninstall overlay configurations and switch to upstream drivers](./uninstall-overlays).

## **Build locally, flash images, and use packages from the local build**

**Note**

For instructions on how to build from source, see [Qualcomm Linux Build Guide](https://dragonwingdocs.qualcomm.com/Key-Documents/Firmware-Guide/build-firmware#build-bsp-image).

Use this workflow to build images and packages by cloning `meta-qcom`. You can also use this workflow if you want to integrate your changes. The images and packages corresponding to a Qualcomm Linux release are built locally. You can flash images and install packages from the local workspace.

### **Set up a local workspace**

1. To clone `meta-qcom`, run the following command:

   ```text theme={null}
   git clone https://github.com/qualcomm-linux/meta-qcom.git
   ```

2. To build the image for Config #1 `qcom-multimedia-image`, run the following command:

   <Tabs>
     <Tab title="QCS6490">
       ```bash theme={null}
       kas shell meta-qcom/ci/qcs6490-rb3gen2-core-kit.yml:meta-qcom/ci/qcom-distro-multimedia-image.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-image
       ```
     </Tab>

     <Tab title="IQ-9075">
       ```bash theme={null}
       kas shell meta-qcom/ci/iq-9075-evk.yml:meta-qcom/ci/qcom-distro-multimedia-image.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-image
       ```
     </Tab>

     <Tab title="IQ-8275">
       ```bash theme={null}
       kas shell meta-qcom/ci/iq-8275-evk.yml:meta-qcom/ci/qcom-distro-multimedia-image.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-image
       ```
     </Tab>

     <Tab title="IQ-615">
       ```bash theme={null}
       kas shell meta-qcom/ci/iq-615-evk.yml:meta-qcom/ci/qcom-distro-multimedia-image.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-image
       ```
     </Tab>

     <Tab title="IQ-X5121 (Purva)">
       ```bash theme={null}
       kas shell meta-qcom/ci/iq-x5121-evk.yml:meta-qcom/ci/qcom-distro-multimedia-image.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-image
       ```
     </Tab>

     <Tab title="IQ-X7181 (Hamoa)">
       ```bash theme={null}
       kas shell meta-qcom/ci/iq-x7181-evk.yml:meta-qcom/ci/qcom-distro-multimedia-image.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-image
       ```
     </Tab>

     <Tab title="Shikra EVK">
       ```bash theme={null}
       kas shell meta-qcom/ci/shikra-evk.yml:meta-qcom/ci/qcom-distro-multimedia-image.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-image
       ```
     </Tab>
   </Tabs>

3. To build the image for Config #2 `qcom-multimedia-proprietary-image` and all packages, run the following command:

   <Tabs>
     <Tab title="QCS6490">
       ```bash theme={null}
       kas shell meta-qcom/ci/qcs6490-rb3gen2-core-kit.yml:meta-qcom/ci/qcom-distro.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-proprietary-image
       ```
     </Tab>

     <Tab title="IQ-9075">
       ```bash theme={null}
       kas shell meta-qcom/ci/iq-9075-evk.yml:meta-qcom/ci/qcom-distro.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-proprietary-image
       ```
     </Tab>

     <Tab title="IQ-8275">
       ```bash theme={null}
       kas shell meta-qcom/ci/iq-8275-evk.yml:meta-qcom/ci/qcom-distro.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-proprietary-image
       ```
     </Tab>

     <Tab title="IQ-615">
       ```bash theme={null}
       kas shell meta-qcom/ci/iq-615-evk.yml:meta-qcom/ci/qcom-distro.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-proprietary-image
       ```
     </Tab>

     <Tab title="IQ-X5121 (Purva)">
       ```bash theme={null}
       kas shell meta-qcom/ci/iq-x5121-evk.yml:meta-qcom/ci/qcom-distro.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-proprietary-image
       ```
     </Tab>

     <Tab title="IQ-X7181 (Hamoa)">
       ```bash theme={null}
       kas shell meta-qcom/ci/iq-x7181-evk.yml:meta-qcom/ci/qcom-distro.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-proprietary-image
       ```
     </Tab>

     <Tab title="Shikra EVK">
       ```bash theme={null}
       kas shell meta-qcom/ci/shikra-evk.yml:meta-qcom/ci/qcom-distro.yml:meta-qcom/ci/linux-qcom-6.18.yml

       bitbake qcom-multimedia-proprietary-image
       ```
     </Tab>
   </Tabs>

   **Note**

   `qcom-distro.yml` sets DISTRO to `qcom-distro`. `qcom-distro` enables package management using DNF and allows RPMs to be installed. Other DISTRO configurations available in `meta-qcom-distro` enable `SOTA` using OSTree, and disable package management.

### **Install packages and configure the RPM repository**

1. Flash `qcom-multimedia-image` using QDL.
2. Host all the packages from the `rpm` directory of `qcom-multimedia-proprietary-image`. The `rpm` directory is located at `build/tmp/deploy/rpm`.
3. To configure the RPM repository on the device, append the following lines to the configuration file:

**Note**

* `/etc/yum.repos.d/` is a directory that stores repository configuration files. Ensure this directory exists; if not, create it.
* Inside this directory, ensure the file `overlay.repo` exists. If it does not, create it at `/etc/yum.repos.d/overlay.repo`.
* To configure the RPM repository feeds, append the required configuration to `/etc/yum.repos.d/overlay.repo`.
* The `yum.repos.d` repository is protected using GNU Privacy Guard (GPG)-based signing to ensure authenticity and integrity of the repository metadata. These settings in the `.repo` file enforce the following checks:
  * `gpgkey` defines the trusted public GPG key used to verify the repository metadata.
  * `repo_gpgcheck=1` enables mandatory GPG validation of the repository before any package operation.

The second block, `[overlay-<target-specific>]`, determines which feed DNF uses for your hardware or build target.

### armv8\_2a Targets

Use the `armv8_2a` base repository for:

* QCS6490 (RB3 Gen2)
* IQ-9075 EVK
* IQ-8275 EVK
* Shikra EVK

```text theme={null}
[overlay-armv8_2a]
name = Qualcomm Overlay Repository (armv8_2a)
baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/armv8_2a/
enabled = 1
gpgcheck = 0
gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
repo_gpgcheck=1
```

<Tabs>
  <Tab title="QCS6490">
    ```text theme={null}
    [overlay-rb3gen2]
    name = Qualcomm Overlay Repository rb3gen2
    baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/rb3gen2-core-kit/
    enabled = 1
    gpgcheck = 0
    gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
    repo_gpgcheck=1
    ```
  </Tab>

  <Tab title="IQ-9075">
    ```text theme={null}
    [overlay-iq-9075-evk]
    name = Qualcomm Overlay Repository IQ-9075 EVK
    baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/iq-9075-evk/
    enabled = 1
    gpgcheck = 0
    gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
    repo_gpgcheck=1
    ```
  </Tab>

  <Tab title="IQ-8275">
    ```text theme={null}
    [overlay-iq-8275-evk]
    name = Qualcomm Overlay Repository IQ-8275 EVK
    baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/iq-8275-evk/
    enabled = 1
    gpgcheck = 0
    gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
    repo_gpgcheck=1
    ```
  </Tab>

  <Tab title="Shikra EVK">
    ```text theme={null}
    [overlay-shikra-evk]
    name = Qualcomm Overlay Repository Shikra EVK
    baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/shikra-evk/
    enabled = 1
    gpgcheck = 0
    gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
    repo_gpgcheck=1
    ```
  </Tab>
</Tabs>

### armv8\_6a Targets

Use the `armv8_6a` base repository for:

* IQ-X5121 EVK (Purva)
* IQ-X7181 EVK (Hamoa)

```text theme={null}
[overlay-armv8_6a]
name = Qualcomm Overlay Repository (armv8_6a)
baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/armv8_6a/
enabled = 1
gpgcheck = 0
gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
repo_gpgcheck=1
```

<Tabs>
  <Tab title="IQ-X5121 (Purva)">
    ```text theme={null}
    [overlay-iq-x5121-evk]
    name = Qualcomm Overlay Repository IQ-X5121 EVK
    baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/iq-x5121-evk/
    enabled = 1
    gpgcheck = 0
    gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
    repo_gpgcheck=1
    ```
  </Tab>

  <Tab title="IQ-X7181 (Hamoa)">
    ```text theme={null}
    [overlay-iq-x7181-evk]
    name = Qualcomm Overlay Repository IQ-X7181 EVK
    baseurl = https://artifacts.codelinaro.org/qli-yocto-rpm-signed/qli-2.1/rpm/iq-x7181-evk/
    enabled = 1
    gpgcheck = 0
    gpgkey=https://artifacts.codelinaro.org/artifactory/api/security/keypair/yocto-qli-rpm-1/public
    repo_gpgcheck=1
    ```
  </Tab>
</Tabs>

Ensure that both the architecture repository (`armv8_2a` or `armv8_6a`) and the corresponding target-specific repository are configured in `/etc/yum.repos.d/overlay.repo`.
\`\`

4. To refresh the package index using your custom configuration file, run the following command:

   ```bash theme={null}
   dnf update
   ```

   In this step, DNF does the following:

   1. Downloads the repository metadata (for example, `repomd.xml` and related files)
   2. Retrieves the associated metadata signatures
   3. Accepts and uses the repository metadata only if the verification is successful

To uninstall overlays, see [Uninstall overlay configurations and switch to upstream drivers](./uninstall-overlays).

## **Define the image recipe for Config #3 and Config #4**

**Note**

For instructions on how to build from source, see [Qualcomm Linux Build Guide](https://dragonwingdocs.qualcomm.com/Key-Documents/Firmware-Guide/build-firmware#build-bsp-image).

Use this workflow to define the BitBake image recipe for Config #3 and Config #4, and flash the generated image with the overlays included.

To define and build images, do the following:

1. To clone `meta-qcom`, run the following command:

   ```bash theme={null}
   git clone https://github.com/qualcomm-linux/meta-qcom.git
   cd meta-qcom
   ```

2. To clone all layers including `meta-qcom-distro` locally, run the following command:

   ```bash theme={null}
   kas shell meta-qcom/ci/qcs6490-rb3gen2-core-kit.yml:meta-qcom/ci/qcom-distro.yml:meta-qcom/ci/linux-qcom-6.18.yml
   ```

### **Define the image for Config #3**

1. To define the image in `meta-qcom-distro` for Config #3, run the following command:

   ```bash theme={null}
   vim meta-qcom-distro/recipes-products/images/qcom-config3-image.bb
   ```

2. In the vim editor, add the following content to the new image recipe file:

   ```bash theme={null}
   require qcom-multimedia-image.bb

   SUMMARY = "An image built on top of multimedia image for proprietary features"

   # This image is compatible only with aarch64 (ARMv8)
   COMPATIBLE_MACHINE = "^$"
   COMPATIBLE_MACHINE:aarch64 = "(.*)"

   CORE_IMAGE_BASE_INSTALL += " \
      camera-service \
      camx-dlkm \
      camx-kodiak \
      camx-lemans \
      camx-talos \
      camx-hamoa \
      chicdk-hamoa \
      camxlib-hamoa-skel \
      camxlib-hamoa \
      camx-nhx \
      gst-plugins-imsdk-prop \
      iris-video-dlkm \
      libdiag-bin \
      qcom-sensors-binaries \
   "
   CORE_IMAGE_BASE_INSTALL:append = " \
      ${@bb.utils.contains('BBFILE_COLLECTIONS', 'meta-audioreach', ' packagegroup-audioreach', '', d)} \
   "
   ```

   **Note**

   If your target device is a QCS615-based EVK, exclude `iris-video-dlkm` from `qcom-config3-image`. `iris-video-dlkm` doesn't support the video functionality for QCS615-based EVKs. The QCS615-based EVKs are supported by the upstream video driver.

3. To build a new image recipe, run the following command:

   ```bash theme={null}
   bitbake qcom-config3-image
   ```

4. After the build completes, use the QDL tool to flash images.

### **Define the image for Config #4**

1. To define the image in `meta-qcom-distro` for Config #4, run the following command:

   ```bash theme={null}
   vim meta-qcom-distro/recipes-products/images/qcom-config4-image.bb
   ```

2. In the vim editor, add the following content to the new image recipe file:

   ```bash theme={null}
   require qcom-multimedia-image.bb

   SUMMARY = "An image built on top of multimedia image for proprietary features"

   # This image is compatible only with aarch64 (ARMv8)
   COMPATIBLE_MACHINE = "^$"
   COMPATIBLE_MACHINE:aarch64 = "(.*)"

   CORE_IMAGE_BASE_INSTALL += " \
      camera-service \
      camx-dlkm \
      camx-kodiak \
      camx-lemans \
      camx-talos \
      camx-hamoa \
      chicdk-hamoa \
      camxlib-hamoa-skel \
      camxlib-hamoa \
      camx-nhx \
      gst-plugins-imsdk-prop \
      kgsl-dlkm \
      libdiag-bin \
      qcom-adreno \
      qcom-sensors-binaries"
   ```

3. To build a new image recipe, run the following command:

   ```bash theme={null}
   bitbake qcom-config4-image
   ```

4. After the build completes, use the QDL tool to flash images.

To uninstall overlays, see [Uninstall overlay configurations and switch to upstream drivers](./uninstall-overlays).
