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

# meta-qcom-extras

This layer is an optional metadata layer for registered users and allows source compilation of select components that are otherwise provided as binaries in the `meta-qcom` layer. If you are entitled to receive this layer, follow the steps described in the [Qualcomm Linux Build Guide](https://dragonwingdocs.qualcomm.com/Key-Documents/Firmware-Guide/build-firmware) to use it.

## **Access-dependent guidance**

The `meta-qcom-extras` layer is available to registered Qualcomm Linux users. To check whether you have access:

* See the [Qualcomm Linux Release Notes](https://dragonwingdocs.qualcomm.com/Key-Documents/Software-Release-Notes/introduction) for the latest release tag.
* Follow the [Qualcomm Linux Build Guide](https://dragonwingdocs.qualcomm.com/Key-Documents/Firmware-Guide/build-firmware) for instructions on cloning and using this layer.

## **Building with meta-qcom-extras**

* Download Qualcomm's Yocto layer `meta-qcom-extras`. For the latest
  `<meta-qcom-extras-release-tag>`, see [Configuration Parameters](#configuration-parameters).

  ```bash theme={null}
  git clone https://qpm-git.qualcomm.com/home2/git/component-revision-history/qualcomm-linux/meta-qcom-extras.git -b <meta-qcom-extras-release-tag> --depth 1
  ```

**Layer Setup**

* Set your Qualcomm Customer ID. To find it, sign in at qualcomm.com,
  click the Profile icon, select **Account Settings**, and scroll to the
  **Company Information** section.
  ```bash theme={null}
  export CUST_ID="<CUST_ID>"
  ```

* Set the outbound license for the layer and its checksum. `CUST_LICENSE`
  and `CUST_LIC_CHKSUM` are required for every recipe in the layer.
  ```bash theme={null}
  export CUST_LICENSE="<CUST_LICENSE>"
  export CUST_LIC_CHKSUM="<CUST_LIC_CHKSUM>"
  ```

* Export `NETRC_FILE` parameter to ensure `~/.netrc` credentials are visible
  in the `kas` environment:
  ```bash theme={null}
  export NETRC_FILE=~/.netrc
  ```

* Update the license file in the source repositories. By default, all sources
  used by `meta-qcom-extras` contain a placeholder LICENSE file. Replace it
  with your outbound license in each source before building. The recipes verify
  `CUST_LICENSE` against this file at build time.

**Firmware Setup**

* Set `FWZIP_PATH` to the directory containing the firmware ZIP files to
  include locally compiled firmware zip paths in the build.
  ```bash theme={null}
  export FWZIP_PATH="<FWZIP_PATH>"
  ```

* Set the modem-specific license and its checksum. `CUST_MDM_LICENSE` and
  `CUST_MDM_LIC_CHKSUM` are required only when building modem firmware.
  ```bash theme={null}
  export CUST_MDM_LICENSE="<CUST_MDM_LICENSE>"
  export CUST_MDM_LIC_CHKSUM="<CUST_MDM_LIC_CHKSUM>"
  ```

* `firmware-qcom-selective.inc` applies these rules at parse time:

  * If `FWZIP_PATH` or `FWZIP_NAME` are unset, the recipe is silently skipped.
  * If both are set but the ZIP file is missing, the build fails with a fatal error.
  * If no `PREFERRED_RPROVIDER` points to the recipe, the recipe is silently skipped.

* Edit `meta-qcom-extras/ci/providers.yml` to add the needed `FWZIP_NAME`
  assignments to enable the recipe during image compilation.

  <CodeGroup>
    ```yaml IQ-9075 theme={null}
    firmware-qcs9100: |
      FWZIP_NAME:pn-firmware-qcs9100 = "QCS9100_dsp"
    firmware-qcs9100-bootbins: |
      FWZIP_NAME:pn-firmware-qcs9100-bootbins = "QCS9100_bootbinaries"
    ```

    ```yaml IQ-8275 theme={null}
    firmware-qcs8300: |
      FWZIP_NAME:pn-firmware-qcs8300 = "QCS8300_dsp"
    firmware-qcs8300-bootbins: |
      FWZIP_NAME:pn-firmware-qcs8300-bootbins = "QCS8300_bootbinaries"
    ```

    ```yaml QCS6490 theme={null}
    firmware-qcs6490-adsp: |
      FWZIP_NAME:pn-firmware-qcs6490-adsp = "QCM6490_adsp"
    firmware-qcs6490-cdsp: |
      FWZIP_NAME:pn-firmware-qcs6490-cdsp = "QCM6490_cdsp"
    firmware-qcs6490-modem: |
      FWZIP_NAME:pn-firmware-qcs6490-modem = "QCM6490_modem"
    firmware-qcs6490-bootbins: |
      FWZIP_NAME:pn-firmware-qcs6490-bootbins = "QCM6490_bootbinaries"
    ```

    ```yaml IQ-615-EVK theme={null}
    firmware-qcs615-adsp: |
      FWZIP_NAME:pn-firmware-qcs615-adsp = "QCS615_adsp"
    firmware-qcs615-cdsp: |
      FWZIP_NAME:pn-firmware-qcs615-cdsp = "QCS615_cdsp"
    firmware-qcs615-bootbins: |
      FWZIP_NAME:pn-firmware-qcs615-bootbins = "QCS615_bootbinaries"
    ```
  </CodeGroup>

* Update the license file in the firmware ZIPs. By default, all ZIPs
  used by `meta-qcom-extras` contain a placeholder LICENSE file. Replace it
  with your outbound license in each ZIP before building. The recipes verify
  `CUST_LICENSE` against this file at build time.

**Build Image**

* Run the setup script to apply these parameters to the build environment.

  ```bash theme={null}
  meta-qcom-extras/setup_extras_config.sh
  ```

* Build the software image using `kas`. You define build targets based
  on machine and distro combinations.

  <CodeGroup>
    ```bash IQ-9075-EVK theme={null}
    kas build meta-qcom-extras/ci/iq-9075-evk.yml:meta-qcom-extras/ci/qcom-distro.yml:meta-qcom-extras/ci/performance.yml
    ```

    ```bash IQ-8275-EVK theme={null}
    kas build meta-qcom-extras/ci/iq-8275-evk.yml:meta-qcom-extras/ci/qcom-distro.yml:meta-qcom-extras/ci/performance.yml
    ```

    ```bash IQ-615-EVK theme={null}
    kas build meta-qcom-extras/ci/iq-615-evk.yml:meta-qcom-extras/ci/qcom-distro.yml:meta-qcom-extras/ci/performance.yml
    ```

    ```bash QCS6490 theme={null}
    kas build meta-qcom-extras/ci/rb3gen2-core-kit.yml:meta-qcom-extras/ci/qcom-distro.yml:meta-qcom-extras/ci/performance.yml
    ```
  </CodeGroup>
