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

# 包含固件的 BSP 镜像构建

## 简介

本文提供如何从源代码构建固件组件并将其集成到
Qualcomm BSP 镜像的高层概述。

固件源代码仅向已签署所需协议的用户开放。如果您尚未获得访问权限，
请访问 [Working with Qualcomm](https://www.qualcomm.com/support/working-with-qualcomm)
页面创建 Qualcomm ID，并了解有关账户验证和访问级别的更多信息。

从高层次来看，您将学习以下内容：

* 设置主机系统并安装所需软件包 – [主机设置](#host-setup)
* 切换 Python 版本以匹配构建步骤的要求 – [切换 Python 版本](#switch-python-versions)
* 从源代码同步并构建固件 – [构建固件](#build-firmware)
* 将构建好的固件包含到 BSP 镜像中 – [构建 BSP 镜像](#build-bsp-image)

## 支持的 SoC

本文档支持以下 SoC。如果您的芯片组未
列出，则此处描述的固件构建流程不适用于您的设备。

| SoC      | 描述                                             | 支持情况 |
| -------- | ---------------------------------------------- | ---- |
| QCS6490  | Qualcomm Dragonwing™ RB3 Gen 2 Vision Kit      | ✓    |
|          | Qualcomm Dragonwing™ RB3 Gen 2 Core Kit        | ✓    |
|          | Qualcomm Dragonwing™ RB3 Gen 2 Industrial Kit  | ✓    |
| QCS5430  | Qualcomm Dragonwing™ RB3 Gen 2 Lite Vision Kit | ✓    |
|          | Qualcomm Dragonwing™ RB3 Gen 2 Lite Core Kit   | ✓    |
| IQ9      | Qualcomm Dragonwing™ IQ-9075 Evaluation Kit    | ✓    |
| IQ8      | Qualcomm Dragonwing™ IQ-8275 Evaluation Kit    | ✓    |
| IQ6      | Qualcomm Dragonwing™ IQ-615 Evaluation Kit     | ✓    |
| IQ-X7181 | Qualcomm Dragonwing™ IQ-X7181 Evaluation Kit   | ✓    |
| IQ-X5121 | Qualcomm Dragonwing™ IQ-X5121 Evaluation Kit   | ✓    |
| CQ-2390  | Qualcomm Dragonwing™ CQ-2390 Evaluation Kit    | ✓    |
| IQ-2390  | Qualcomm Dragonwing™ IQ-2390 Evaluation Kit    | ✓    |

## 主机系统要求

* 操作系统
  * Ubuntu 22.04

- 配置
  * x86 机器
  * 四核 CPU，例如 3.4 GHz 的 Intel i7-2600（同等或更高配置）
  * 300 GB 可用磁盘空间（交换分区 > 32 GB）
  * 16 GB 内存

* 工具
  * Git 1.8.3.1 或更高版本
  * Tar 1.28 或更高版本
  * Python 3.10.2 或更高版本
  * GCC 10.1 或更高版本
  * GNU Make 4.0 或更高版本
  * Kas 4.8 或更高版本

- 权限
  * 运行某些命令需要 `sudo` 权限

## 安装 QSC-CLI

`qsc-cli` 是 Qualcomm 提供的命令行工具，为访问、管理和构建
Qualcomm 软件提供端到端的工作流。请按照以下步骤在您的系统上安装
`qsc-cli`：

* 访问 [Qualcomm 支持页面](https://www.qualcomm.com/support/working-with-qualcomm)注册您的 Qualcomm 电子邮箱 ID。

* 下载 `qsc-cli` 的 Debian 软件包：

  <CodeGroup>
    ```bash x86 theme={null}
    wget https://softwarecenter.qualcomm.com/api/download/software/tools/Qualcomm_Software_Center/Linux/Debian/latest.deb -O qsc_installer.deb
    ```

    ```bash ARM64 theme={null}
    wget https://softwarecenter.qualcomm.com/api/download/software/tools/Qualcomm_Software_Center/Linux/ARM64/Debian/latest.deb -O qsc_installer.deb
    ```
  </CodeGroup>

* 安装 `qsc-cli` Debian 软件包：
  ```bash theme={null}
  sudo apt update
  sudo apt install ./qsc_installer.deb
  ```

* 使用您的 Qualcomm ID 登录 `qsc-cli`。对于大多数用户，您的 Qualcomm ID 就是您的
  电子邮箱地址。此操作会打开浏览器窗口以完成身份验证。如果浏览器
  没有自动打开，请复制终端中打印的链接并将其粘贴到您的
  浏览器中完成身份验证。
  ```bash theme={null}
  qsc-cli login
  ```

## 主机设置

以下说明适用于 Ubuntu 主机系统。Yocto 构建也支持与 Yocto 兼容的其他
[发行版](https://docs.yoctoproject.org/ref-manual/system-requirements.html#supported-linux-distributions)，
但未对它们进行验证。

* 安装以下软件包，为 Yocto 构建准备主机环境

  ```bash theme={null}
  sudo apt update
  sudo apt install build-essential chrpath cpio debianutils diffstat \
       file gawk gcc git iputils-ping libacl1 locales python3 python3-git \
       python3-jinja2 python3-pexpect python3-pip python3-subunit socat \
       texinfo unzip wget xz-utils zstd
  ```

* Qualcomm 使用 `kas` 工具来同步和构建 Yocto 项目。请按照
  以下步骤在系统上安装 `kas`

  <Note>
    在较旧的 Ubuntu 版本上，系统包管理器提供的 `kas` 版本
    可能已过时。推荐使用 `pipx` 来安装 kas。
  </Note>

  1. 安装 `pipx`

     ```bash theme={null}
     sudo apt install pipx
     ```

  2. 将 `pipx` 的安装位置添加到您的 `PATH` 中

     ```bash theme={null}
     pipx ensurepath
     ```

     此命令会更新您 shell 的启动文件，因此更改仅在
     新的 shell 会话中生效。请在继续下一步之前
     重新启动您的 shell 会话。

  3. 安装 `kas`（要求版本 4.8 或更高）

     ```bash theme={null}
     pipx install "kas>=4.8"
     ```

* 验证 kas 是否安装成功。

  ```bash theme={null}
  kas --version
  ```

- 编译固件还需要以下软件包：
  ```bash theme={null}
  sudo apt-get install lib32stdc++6 libncurses5 checkinstall libreadline-dev \
       libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev \
       libbz2-dev libffi-dev curl
  ```

- 使用 `qsc-cli` 获取用于访问 Chipcode 的 PAT 令牌。该
  令牌将在两周后过期。

  ```bash theme={null}
  qsc-cli show-access-token
  ```

  ```text Sample output theme={null}
  user@hostname:/local/mnt/workspace$ qsc-cli show-access-token
  [Info]: Starting qsc-cli version 0.0.0.9
  5LThNlklb55mMVLB5C2KqUGU2jCF
  ```

- 将以下条目添加到您的 `~/.netrc` 文件中，以完成对
  Chipcode 仓库访问的身份验证：
  ```text theme={null}
  machine chipmaster2.qti.qualcomm.com
  login <login-id>
  password <access-token>

  machine qpm-git.qualcomm.com
  login <login-id>
  password <access-token>
  ```

- 更新 git 配置：
  ```bash theme={null}
  # Add the following git configurations to fetch large size repositories and to avoid unreliable connections
  git config --global http.postBuffer 1048576000
  git config --global http.maxRequestBuffer 1048576000
  git config --global http.lowSpeedLimit 0
  git config --global http.lowSpeedTime 999999
  # Add the following git configurations to follow remote redirects from http-alternates files or alternates
  git config --global http.https://chipmaster2.qti.qualcomm.com.followRedirects true
  git config --global http.https://qpm-git.qualcomm.com.followRedirects true
  ```

## 配置参数

下表描述了当前版本的构建标签。这些
值需要替换到构建命令中。

| 版本标签                                     | 标识符            |
| ---------------------------------------- | -------------- |
| meta-qcom-release-tag                    | qli-2.0        |
| meta-qcom-extras-release-tag             | 213195-wrynose |
| firmware-release-tag                     | r2.0\_00007.2  |
| firmware-release-tag (IQ-X7181/IQ-X5121) | r2.0\_00008.0  |

## 映射固件源代码

下表描述了您可以下载的固件发行版。
有关 Yocto 层的更多信息，请参阅
[Qualcomm Linux 元数据层](/zh/Key-Documents/Yocto-Guide/qualcomm-linux-metadata-layers)。

**访问级别与固件发行版的映射**

| **发行版**                                             | **描述**                   | **Yocto 层**                                                 |
| --------------------------------------------------- | ------------------------ | ----------------------------------------------------------- |
| Qualcomm\_Linux.SPF.2.0\|AP\|Standard\|OEM\|NoModem | 不含 modem 的高级 OS 和固件源码    | `meta-qcom`<br />`meta-qcom-distro`<br />`meta-qcom-extras` |
| Qualcomm\_Linux.SPF.2.0\|AP\|Standard\|OEM          | 高级 OS 和固件（仅 GPS）源码       | `meta-qcom`<br />`meta-qcom-distro`<br />`meta-qcom-extras` |
| Qualcomm\_Linux.SPF.2.0\|AMSS\|Standard\|OEM        | 高级 OS 和固件（GPS 和 modem）源码 | `meta-qcom`<br />`meta-qcom-distro`<br />`meta-qcom-extras` |

*`AP` = 应用处理器（Application Processor）；`AMSS` = 高级移动用户软件（Advanced Mobile Subscriber Software）*

**固件发行版与 git 仓库的映射**

| **发行版**                                               | **仓库 URL**                                                                                                                                                                                                   | **克隆目录**                                           |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- |
| Qualcomm\_Linux.SPF.2.0\|AP\|Standard\|OEM\|NoModem\| | [https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-2-0\_ap\_standard\_oem\_nomodem.git](https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-2-0_ap_standard_oem_nomodem.git) | qualcomm-linux-spf-2-0\_ap\_standard\_oem\_nomodem |
| Qualcomm\_Linux.SPF.2.0\|AP\|Standard\|OEM\|          | [https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-2-0\_ap\_standard\_oem.git](https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-2-0_ap_standard_oem.git)                  | qualcomm-linux-spf-2-0\_ap\_standard\_oem          |
| Qualcomm\_Linux.SPF.2.0\|AMSS\|Standard\|OEM\|        | [https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-2-0\_amss\_standard\_oem.git](https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-2-0_amss_standard_oem.git)              | qualcomm-linux-spf-2-0\_amss\_standard\_oem        |

<Note>
  `Qualcomm_Linux.SPF.2.0|AP|Standard|OEM|` 和 `Qualcomm_Linux.SPF.2.0|AMSS|Standard|OEM|` 发行版仅在 QCS6490 芯片组上受支持。
</Note>

## 切换 Python 版本

不同的固件镜像构建步骤需要不同的 Python 版本，
具体版本在每个构建步骤下列出的 **Python 版本**要求中
说明。您可以使用 Python 版本管理工具来安装并在
所需版本之间切换，而不会影响系统级的 Python
安装。常见的选择包括 [pyenv](https://github.com/pyenv/pyenv)
和 [uv](https://docs.astral.sh/uv/)。本节介绍如何使用 `pyenv`。

* `pyenv` 会从源码构建每个 Python 版本，因此请先安装构建
  依赖项。如果缺少这些软件包，构建会静默跳过
  诸如 `readline`、`sqlite3` 和 `lzma` 之类的模块：
  ```bash theme={null}
  sudo apt update
  sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev \
       libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev \
       libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
  ```

* 安装 `pyenv`。这需要 `git` 和 `curl` 软件包，它们已作为
  [主机系统要求](#host-system-requirements)的一部分安装。
  ```bash theme={null}
  curl https://pyenv.run | bash
  ```

* 通过在您的 `~/.bashrc` 文件末尾添加以下几行来
  配置 shell：
  ```bash theme={null}
  export PYENV_ROOT="$HOME/.pyenv"
  export PATH="$PYENV_ROOT/bin:$PATH"

  eval "$(pyenv init - bash)"
  ```

* 重新加载 shell 配置：
  ```bash theme={null}
  source ~/.bashrc
  ```

* 列出可用的 Python 版本，并找到您正在执行的构建步骤
  所需的版本（例如 Python 3.8.2）：
  ```bash theme={null}
  pyenv install --list | grep 3.8.2
  ```

* 安装所需的 Python 版本：
  ```bash theme={null}
  pyenv install 3.8.2
  ```

* 激活已安装的版本。使用 `pyenv global` 将其设置为
  您用户账户的默认版本，或使用 `pyenv local` 将其仅限于当前
  目录：

  ```bash theme={null}
  pyenv global 3.8.2
  ```

  验证已激活正确的版本：

  ```bash theme={null}
  python --version
  which python
  ```

<Note>
  `pyenv global` 和 `pyenv local` 仅通过 `pyenv` 更改您
  用户账户的 Python 版本。它们不会修改或替换系统级的
  Python 安装，因此其他用户和系统应用程序不受
  影响。
</Note>

* 要恢复到系统 Python 版本：
  ```bash theme={null}
  pyenv global system
  ```

* 要完全禁用 `pyenv`，请删除上面 shell 配置步骤中添加到
  `~/.bashrc` 的那几行，然后重新加载 shell 配置：
  ```bash theme={null}
  source ~/.bashrc
  ```

## 构建固件

* 为固件源码创建一个工作区目录并进入该目录。
  后续所有说明均假定此目录为工作目录。
  ```bash theme={null}
  mkdir -p <firmware-root>
  cd <firmware-root>
  ```

* 使用 [Firmware Source Mapping](#firmware-source-mapping) 表中的发布标签和克隆
  URL，从 Chipcode 克隆固件源码。
  ```bash theme={null}
  git clone -b <firmware-release-tag> --depth 1 <clone-url>
  ```

* 根据所选的访问配置文件，将以下命令中的 `<firmware-root>` 和 `<distro-clone-directory>`
  替换为正确的值。

<Tabs>
  <Tab title="QCM6490/QCS5430">
    **先决条件**

    * 确保当前使用的 shell 是 `bash`：

      ```bash theme={null}
      echo $0
      ```

      该命令的预期输出应为 `bash`。如果不是，请进入 bash
      shell。

      ```bash theme={null}
      bash
      ```

    * 使用以下命令安装 libffi6 软件包。QAIC 编译器需要
      该软件包，它用于从 IDL 文件生成头文件和
      源文件。
      ```bash theme={null}
      curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
      sudo dpkg -i libffi6_3.2.1-8_amd64.deb
      ```

    * 安装用于 AOP、Qualcomm<sup>®</sup> Trusted Execution Environment
      (TEE) 和 boot 编译的 LLVM：
      ```bash theme={null}
      cd <firmware-root>
      mkdir llvm
      # Sign in to qsc-cli and activate the license
      qsc-cli login
      qsc-cli tool activate-license --name sdllvm_arm
      # LLVM requirement for boot compilation is 14.0.4
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.4 --path <firmware-root>/llvm/14.0.4
      chmod -R 777 <firmware-root>/llvm/14.0.4
      # LLVM requirement for the Qualcomm TEE compilation is 16.0.7
      qsc-cli tool install --name sdllvm_arm --required-version 16.0.7 --path <firmware-root>/llvm/16.0.7
      chmod -R 777 <firmware-root>/llvm/16.0.7
      ```

    * 导出 `SECTOOLS` 变量并编译固件构建
      （`<firmware-root>/<distro-clone-directory>`
      是顶层目录）：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/QCM6490.LE.2.0/common/sectoolsv2/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/QCM6490.LE.2.0/common/sectoolsv2/ext/Linux
      ```

    * 安装并设置 Qualcomm<sup>®</sup> Hexagon<sup>™</sup> 处理器。将
      环境变量 HEXAGON\_ROOT 设置为 Hexagon SDK 的
      安装路径。若要在使用 `qsc-cli` 时更改安装路径，请参阅
      [更改 Hexagon 工具安装路径](/zh/Key-Documents/Firmware-Guide/how-to-change-hexagon-install-path)。
      ```bash theme={null}
      qsc-cli tool extract --name hexagon8.4 --required-version 8.4.07
      qsc-cli tool extract --name hexagon8.4 --required-version 8.4.10
      export HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```

    **构建 cDSP**

    **所需工具**

    * 编译器版本：Hexagon 8.4.07
    * Python 版本：Python 3.10.2
    * libffi6 软件包

    **构建步骤**

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/CDSP.HT.2.5.c3/cdsp_proc/build/ms
      ```

    * 清理构建：
      ```bash theme={null}
      python ./build_variant.py kodiak.cdsp.prod --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      python ./build_variant.py kodiak.cdsp.prod
      ```

    **构建 aDSP**

    **所需工具**

    * 编译器版本：Hexagon 8.4.07
    * Python 版本：Python 3.10.2
    * libffi6 软件包

    **构建步骤**

    * Nanopb 集成（一次性设置）：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/ADSP.HT.5.5.c8/adsp_proc/qsh_api
      curl https://jpa.kapsi.fi/nanopb/download/nanopb-0.3.9.5-linux-x86.tar.gz -o nanopb-0.3.9.5-linux-x86.tar.gz
      cd <firmware-root>/<distro-clone-directory>/ADSP.HT.5.5.c8/adsp_proc/
      python qsh_api/build/config_nanopb_dependency.py -f nanopb-0.3.9.5-linux-x86
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/ADSP.HT.5.5.c8/adsp_proc/build/ms
      ```

    * 清理构建：
      ```bash theme={null}
      python ./build_variant.py kodiak.adsp.prod --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      python ./build_variant.py kodiak.adsp.prod
      ```

    **构建 Boot**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 14.0.4
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/14.0.4/
      ```
    * Python 版本：Python 3.10
    * libffi6 软件包

    **构建步骤**

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/BOOT.MXF.1.0.c1/
      ```

    * 安装依赖项：
      ```bash theme={null}
      python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
      pip install json-schema-for-humans
      ```

    * 清理构建：
      ```bash theme={null}
      python -u boot_images/boot_tools/buildex.py -t kodiak,QcomToolsPkg -v LAA -r RELEASE --build_flags=cleanall
      ```

    * 构建镜像：

      ```bash theme={null}
      python -u boot_images/boot_tools/buildex.py -t kodiak,QcomToolsPkg -v LAA -r RELEASE
      ```

          <Note>
            对于 debug 变体构建，请将 `RELEASE` 替换为 `DEBUG`。
          </Note>

    **构建 Qualcomm TEE 固件**

    **所需工具**

    * 编译器版本：LLVM 16.0.7
    * Python 版本：Python 3.10

    **构建步骤**

    * 安装 LLVM：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.29.1/trustzone_images/build/ms/
      vi build_config_deploy_kodiak.xml
      # Edit all the occurrences of /pkg/qct/software/llvm/release/arm/16.0.7/ to <firmware-root>/llvm/16.0.7/
      ```

    * 清理构建：
      ```bash theme={null}
      python build_all.py -b TZ.XF.5.0 CHIPSET=kodiak --cfg=build_config_deploy_kodiak.xml --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.29.1/trustzone_images/build/ms/
      python build_all.py -b TZ.XF.5.0 CHIPSET=kodiak --cfg=build_config_deploy_kodiak.xml
      ```

    **构建 AOP 固件**

    **所需工具**

    * 编译器版本：LLVM 14.0.4
    * Python 版本：Python 3.10

    **构建步骤**

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/AOP.HO.3.6/aop_proc/build/
      ```

    * 清理构建：
      ```bash theme={null}
      ./build_kodiak.sh -c -l <firmware-root>/llvm/14.0.4/
      ```

    * 构建镜像：
      ```bash theme={null}
      ./build_kodiak.sh -l <firmware-root>/llvm/14.0.4/
      ```

    **构建 MPSS**

    <Note>
      此步骤仅适用于 `Qualcomm_Linux.SPF.2.0|AMSS|Standard|OEM|`。
    </Note>

    **所需工具**

    * 编译器版本：Hexagon 8.4.10
    * Python 版本：Python 3.8.2

    **构建步骤**

    * Nanopb 集成（一次性设置）：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/MPSS.HI.4.3.3.c6.2/modem_proc/ssc_api
      curl https://jpa.kapsi.fi/nanopb/download/nanopb-0.3.9.5-linux-x86.tar.gz -o nanopb-0.3.9.5-linux-x86.tar.gz
      cd <firmware-root>/<distro-clone-directory>/MPSS.HI.4.3.3.c6.2/modem_proc
      python ssc_api/build/config_nanopb_dependency.py -f  nanopb-0.3.9.5-linux-x86
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/MPSS.HI.4.3.3.c6.2/modem_proc/build/ms
      ```

    * 清理构建：
      ```bash theme={null}
      python build_variant.py kodiak.gen.prod --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      python build_variant.py kodiak.gen.prod bparams=-k
      ```

    **CPUCP 固件**

    Qualcomm 以二进制形式发布 CPUCP 固件，您无需编译
    该构建。

    **CPUSYS.VM 固件**

    Qualcomm 以二进制形式发布 CPUSYS.VM 固件，您无需
    编译该构建。

    **BTFM 固件**

    Qualcomm 以二进制形式发布 BTFM 固件，您无需编译
    该构建。

    **WLAN 固件**

    Qualcomm 以二进制形式发布 WLAN 固件，您无需编译
    该构建。

    **生成固件预构建产物（boot-critical 和 split-firmware 二进制文件）**

    <Note>
      此步骤仅适用于 `Qualcomm_Linux.SPF.2.0|AP|Standard|OEM|`。

      ```bash theme={null}
      rm -rf <firmware-root>/<distro-clone-directory>/QCM6490.LE.2.0/common/build/ufs/bin/*
      ```
    </Note>

    * 使用您编译的各个组件创建一个集成的固件
      二进制文件：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/QCM6490.LE.2.0/common/build
      python build.py --imf
      ```

    * 如果在
      `<firmware-root>/<distro-clone-directory>/QCM6490.LE.2.0/common/build/ufs/bin`
      目录中生成了以下 zip 文件，则表明固件预构建成功：
      * `QCM6490_bootbinaries.zip`
      * `QCM6490_dspso.zip`
      * `QCM6490_fw.zip`
  </Tab>

  <Tab title="IQ-9075">
    **先决条件**

    * 确保当前使用的 shell 是 `bash`：

      ```bash theme={null}
      echo $0
      ```

      该命令的预期输出应为 `bash`。如果不是，请进入
      bash shell。

      ```bash theme={null}
      bash
      ```

    * 使用以下命令安装 libffi6 软件包。QAIC 编译器需要该软件包，
      它用于从 IDL 文件生成头文件和
      源文件：
      ```bash theme={null}
      curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
      sudo dpkg -i libffi6_3.2.1-8_amd64.deb
      ```

    * 安装用于 AOP、Qualcomm<sup>®</sup> Trusted Execution Environment
      (TEE) 和 boot 编译的 LLVM：
      ```bash theme={null}
      cd <firmware-root>
      mkdir llvm
      # Sign in to qsc-cli and activate the license
      qsc-cli login
      qsc-cli tool activate-license --name sdllvm_arm
      # LLVM requirement for boot compilation is 14.0.4
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.4 --path <firmware-root>/llvm/14.0.4
      chmod -R 777 <firmware-root>/llvm/14.0.4
      # LLVM requirement for the Qualcomm TEE compilation is 16.0.7
      qsc-cli tool install --name sdllvm_arm --required-version 16.0.7 --path <firmware-root>/llvm/16.0.7
      chmod -R 777 <firmware-root>/llvm/16.0.7
      ```

    * 导出 `SECTOOLS` 变量并编译固件构建
      （`<firmware-root>/<distro-clone-directory>` 是
      顶层目录）：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/QCS9100.LE.2.0/common/sectoolsv2/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/QCS9100.LE.2.0/common/sectoolsv2/ext/Linux
      ```

    * 安装并设置 Qualcomm<sup>®</sup> Hexagon<sup>™</sup>。将环境变量 HEXAGON\_ROOT 设置为
      Hexagon SDK 的安装路径。若要在使用
      `qsc-cli` 时更改安装路径，请参阅[更改 Hexagon 工具安装路径](/zh/Key-Documents/Firmware-Guide/how-to-change-hexagon-install-path)。
      ```bash theme={null}
      qsc-cli tool extract --name hexagon8.6 --required-version 8.6.05.2
      export HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```

    **构建 DSP**

    **所需工具**

    * 编译器版本：Hexagon 8.6.05.2
    * Python 版本：Python 3.8.2

    **构建步骤**

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC_PATH=/usr/bin
      ```

    * 安装依赖项：
      ```bash theme={null}
      pip install ruamel.yaml==0.17.17
      pip install dtschema==2021.10
      pip install jsonschema==4.0.0
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/DSP.AT.1.0.1/dsp_proc/build/ms
      ```

    * 清理构建：
      ```bash theme={null}
      python ./build_variant.py lemans.adsp.prod --clean
      python ./build_variant.py lemans.cdsp0.prod --clean
      python ./build_variant.py lemans.cdsp1.prod --clean
      python ./build_variant.py lemans.gpdsp0.prod --clean
      python ./build_variant.py lemans.gpdsp1.prod --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      python ./build_variant.py lemans.adsp.prod && python ./build_variant.py lemans.cdsp0.prod && python ./build_variant.py lemans.cdsp1.prod && python ./build_variant.py lemans.gpdsp0.prod && python ./build_variant.py lemans.gpdsp1.prod
      ```

    **构建 Boot**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 14.0.4
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/14.0.4/
      ```
    * Python 版本：Python 3.10
    * libffi6 软件包

    **构建步骤**

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/BOOT.MXF.1.0.c1/
      ```

    * 安装依赖项：
      ```bash theme={null}
      python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
      pip install json-schema-for-humans
      ```

    * 清理构建：
      ```bash theme={null}
      python -u boot_images/boot_tools/buildex.py -t lemans,QcomToolsPkg -v LAA -r RELEASE --build_flags=cleanall
      ```

    * 构建镜像：

      ```bash theme={null}
      python -u boot_images/boot_tools/buildex.py -t lemans,QcomToolsPkg -v LAA -r RELEASE
      ```

          <Note>
            对于 debug 变体构建，请将 `RELEASE` 替换为 `DEBUG`。
          </Note>

    **构建 Qualcomm TEE 固件**

    **所需工具**

    * 编译器版本：LLVM 16.0.7
    * Python 版本：Python 3.10

    **构建步骤**

    * 安装 LLVM：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.29.1/trustzone_images/build/ms/
      vi build_config_deploy_lemans.xml
      # Edit all the occurrences of /pkg/qct/software/llvm/release/arm/16.0.7/ to <firmware-root>/llvm/16.0.7/
      ```

    * 清理构建：
      ```bash theme={null}
      python build_all.py -b TZ.XF.5.0 CHIPSET=lemans --cfg=build_config_deploy_lemans.xml --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.29.1/trustzone_images/build/ms/
      python build_all.py -b TZ.XF.5.0 CHIPSET=lemans --cfg=build_config_deploy_lemans.xml
      ```

    **构建 AOP 固件**

    **所需工具**

    * 编译器版本：LLVM 14.0.4
    * Python 版本：Python 3.10

    **构建步骤**

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/AOP.HO.3.6.1/aop_proc/build/
      ```

    * 清理构建：
      ```bash theme={null}
      ./build_lemansau.sh -c -l <firmware-root>/llvm/14.0.4/
      ```

    * 构建镜像：
      ```bash theme={null}
      ./build_lemansau.sh -l <firmware-root>/llvm/14.0.4/
      ```

    **CPUCP 固件**

    Qualcomm 以二进制形式发布 CPUCP 固件，您无需编译
    该构建。

    **CPUSYS.VM 固件**

    Qualcomm 以二进制形式发布 CPUSYS.VM 固件，您无需
    编译该构建。

    **BTFM 固件**

    Qualcomm 以二进制形式发布 BTFM 固件，您无需编译
    该构建。

    **WLAN 固件**

    Qualcomm 以二进制形式发布 WLAN 固件，您无需编译
    该构建。

    **生成固件预构建产物（boot-critical 和 split-firmware 二进制文件）**

    * 使用您编译的各个组件创建一个集成的固件
      二进制文件：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/QCS9100.LE.2.0/common/build
      python build.py --imf
      ```

    * 如果在 `<firmware-root>/<distro-clone-directory>/QCS9100.LE.2.0/common/build/ufs/bin`
      目录中生成了以下 zip 文件，则表明固件预构建
      成功：
      * `QCS9100_bootbinaries.zip`
      * `QCS9100_dspso.zip`
      * `QCS9100_fw.zip`
  </Tab>

  <Tab title="IQ-8275">
    **前提条件**

    * 确保当前工作 shell 为 `bash`：

      ```bash theme={null}
      echo $0
      ```

      该命令的预期输出应为 `bash`。如果不是，请进入
      bash shell。

      ```bash theme={null}
      bash
      ```

    * 使用以下命令安装 libffi6 软件包。QAIC 编译器需要该软件包，
      该编译器用于从 IDL 文件生成头文件和
      源文件。
      ```bash theme={null}
      curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
      sudo dpkg -i libffi6_3.2.1-8_amd64.deb
      ```

    * 安装用于 AOP、Qualcomm<sup>®</sup> 可信执行环境
      （TEE）和引导编译的 LLVM：
      ```bash theme={null}
      cd <firmware-root>
      mkdir llvm
      # Sign in to qsc-cli and activate the license
      qsc-cli login
      qsc-cli tool activate-license --name sdllvm_arm
      # LLVM requirement for boot compilation is 14.0.4
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.4 --path <firmware-root>/llvm/14.0.4
      chmod -R 777 <firmware-root>/llvm/14.0.4
      # LLVM requirement for the Qualcomm TEE compilation is 16.0.7
      qsc-cli tool install --name sdllvm_arm --required-version 16.0.7 --path <firmware-root>/llvm/16.0.7
      chmod -R 777 <firmware-root>/llvm/16.0.7
      ```

    * 导出 `SECTOOLS` 变量并编译固件构建
      （`<firmware-root>/<distro-clone-directory>` 为
      顶层目录）：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/QCS8300.LE.2.0/common/sectoolsv2/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/QCS8300.LE.2.0/common/sectoolsv2/ext/Linux
      ```

    * 安装并设置 Qualcomm<sup>®</sup> Hexagon<sup>™</sup>。将环境变量 HEXAGON\_ROOT 设置为
      Hexagon SDK 的安装路径。要在使用 `qsc-cli` 时更改安装路径，
      请参阅[更改 Hexagon 工具安装路径](/zh/Key-Documents/Firmware-Guide/how-to-change-hexagon-install-path)。
      ```bash theme={null}
      qsc-cli tool extract --name hexagon8.6 --required-version 8.6.05.2
      qsc-cli tool extract --name hexagon8.7 --required-version 8.7.02.1
      export HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```

    **构建 DSP**

    **所需工具**

    * 编译器版本：Hexagon 8.6.05.2 和 8.7.02.1
    * Python 版本：Python 3.8.2

    **构建步骤**

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC_PATH=/usr/bin
      ```

    * 安装依赖项：
      ```bash theme={null}
      pip install ruamel.yaml==0.17.17
      pip install dtschema==2021.10
      pip install jsonschema==4.0.0
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/DSP.AT.1.0.1/dsp_proc/build/ms
      ```

    * 清理构建：
      ```bash theme={null}
      python ./build_variant.py lemans.adsp.prod --clean
      python ./build_variant.py monaco.cdsp0.prod --clean
      python ./build_variant.py lemans.gpdsp0.prod --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      python ./build_variant.py lemans.adsp.prod && python ./build_variant.py monaco.cdsp0.prod && python ./build_variant.py lemans.gpdsp0.prod
      ```

    **构建 Boot**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 14.0.4
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/14.0.4/
      ```
    * Python 版本：Python 3.10
    * libffi6 软件包

    **构建步骤**

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/BOOT.MXF.1.0.c1/
      ```

    * 安装依赖项：
      ```bash theme={null}
      python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
      pip install json-schema-for-humans
      ```

    * 清理构建：
      ```bash theme={null}
      python -u boot_images/boot_tools/buildex.py -t monaco,QcomToolsPkg -v LAA -r RELEASE --build_flags=cleanall
      ```

    * 构建镜像：

      ```bash theme={null}
      python -u boot_images/boot_tools/buildex.py -t monaco,QcomToolsPkg -v LAA -r RELEASE
      ```

          <Note>
            对于调试（debug）变体构建，请将 `RELEASE` 替换为 `DEBUG`。
          </Note>

    **构建 Qualcomm TEE 固件**

    **所需工具**

    * 编译器版本：LLVM 16.0.7
    * Python 版本：Python 3.10

    **构建步骤**

    * 安装 LLVM：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.29.1/trustzone_images/build/ms/
      vi build_config_deploy_monaco.xml
      # Edit all the occurrences of /pkg/qct/software/llvm/release/arm/16.0.7/ to <firmware-root>/llvm/16.0.7/
      ```

    * 清理构建：
      ```bash theme={null}
      python build_all.py -b TZ.XF.5.0 CHIPSET=monaco --cfg=build_config_deploy_monaco.xml --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.29.1/trustzone_images/build/ms/
      python build_all.py -b TZ.XF.5.0 CHIPSET=monaco --cfg=build_config_deploy_monaco.xml
      ```

    **构建 AOP 固件**

    **所需工具**

    * 编译器版本：LLVM 14.0.4
    * Python 版本：Python 3.10

    **构建步骤**

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/AOP.HO.3.6.1/aop_proc/build/
      ```

    * 清理构建：
      ```bash theme={null}
      ./build_monaco.sh -c -l <firmware-root>/llvm/14.0.4/
      ```

    * 构建镜像：
      ```bash theme={null}
      ./build_monaco.sh -l <firmware-root>/llvm/14.0.4/
      ```

    **CPUCP 固件**

    Qualcomm 以二进制形式发布 CPUCP 固件，您无需编译
    该构建。

    **CPUSYS.VM 固件**

    Qualcomm 以二进制形式发布 CPUSYS.VM 固件，您无需
    编译该构建。

    **BTFM 固件**

    Qualcomm 以二进制形式发布 BTFM 固件，您无需编译
    该构建。

    **WLAN 固件**

    Qualcomm 以二进制形式发布 WLAN 固件，您无需编译
    该构建。

    **生成固件预构建产物（引导关键和拆分固件二进制文件）**

    * 将您编译的各个组件组合成一个集成的固件
      二进制文件：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/QCS8300.LE.2.0/common/build
      python build.py --imf
      ```

    * 如果在
      `<firmware-root>/<distro-clone-directory>/QCS8300.LE.2.0/common/build/ufs/bin`
      目录中生成了以下 zip 文件，则表示固件预构建成功：
      * `QCS8300_bootbinaries.zip`
      * `QCS8300_dspso.zip`
      * `QCS8300_fw.zip`
  </Tab>

  <Tab title="IQ-615">
    **前提条件**

    * 确保当前工作 shell 为 `bash`：

      ```bash theme={null}
      echo $0
      ```

      该命令的预期输出应为 `bash`。如果不是，请进入
      bash shell。

      ```bash theme={null}
      bash
      ```

    * 使用以下命令安装 libffi6 软件包。QAIC 编译器需要该软件包，
      该编译器用于从 IDL 文件生成头文件和
      源文件。
      ```bash theme={null}
      curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
      sudo dpkg -i libffi6_3.2.1-8_amd64.deb
      ```

    * 安装用于 AOP、Qualcomm<sup>®</sup> 可信执行环境（TEE）和引导编译的 LLVM：
      ```bash theme={null}
      cd <firmware-root>
      mkdir llvm
      # Sign in to qsc-cli and activate the license
      qsc-cli login
      qsc-cli tool activate-license --name sdllvm_arm
      # LLVM requirement for AOP is 3.9.3
      mkdir -p /pkg/qct/software/llvm
      qsc-cli tool install --name sdllvm_arm --required-version 3.9.3 --path /pkg/qct/software/llvm/release/arm/3.9.3
      chmod -R 777 /pkg/qct/software/llvm/release/arm/3.9.3
      # LLVM requirement for boot compilation is 14.0.4
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.4 --path <firmware-root>/llvm/14.0.4
      chmod -R 777 <firmware-root>/llvm/14.0.4
      # LLVM requirement for Qualcomm TrustZone compilation is 16.0.7
      qsc-cli tool install --name sdllvm_arm --required-version 16.0.7 --path <firmware-root>/llvm/16.0.7
      chmod -R 777 <firmware-root>/llvm/16.0.7
      ```

    * 导出 `SECTOOLS` 变量并编译固件构建
      （`<firmware-root>/<distro-clone-directory>` 为顶层目录）：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/QCS615.LE.2.0/common/sectoolsv2/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/QCS615.LE.2.0/common/sectoolsv2/ext/Linux
      ```

    * 安装并设置 Qualcomm<sup>®</sup> Hexagon<sup>™</sup>。将环境变量 `HEXAGON_ROOT`` 设置为
      Hexagon SDK 的安装路径。要在使用 `qsc-cli\` 时更改安装路径，
      请参阅[更改 Hexagon 工具安装路径](/zh/Key-Documents/Firmware-Guide/how-to-change-hexagon-install-path)。
      ```bash theme={null}
      qsc-cli tool extract --name hexagon8.2 --required-version 8.2.05.1
      export HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```

    **构建 cDSP**

    **所需工具**

    * 编译器版本：Hexagon 8.2.05
    * Python 版本：Python 2.7.18
    * libffi6 软件包

    **构建步骤**

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/CDSP.VT.2.2.c4
      ```

    * 清理构建：
      ```bash theme={null}
      python cdsp_proc/build/build.py -c sm6150 -o clean -f CDSP
      ```

    * 构建镜像：
      ```bash theme={null}
      python cdsp_proc/build/build.py -c sm6150 -o all -f CDSP
      ```

    **构建 aDSP**

    **所需工具**

    * 编译器版本：Hexagon 8.2.05
    * Python 版本：Python 2.7.18
    * libffi6 软件包

    **构建步骤**

    * Nanopb 集成（一次性设置）：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/ADSP.VT.5.2.c6/adsp_proc/ssc_api
      curl https://jpa.kapsi.fi/nanopb/download/nanopb-0.3.9.5-linux-x86.tar.gz -o nanopb-0.3.9.5-linux-x86.tar.gz
      cd <firmware-root>/<distro-clone-directory>/ADSP.VT.5.2.c6/adsp_proc/
      python ssc_api/build/config_nanopb_dependency.py -f nanopb-0.3.9.5-linux-x86
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/ADSP.VT.5.2.c6
      ```

    * 清理构建：
      ```bash theme={null}
      python adsp_proc/build/build.py -c sm6150 -o clean -f ADSP
      ```

    * 构建镜像：
      ```bash theme={null}
      python adsp_proc/build/build.py -c sm6150 -o all -f ADSP
      ```

    **构建 AOP**

    **所需工具**

    * 编译器版本：LLVM 3.9.3
    * Python 版本：Python 2.7.18

    **构建步骤**

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/AOP.HO.3.6.2/aop_proc/build/
      ```

    * 清理构建：
      ```bash theme={null}
      ./build_TalosAU.sh -c
      ```

    * 构建镜像：
      ```bash theme={null}
      ./build_TalosAU.sh
      ```

    **构建 Boot**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 14.0.4
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/14.0.4/
      ```
          <Note>
            为避免构建错误，请确保命令末尾有一个 /
          </Note>

    * Python 版本：Python 3.10

    **构建步骤**

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/BOOT.MXF.1.0.c1/
      ```

    * 安装依赖项：
      ```bash theme={null}
      python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
      pip install json-schema-for-humans
      ```

    * 清理构建：
      ```bash theme={null}
      python -u boot_images/boot_tools/buildex.py -t talos,QcomToolsPkg -v LAA -r RELEASE --build_flags=cleanall
      ```

    * 构建镜像：

      ```bash theme={null}
      python -u boot_images/boot_tools/buildex.py -t talos,QcomToolsPkg -v LAA -r RELEASE
      ```

          <Note>
            对于调试（debug）变体构建，请将 `RELEASE` 替换为 `DEBUG`。
          </Note>

    **构建 TrustZone**

    **所需工具**

    * 编译器版本：LLVM 16.0.7
    * Python 版本：Python 3.10

    **构建步骤**

    * 安装 LLVM：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.29.1/trustzone_images/build/ms/
      vi build_config_deploy_talos.xml
      # Edit all the occurrences of /pkg/qct/software/llvm/release/arm/16.0.7/ to <firmware-root>/llvm/16.0.7/
      ```
    * 清理构建：
      ```bash theme={null}
      python build_all.py -b TZ.XF.5.0 CHIPSET=talos --cfg=build_config_deploy_talos.xml --clean
      ```
    * 构建镜像：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.29.1/trustzone_images/build/ms/
      python build_all.py -b TZ.XF.5.0 CHIPSET=talos --cfg=build_config_deploy_talos.xml
      ```

    **BTFM 固件**

    Qualcomm 以二进制形式发布 BTFM 固件，您无需编译
    该构建。

    **WLAN 固件**

    Qualcomm 以二进制形式发布 WLAN 固件，您无需编译
    该构建。

    **生成固件预构建产物（引导关键和拆分固件二进制文件）**

    * 将您编译的各个组件组合成一个集成的固件
      二进制文件：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/QCS615.LE.2.0/common/build
      python build.py --imf
      ```

    * 如果在
      `<firmware-root>/<distro-clone-directory>/QCS615.LE.2.0/common/build/common/bin`
      目录中生成了以下 zip 文件，则表示固件预构建成功：
      * `QCS615_bootbinaries.zip`
      * `QCS615_dspso.zip`
      * `QCS615_fw.zip`
  </Tab>

  <Tab title="IQ-X7181">
    **先决条件**

    * 确保当前使用的 shell 是 `bash`：

      ```bash theme={null}
      echo $0
      ```

      该命令的预期输出应为 `bash`。如果不是，请进入
      bash shell。

      ```bash theme={null}
      bash
      ```

    * 使用以下命令安装 libffi6 软件包。QAIC 编译器需要该软件包，
      它用于从 IDL 文件生成头文件和
      源文件。
      ```bash theme={null}
      curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
      sudo dpkg -i libffi6_3.2.1-8_amd64.deb
      ```

    * 安装用于 AOP、Qualcomm<sup>®</sup> Trusted Execution Environment
      (TEE) 和 boot 编译的 LLVM：
      ```bash theme={null}
      cd <firmware-root>
      mkdir llvm

      # Sign in to qsc-cli and activate the license
      qsc-cli login
      qsc-cli tool activate-license --name sdllvm_arm

      # LLVM requirement for aDSP is 14.0.1
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.1 --path <firmware-root>/llvm/14.0.1
      chmod -R 777 <firmware-root>/llvm/14.0.1

      # LLVM requirement for the AOP is 14.0.0
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.0 --path <firmware-root>/llvm/14.0.0
      chmod -R 777 <firmware-root>/llvm/14.0.0

      # LLVM requirement for BOOT compilation is 16.0.2
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.0 --path <firmware-root>/llvm/16.0.2
      chmod -R 777 <firmware-root>/llvm/16.0.2

      # LLVM requirement for BOOT_UEFI and Qualcomm TEE (TZ_XF) compilation is 18.0.1
      qsc-cli tool install --name sdllvm_arm --required-version 18.0.1 --path <firmware-root>/llvm/18.0.1
      chmod -R 777 <firmware-root>/llvm/18.0.1
      ```

    * 导出 `SECTOOLS` 变量并编译固件构建
      （`<firmware-root>/<distro-clone-directory>` 是顶层目录）：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/Hamoa_IOT.LE.2.0/common/sectoolsv2/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/Hamoa_IOT.LE.2.0/common/sectoolsv2/ext/Linux
      ```

    * 安装并设置 Qualcomm<sup>®</sup> Hexagon<sup>™</sup> 处理器。将
      环境变量 HEXAGON\_ROOT 设置为 Hexagon SDK 的
      安装路径。若要在使用
      `qsc-cli` 时更改安装路径，请参阅[更改 Hexagon 工具安装路径](/zh/Key-Documents/Firmware-Guide/how-to-change-hexagon-install-path)。
      ```bash theme={null}
      qsc-cli tool extract --name hexagon8.4 --required-version 8.6.06
      export HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```

    **构建 aDSP**

    **所需工具**

    * 编译器版本：Hexagon 8.6.06
    * Python 版本：Python 3.8.2
    * libffi6 软件包

    **构建步骤**

    * 检查 Hexagon 目录：
      ```bash theme={null}
      export HEXAGON_ROOT=$HOME/QUalcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```
    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```
    * Nanopb 集成（一次性设置）：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/ADSP.HT.5.9/adsp_proc/qsh_api
      curl https://jpa.kapsi.fi/nanopb/download/nanopb-0.3.9.5-linux-x86.tar.gz -o nanopb-0.3.9.5-linux-x86.tar.gz
      cd <firmware-root>/<distro-clone-directory>/ADSP.HT.5.9/adsp_proc/
      python qsh_api/build/config_nanopb_dependency.py -f nanopb-0.3.9.5-linux-x86
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/ADSP.HT.5.9/adsp_proc/build/ms
      ```
    * 清理构建：
      ```bash theme={null}
      python3 ./build_variant.py hamoa.adsp.prod --clean && python3 ./build_variant.py hamoa.adsp.charger --clean
      ```
    * 构建镜像：
      ```bash theme={null}
      python3 ./build_variant.py hamoa.adsp.prod && python3 ./build_variant.py hamoa.adsp.charger
      ```

    **构建 cDSP**

    **所需工具**

    * 编译器版本：Hexagon 8.6.06
    * Python 版本：Python 3.8.2
    * libffi6 软件包

    **构建步骤**

    * 检查 Hexagon 目录：
      ```bash theme={null}
      export HEXAGON_ROOT=$HOME/QUalcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```
    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/CDSP.HT.2.9.c1/cdsp_proc/build/ms
      ```
    * 清理构建：
      ```bash theme={null}
      python3 ./build_variant.py hamoa.cdsp.prod --clean
      ```
    * 构建镜像：
      ```bash theme={null}
      python3 ./build_variant.py hamoa.cdsp.prod
      ```

    **构建 Boot**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 16.0.2
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/16.0.2/
      ```
    * Python 版本：Python 3.10.6
    * libffi6 软件包

    **构建步骤**

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/BOOT.MXF.2.4.2/
      ```
    * 安装依赖项：
      ```bash theme={null}
      python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
      pip install json-schema-for-humans
      ```
    * 清理构建：
      ```bash theme={null}
      python3 boot_images/boot_tools/buildex.py -t Hamoa,QcomToolsPkg -r RELEASE -v LE --build_flags=cleanall
      ```
    * 构建镜像：

      ```bash theme={null}
      python3 boot_images/boot_tools/buildex.py -t Hamoa,QcomToolsPkg -r RELEASE -v LE
      ```

          <Note>
            对于 debug 变体构建，请将 `RELEASE` 替换为 `DEBUG`。
          </Note>

    **构建 BOOT\_UEFI**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 18.0.1
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/18.0.1/
      ```
    * Python 版本：Python 3.10.6
    * libffi6 软件包

    **构建步骤**

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/BOOT.MXF_UEFI.2.5/
      ```
    * 安装依赖项：
      ```bash theme={null}
      python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
      pip install json-schema-for-humans
      ```
    * 清理构建：
      ```bash theme={null}
      python3 boot_images/boot_tools/buildex.py -t Hamoa,QcomToolsPkg -r RELEASE -v LE --build_flags=cleanall
      ```
    * 构建镜像：

      ```bash theme={null}
      python3 boot_images/boot_tools/buildex.py -t Hamoa,QcomToolsPkg -r RELEASE -v LE
      ```

          <Note>
            对于 debug 变体构建，请将 `RELEASE` 替换为 `DEBUG`。
          </Note>

    **构建 Qualcomm TEE 固件**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 18.0.1
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/18.0.1/
      ```
    * Python 版本：Python 3.10

    **构建步骤**

    * 导出 `SECTOOLS` 变量：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/Hamoa_IOT.LE.2.0/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/Hamoa_IOT.LE.2.0/ext/Linux
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.0/trustzone_images/build/ms
      ```
    * 清理构建：
      ```bash theme={null}
      python3 build_all.py -b TZ.XF.5.0 CHIPSET=hamoa --clean
      ```
    * 构建镜像：
      ```bash theme={null}
      python3 build_all.py -b TZ.XF.5.0 CHIPSET=hamoa
      ```

    **构建 AOP 固件**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 14.0.0
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/14.0.0/
      ```
    * Python 版本：Python 3.10

    **构建步骤**

    * 导出 `SECTOOLS` 变量：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/Hamoa_IOT.LE.2.0/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/Hamoa_IOT.LE.2.0/ext/Linux
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/AOP.HO.5.2/
      ```
    * 构建镜像：
      ```bash theme={null}
      ./aop_proc/build/build_hamoa.sh
      ```

    **CPUCP 固件**

    Qualcomm 以二进制形式发布 CPUCP 固件，您无需编译
    该构建。

    **BTFM 固件**

    Qualcomm 以二进制形式发布 BTFM 固件，您无需编译
    该构建。

    **WLAN 固件**

    Qualcomm 以二进制形式发布 WLAN 固件，您无需编译
    该构建。

    **生成固件预构建产物（boot-critical 和 split-firmware 二进制文件）**

    * 使用您编译的各个组件创建一个集成的固件
      二进制文件：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/Hamoa_IOT.LE.2.0/common/build
      python build.py --imf
      ```

    * 如果在 `<firmware-root>/<distro-clone-directory>/Hamoa_IOT.LE.2.0/common/build/ufs/bin`
      目录中生成了以下 zip 文件，则表明固件预构建
      成功：
      * `HAMOA_bootbinaries.zip`
      * `HAMOA_fw.zip`
  </Tab>

  <Tab title="IQ-X5121">
    **先决条件**

    * 确保当前使用的 shell 是 `bash`：

      ```bash theme={null}
      echo $0
      ```

      该命令的预期输出应为 `bash`。如果不是，请进入
      bash shell。

      ```bash theme={null}
      bash
      ```

    * 使用以下命令安装 libffi6 软件包。QAIC 编译器需要该软件包，
      它用于从 IDL 文件生成头文件和
      源文件。
      ```bash theme={null}
      curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
      sudo dpkg -i libffi6_3.2.1-8_amd64.deb
      ```

    * 安装用于 AOP、Qualcomm<sup>®</sup> Trusted Execution Environment
      (TEE) 和 boot 编译的 LLVM：
      ```bash theme={null}
      cd <firmware-root>
      mkdir llvm

      # Sign in to qsc-cli and activate the license
      qsc-cli login
      qsc-cli tool activate-license --name sdllvm_arm

      # LLVM requirement for aDSP is 14.0.1
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.1 --path <firmware-root>/llvm/14.0.1
      chmod -R 777 <firmware-root>/llvm/14.0.1

      # LLVM requirement for the AOP is 14.0.0
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.0 --path <firmware-root>/llvm/14.0.0
      chmod -R 777 <firmware-root>/llvm/14.0.0

      # LLVM requirement for BOOT compilation is 16.0.2
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.0 --path <firmware-root>/llvm/16.0.2
      chmod -R 777 <firmware-root>/llvm/16.0.2

      # LLVM requirement for BOOT_UEFI and Qualcomm TEE (TZ_XF) compilation is 18.0.1
      qsc-cli tool install --name sdllvm_arm --required-version 18.0.1 --path <firmware-root>/llvm/18.0.1
      chmod -R 777 <firmware-root>/llvm/18.0.1
      ```

    * 导出 `SECTOOLS` 变量并编译固件构建
      （`<firmware-root>/<distro-clone-directory>` 是顶层目录）：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/Purwa_IOT.LE.2.0/common/sectoolsv2/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/Purwa_IOT.LE.2.0/common/sectoolsv2/ext/Linux
      ```

    * 安装并设置 Qualcomm<sup>®</sup> Hexagon<sup>™</sup> 处理器。将
      环境变量 HEXAGON\_ROOT 设置为 Hexagon SDK 的
      安装路径。若要在使用
      `qsc-cli` 时更改安装路径，请参阅[更改 Hexagon 工具安装路径](/zh/Key-Documents/Firmware-Guide/how-to-change-hexagon-install-path)。
      ```bash theme={null}
      qsc-cli tool extract --name hexagon8.4 --required-version 8.6.06
      export HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```

    **构建 aDSP**

    **所需工具**

    * 编译器版本：Hexagon 8.6.06
    * Python 版本：Python 3.8.2
    * libffi6 软件包

    **构建步骤**

    * 检查 Hexagon 目录：
      ```bash theme={null}
      export HEXAGON_ROOT=$HOME/QUalcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```
    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```
    * Nanopb 集成（一次性设置）：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/ADSP.HT.5.9/adsp_proc/qsh_api
      curl https://jpa.kapsi.fi/nanopb/download/nanopb-0.3.9.5-linux-x86.tar.gz -o nanopb-0.3.9.5-linux-x86.tar.gz
      cd <firmware-root>/<distro-clone-directory>/ADSP.HT.5.9/adsp_proc/
      python qsh_api/build/config_nanopb_dependency.py -f nanopb-0.3.9.5-linux-x86
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/ADSP.HT.5.9/adsp_proc/build/ms
      ```
    * 清理构建：
      ```bash theme={null}
      python3 ./build_variant.py hamoa.adsp.prod --clean && python3 ./build_variant.py hamoa.adsp.charger --clean
      ```
    * 构建镜像：
      ```bash theme={null}
      python3 ./build_variant.py hamoa.adsp.prod && python3 ./build_variant.py hamoa.adsp.charger
      ```

    **构建 cDSP**

    **所需工具**

    * 编译器版本：Hexagon 8.6.06
    * Python 版本：Python 3.8.2
    * libffi6 软件包

    **构建步骤**

    * 检查 Hexagon 目录：
      ```bash theme={null}
      export HEXAGON_ROOT=$HOME/QUalcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```
    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/CDSP.HT.2.9.c1/cdsp_proc/build/ms
      ```
    * 清理构建：
      ```bash theme={null}
      python3 ./build_variant.py hamoa.cdsp.prod --clean
      ```
    * 构建镜像：
      ```bash theme={null}
      python3 ./build_variant.py hamoa.cdsp.prod
      ```

    **构建 Boot**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 16.0.2
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/16.0.2/
      ```
    * Python 版本：Python 3.10.6
    * libffi6 软件包

    **构建步骤**

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/BOOT.MXF.2.4.2/
      ```
    * 安装依赖项：
      ```bash theme={null}
      python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
      pip install json-schema-for-humans
      ```
    * 清理构建：
      ```bash theme={null}
      python3 boot_images/boot_tools/buildex.py -t Hamoa,QcomToolsPkg -r RELEASE -v LE --build_flags=cleanall
      ```
    * 构建镜像：

      ```bash theme={null}
      python3 boot_images/boot_tools/buildex.py -t Hamoa,QcomToolsPkg -r RELEASE -v LE
      ```

          <Note>
            对于 debug 变体构建，请将 `RELEASE` 替换为 `DEBUG`。
          </Note>

    **构建 BOOT\_UEFI**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 18.0.1
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/18.0.1/
      ```
    * Python 版本：Python 3.10.6
    * libffi6 软件包

    **构建步骤**

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/BOOT.MXF_UEFI.2.5/
      ```
    * 安装依赖项：
      ```bash theme={null}
      python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
      pip install json-schema-for-humans
      ```
    * 清理构建：
      ```bash theme={null}
      python3 boot_images/boot_tools/buildex.py -t Hamoa,QcomToolsPkg -r RELEASE -v LE --build_flags=cleanall
      ```
    * 构建镜像：

      ```bash theme={null}
      python3 boot_images/boot_tools/buildex.py -t Hamoa,QcomToolsPkg -r RELEASE -v LE
      ```

          <Note>
            对于 debug 变体构建，请将 `RELEASE` 替换为 `DEBUG`。
          </Note>

    **构建 Qualcomm TEE 固件**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 18.0.1
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/18.0.1/
      ```
    * Python 版本：Python 3.10

    **构建步骤**

    * 导出 `SECTOOLS` 变量：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/Purwa.LE.2.0/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/Purwa.LE.2.0/ext/Linux
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.0/trustzone_images/build/ms
      ```
    * 清理构建：
      ```bash theme={null}
      python3 build_all.py -b TZ.XF.5.0 CHIPSET=hamoa --clean
      ```
    * 构建镜像：
      ```bash theme={null}
      python3 build_all.py -b TZ.XF.5.0 CHIPSET=hamoa
      ```

    **构建 AOP 固件**

    **所需工具**

    * 编译器版本：LLVM 版本必须更新为 14.0.0
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/14.0.0/
      ```
    * Python 版本：Python 3.10

    **构建步骤**

    * 导出 `SECTOOLS` 变量：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/Purwa.LE.2.0/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/Purwa.LE.2.0/ext/Linux
      ```
    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/AOP.HO.5.2/
      ```
    * 构建镜像：
      ```bash theme={null}
      ./aop_proc/build/build_hamoa.sh
      ```

    **CPUCP 固件**

    Qualcomm 以二进制形式发布 CPUCP 固件，您无需编译
    该构建。

    **BTFM 固件**

    Qualcomm 以二进制形式发布 BTFM 固件，您无需编译
    该构建。

    **WLAN 固件**

    Qualcomm 以二进制形式发布 WLAN 固件，您无需编译
    该构建。

    **生成固件预构建产物（boot-critical 和 split-firmware 二进制文件）**

    * 使用您编译的各个组件创建一个集成的固件
      二进制文件：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/Purwa.LE.2.0/common/build
      python build.py --imf
      ```

    * 如果在 `<firmware-root>/<distro-clone-directory>/Purwa.LE.2.0/common/build/ufs/bin`
      目录中生成了以下 zip 文件，则表明固件预构建
      成功：
      * `HAMOA_bootbinaries.zip`
      * `HAMOA_fw.zip`
  </Tab>

  <Tab title="CQ-2390/IQ-2390">
    **前置条件**

    * 确保当前 shell 为 `bash`：

      ```bash theme={null}
      echo $0
      ```

      命令的预期输出应为 `bash`。如果不是，请进入 bash shell。

      ```bash theme={null}
      bash
      ```

    * 使用以下命令安装 libffi6 软件包。QAIC 编译器需要此软件包，用于从 IDL
      文件生成头文件和源文件。
      ```bash theme={null}
      curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
      sudo dpkg -i libffi6_3.2.1-8_amd64.deb
      ```

    * 为 RPM、Qualcomm<sup>®</sup> 可信执行环境 (TEE) 和 boot 编译安装 LLVM：
      ```bash theme={null}
      cd <firmware-root>
      mkdir llvm

      # 登录 qsc-cli 并激活许可证
      qsc-cli login
      qsc-cli tool activate-license --name sdllvm_arm

      # BOOT.MXF.1.0.c1 所需的 LLVM
      qsc-cli tool install --name sdllvm_arm --required-version 14.0.4 --path <firmware-root>/llvm/14.0.4
      chmod -R 777 <firmware-root>/llvm/14.0.4

      # BOOT.XF.4.1.4 所需的 LLVM
      qsc-cli tool install --name sdllvm_arm --required-version 4.0.2 --path <firmware-root>/llvm/4.0.2
      chmod -R 777 <firmware-root>/llvm/4.0.2

      # RPM 所需的 LLVM
      qsc-cli tool install --name sdllvm_arm --required-version 3.9.2 --path <firmware-root>/llvm/3.9.2
      chmod -R 777 <firmware-root>/llvm/3.9.2

      # Qualcomm TEE 编译所需的 LLVM
      qsc-cli tool install --name sdllvm_arm --required-version 18.0.1 --path <firmware-root>/llvm/18.0.1
      chmod -R 777 <firmware-root>/llvm/18.0.1
      ```

    * 导出 `SECTOOLS` 变量并编译固件构建
      （`<firmware-root>/<distro-clone-directory>` 是顶级目录）：
      ```bash theme={null}
      export SECTOOLS=<firmware-root>/<distro-clone-directory>/CQ2390.LE.1.0/common/sectoolsv2/ext/Linux/sectools
      export SECTOOLS_DIR=<firmware-root>/<distro-clone-directory>/CQ2390.LE.1.0/common/sectoolsv2/ext/Linux
      ```

    * 安装并设置 Qualcomm<sup>®</sup> Hexagon<sup>™</sup> 处理器。将
      环境变量 `HEXAGON_ROOT` 设置为 Hexagon SDK 的安装路径。要在使用 `qsc-cli`
      时更改安装路径，请参阅
      [更改 Hexagon 工具安装路径](/zh/Key-Documents/Firmware-Guide/how-to-change-hexagon-install-path)。
      ```bash theme={null}
      qsc-cli tool extract --name hexagon8.6 --required-version 8.6.04.1
      qsc-cli tool extract --name hexagon8.7 --required-version 8.7.11.1
      qsc-cli tool extract --name hexagon8.2 --required-version 8.2.05.1
      export HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools
      echo $HEXAGON_ROOT
      ```

    **构建 Boot MXF**

    **所需工具**

    * 编译器版本：LLVM 14.0.4
    * Python 版本：Python 3.10.6
    * libffi6 软件包

    **构建步骤**

    * 设置 LLVM 环境变量：
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/14.0.4/
      ```

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/BOOT.MXF.1.0.c1/
      ```

    * 清理构建：
      ```bash theme={null}
      python boot_images/boot_tools/buildex.py -t Shikra -r RELEASE -v LE --build_flags=cleanall
      ```

    * 构建镜像：
      ```bash theme={null}
      python boot_images/boot_tools/buildex.py -t Shikra -r RELEASE -v LE
      ```

    **构建 Boot XF**

    **所需工具**

    * 编译器版本：LLVM 4.0.2
    * Python 版本：Python 3.10.6

    **构建步骤**

    * 设置 LLVM 环境变量：
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/4.0.2/
      ```

    * 安装设备树编译器：
      ```bash theme={null}
      sudo apt-get install device-tree-compiler
      export DTC=/usr/bin
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/BOOT.XF.4.1.4/
      ```

    * 清理构建：
      ```bash theme={null}
      python3 -u boot_images/QcomPkg/buildex.py --variant LE -t ShikraPkg,QcomToolsPkg --build_flags=cleanall
      ```

    * 构建镜像：
      ```bash theme={null}
      python3 -u boot_images/QcomPkg/buildex.py --variant LE -t ShikraPkg,QcomToolsPkg
      ```

    **构建 RPM**

    **所需工具**

    * 编译器版本：LLVM 3.9.2
    * Python 版本：Python 3.10.6

    **构建步骤**

    * 设置 LLVM 环境变量：
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/3.9.2/
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/RPM.BF.1.16/rpm_proc/build
      ```

    * 清理构建：
      ```bash theme={null}
      ./build_shikra.sh --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      ./build_shikra.sh
      ```

    **构建 Qualcomm TEE 固件**

    **所需工具**

    * 编译器版本：LLVM 18.0.1
    * Python 版本：Python 3.10.6

    **构建步骤**

    * 设置 LLVM 环境变量：
      ```bash theme={null}
      export LLVM=<firmware-root>/llvm/18.0.1/
      ```

    * 进入以下目录：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/TZ.XF.5.36/trustzone_images/build/ms
      ```

    * 清理构建：
      ```bash theme={null}
      python build_all.py -b TZ.XF.5.0 CHIPSET=shikra --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      python build_all.py -b TZ.XF.5.0 CHIPSET=shikra
      ```

    **构建 LPAICP**

    **所需工具**

    * Python 版本：Python 3.12.10

    **构建步骤**

    * 进入以下目录并激活 Python 3.12.10：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/LPAICP.FW.1.2/wasp_proc/build/ms
      pyenv local 3.12.10
      python --version
      ```

    * 安装所需的系统软件包：
      ```bash theme={null}
      sudo apt-get update
      sudo apt-get install cmake ninja-build
      ```

    * 安装所需的 Python 软件包：
      ```bash theme={null}
      pip install west
      pip install jsonschema
      pip install pyelftools
      pip install pyfatfs
      python -m pip install "setuptools<=68"
      ```

    * 清理构建：
      ```bash theme={null}
      python ./build_variant.py shikra.lpaicp.prod --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      python ./build_variant.py shikra.lpaicp.prod
      ```

    **构建 cDSP**

    **所需工具**

    * 编译器版本：Hexagon 8.6.04 和 Hexagon 8.2.05
    * Python 版本：Python 3.12.7 或更高版本

    **构建步骤**

    * 进入以下目录并激活 Python 3.12.10：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/CDSP.VT.2.4.3/cdsp_proc/build/ms
      pyenv local 3.12.10
      ```

    * 清理构建：
      ```bash theme={null}
      python ./build_variant.py shikra.cdsp.prod --clean
      ```

    * 构建镜像：
      ```bash theme={null}
      python ./build_variant.py shikra.cdsp.prod
      ```

    **MPSS 固件**

    Qualcomm 将 MPSS 固件作为二进制文件发布，无需自行编译。

    **BTFM 固件**

    Qualcomm 将 BTFM 固件作为二进制文件发布，无需自行编译。

    **WLAN 固件**

    Qualcomm 将 WLAN 固件作为二进制文件发布，无需自行编译。

    **生成固件预构建包**

    * 使用已编译的各个组件创建集成固件二进制文件：
      ```bash theme={null}
      cd <firmware-root>/<distro-clone-directory>/CQ2390.LE.1.0/common/build
      python build.py --imf
      ```

    * 如果在 `<firmware-root>/<distro-clone-directory>/CQ2390.LE.1.0/common/build/bin`
      目录下生成了以下 zip 文件，则表示固件预构建成功：
      * `Shikra_bootbinaries.zip`
      * `Shikra_fw.zip`
  </Tab>
</Tabs>

## 构建 BSP 镜像

本节介绍如何使用 meta-qcom-extras 层将固件二进制文件和其他源代码
组件集成到完整的 BSP 镜像中。BSP
镜像构建将上一步中编译好的固件与
Yocto 层栈相结合，生成一个包含所有必需
二进制文件的可刷写镜像。

* 下载 Qualcomm 的 Yocto 层 `meta-qcom-extras`。有关最新的
  `<meta-qcom-extras-release-tag>`，请参阅[配置参数](#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
  ```

**层设置**

* 导出 `NETRC_FILE` 参数，以确保 `~/.netrc` 凭据在 `kas` 环境中
  可见：
  ```bash theme={null}
  export NETRC_FILE=~/.netrc
  ```

* 设置该层的对外许可证及其校验和。层中的每个 recipe 都需要
  `CUST_LICENSE` 和 `CUST_LIC_CHKSUM`。
  * 客户必须在 recipes 中指定合适的对外许可证，才能构建
    专有源代码。
  * 客户应咨询自己的法务团队，以获取有关对外许可决策的指导。
  * 所选的对外许可证必须与 PKLA 兼容。
  ```bash theme={null}
  export CUST_LICENSE="<CUST_LICENSE>"
  export CUST_LIC_CHKSUM="<CUST_LIC_CHKSUM>"
  ```

* 以下值与源代码仓库中已存在的占位 LICENSE 文件相匹配。可将其用于
  内部构建和评估，而无需替换任何许可证文件。
  **请勿在生产构建中使用这些值。对于任何部署，请定义您自己的许可证
  值。**

  | 变量                | 值                                  |
  | ----------------- | ---------------------------------- |
  | `CUST_LICENSE`    | `LICENSE.qcom-2`                   |
  | `CUST_LIC_CHKSUM` | `165287851294f2fb8ac8cbc5e24b02b0` |

* 在构建之前更新源代码仓库中的许可证文件。
  `meta-qcom-extras` 使用的所有源代码默认都包含一个占位 LICENSE
  文件。Recipes 会在构建时根据此文件校验 `CUST_LICENSE`，因此必须
  将其替换为您选择的对外许可证。

  上游仓库无法直接修改。请将每个仓库镜像到您自己拥有的本地或远程
  服务器上，替换占位 LICENSE 文件，然后更新受影响 recipes 中的
  `SRC_URI` 变量，以指向新的 URI。

**固件设置**

* 将 `FWZIP_PATH` 设置为包含固件 ZIP 文件的目录，以便在构建中包含
  本地编译的固件 zip 路径。
  ```bash theme={null}
  export FWZIP_PATH="<FWZIP_PATH>"
  ```

* 设置调制解调器专用许可证及其校验和。仅在构建调制解调器固件时才需要
  `CUST_MDM_LICENSE` 和 `CUST_MDM_LIC_CHKSUM`。
  ```bash theme={null}
  export CUST_MDM_LICENSE="<CUST_MDM_LICENSE>"
  export CUST_MDM_LIC_CHKSUM="<CUST_MDM_LIC_CHKSUM>"
  ```

* 以下值与源代码仓库中已存在的占位 LICENSE 文件相匹配。可将其用于
  内部构建和评估，而无需替换任何许可证文件。
  **请勿在生产构建中使用这些值。对于任何部署，请定义您自己的许可证
  值。**

  | 变量                    | 值                                  |
  | --------------------- | ---------------------------------- |
  | `CUST_MDM_LICENSE`    | `Modemreadme.txt`                  |
  | `CUST_MDM_LIC_CHKSUM` | `bcd23be15c15909fe9de30ec32af0f89` |

* `firmware-qcom-selective.inc` 在解析时应用以下规则：

  * 如果未设置 `FWZIP_PATH` 或 `FWZIP_NAME`，则该 recipe 将被静默跳过。
  * 如果两者均已设置但 ZIP 文件缺失，构建将因致命错误而失败。
  * 如果没有 `PREFERRED_RPROVIDER` 指向该 recipe，则该 recipe 将被静默跳过。

* 编辑 `meta-qcom-extras/ci/providers.yml`，添加所需的 `FWZIP_NAME`
  赋值，以在镜像编译期间启用 recipe。

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

    ```yaml IQ-X7181-EVK theme={null}
    firmware-hamoa-adsp: |
      FWZIP_NAME:pn-firmware-hamoa-adsp = "IQX7181_adsp"
      PREFERRED_RPROVIDER_linux-firmware-qcom-x1e80100-audio = "firmware-hamoa-adsp"
      PREFERRED_RPROVIDER_hexagon-dsp-binaries-qcom-hamoa-iot-evk-adsp = "firmware-hamoa-adsp"
    firmware-hamoa-cdsp: |
      FWZIP_NAME:pn-firmware-hamoa-cdsp = "IQX7181_cdsp"
      PREFERRED_RPROVIDER_linux-firmware-qcom-x1e80100-compute = "firmware-hamoa-cdsp"
      PREFERRED_RPROVIDER_hexagon-dsp-binaries-qcom-hamoa-iot-evk-cdsp = "firmware-hamoa-cdsp"
    firmware-hamoa-purwa-bootbins: |
      FWZIP_NAME:pn-firmware-hamoa-purwa-bootbins = "HAMOA_bootbinaries"
      PREFERRED_PROVIDER_firmware-qcom-boot-iq-x7181 = "firmware-hamoa-purwa-bootbins"
    ```

    ```yaml IQ-X5121-EVK theme={null}
    firmware-purwa-adsp: |
      FWZIP_NAME:pn-firmware-purwa-adsp = "IQX5121_adsp"
      PREFERRED_RPROVIDER_linux-firmware-qcom-x1p42100-audio = "firmware-purwa-adsp"
      PREFERRED_RPROVIDER_hexagon-dsp-binaries-qcom-purwa-iot-evk-adsp = "firmware-purwa-adsp"
    firmware-purwa-cdsp: |
      FWZIP_NAME:pn-firmware-purwa-cdsp = "IQX5121_cdsp"
      PREFERRED_RPROVIDER_linux-firmware-qcom-x1p42100-compute = "firmware-purwa-cdsp"
      PREFERRED_RPROVIDER_hexagon-dsp-binaries-qcom-purwa-iot-evk-cdsp = "firmware-purwa-cdsp"
    firmware-hamoa-purwa-bootbins: |
      FWZIP_NAME:pn-firmware-hamoa-purwa-bootbins = "HAMOA_bootbinaries"
      PREFERRED_PROVIDER_firmware-qcom-boot-iq-x7181 = "firmware-hamoa-purwa-bootbins"
    ```

    ```yaml IQ2390 / CQ2390 theme={null}
    firmware-shikra-cdsp: |
      PREFERRED_RPROVIDER_linux-firmware-qcom-shikra-compute:shikra-evk = "firmware-shikra-cdsp"
      PREFERRED_RPROVIDER_hexagon-dsp-binaries-qcom-shikra-cqm-evk-cdsp:shikra-evk = "firmware-shikra-cdsp"
      PREFERRED_RPROVIDER_hexagon-dsp-binaries-qcom-shikra-cqs-evk-cdsp:shikra-evk = "firmware-shikra-cdsp"
      PREFERRED_RPROVIDER_hexagon-dsp-binaries-qcom-shikra-iqs-evk-cdsp:shikra-evk = "firmware-shikra-cdsp"
    firmware-shikra-lpaicp: |
      PREFERRED_RPROVIDER_linux-firmware-qcom-shikra-audio:shikra-evk = "firmware-shikra-lpaicp"
    firmware-shikra-bootbins: |
      PREFERRED_PROVIDER_firmware-qcom-boot-shikra:shikra-evk = "firmware-shikra-bootbins"
    ```
  </CodeGroup>

* 在构建之前更新固件 ZIP 中的许可证文件。
  `meta-qcom-extras` 使用的所有 ZIP 默认都包含一个占位 LICENSE
  文件。Recipes 会在构建时根据此文件校验 `CUST_LICENSE`，因此必须
  将其替换为您选择的对外许可证。

**构建镜像**

* 运行 setup 脚本，将这些参数应用到构建环境中。

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

* 使用 `kas` 构建软件镜像。您可以根据机器和发行版
  的组合来定义构建目标。

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

    ```bash IQ2390 / CQ2390 theme={null}
    kas build meta-qcom-extras/ci/shikra-evk.yml:meta-qcom-extras/ci/qcom-distro.yml:meta-qcom-extras/ci/performance.yml
    ```
  </CodeGroup>

## 相关主题

* [如何更改 Hexagon 的默认安装路径？](./how-to-change-hexagon-install-path)
