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

# 使用 Yocto 构建 Qualcomm Linux

本页面适用于希望使用 Yocto 项目从零开始构建 Qualcomm Linux 的用户。它介绍了构建所需的关键 Yocto 概念，并逐步讲解从配置到执行的整体工作流程。

## **主机系统要求**

* 配置
  * 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` 权限

## **主机设置**

以下说明适用于 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
  ```

## **kas 配置模型**

Qualcomm 使用 `kas` 工具同步和构建 Yocto 项目。`kas` 配置模型使用 YAML 文件来声明在构建中包含哪些层、机器和发行版。这些 YAML 文件位于 `meta-qcom/ci/` 目录中。

典型的 `kas` 构建命令组合了：

* 一个机器 YAML 文件（例如 `meta-qcom/ci/iq-9075-evk.yml`）
* 一个发行版 YAML 文件（例如 `meta-qcom/ci/qcom-distro.yml`）

```bash theme={null}
kas build meta-qcom/ci/<machine-name>.yml:meta-qcom/ci/<distro-name>.yml
```

## **选择 MACHINE 和 DISTRO**

下表列出了支持的 `MACHINE` 和 `DISTRO` 组合。在调用 `kas` 命令时请使用这些值。

| **MACHINE 配置**                                                                                                            | **支持的 DISTRO**                                                                                                          |
| ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| <ul><li>`iq-615-evk.conf`</li><li>`iq-8275-evk.conf`</li><li>`qcm6490-idp.conf`</li><li>`rb3gen2-core-kit.conf`</li></ul> | <ul><li>`qcom-distro`</li><li>`qcom-distro-catchall`</li><li>`qcom-distro-selinux`</li><li>`qcom-distro-sota`</li></ul> |
| <ul><li>`iq-9075-evk.conf`</li></ul>                                                                                      | <ul><li>`qcom-distro`</li><li>`qcom-distro-catchall`</li><li>`qcom-distro-selinux`</li><li>`qcom-distro-sota`</li></ul> |

## 配置参数

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

| 发布标签                  | 标识符     |
| --------------------- | ------- |
| meta-qcom-release-tag | qli-2.0 |

## **构建说明**

* 下载 Qualcomm 的 Yocto 层 `meta-qcom`。有关最新的 `<meta-qcom-release-tag>`，请参阅[配置参数](#configuration-parameters)。

  ```bash theme={null}
  git clone https://github.com/qualcomm-linux/meta-qcom -b <meta-qcom-release-tag>
  ```

- 使用 `kas` 构建软件镜像。您可以基于机器和发行版组合定义构建目标。

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

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

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

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

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

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

  <Note>
    在某些主机上，`https://git.yoctoproject.org/git/meta-virtualization` 可能会克隆失败。如果遇到这种情况，请配置 Git 将该 URL 自动重定向到可用的 URL：

    ```bash theme={null}
    git config --global url."https://git.yoctoproject.org/meta-virtualization".insteadOf \
        "https://git.yoctoproject.org/git/meta-virtualization"
    ```

    验证重定向已生效：

    ```bash theme={null}
    git config --global --get-regexp url
    ```

    导出 `GITCONFIG_FILE` 参数，以确保 `~/.gitconfig` 配置对 kas 环境可见

    ```bash theme={null}
    export GITCONFIG_FILE="~/.gitconfig"
    ```
  </Note>

* 构建会生成一个 tarball，其中包含执行一次完整全新刷写所需的所有相关文件，包括分区元数据、启动固件、ESP 分区和 rootfs。构建成功后，请检查构建产物中是否存在 qcomflash tarball。以下示例使用 `qcom-multimedia-proprietary-image` 作为镜像名称。

  <CodeGroup>
    ```bash IQ-9075-EVK theme={null}
    ls build/tmp/deploy/images/iq-9075-evk/qcom-multimedia-proprietary-image-iq-9075-evk.rootfs.qcomflash.tar.gz
    ```

    ```bash IQ-8275-EVK theme={null}
    ls build/tmp/deploy/images/iq-8275-evk/qcom-multimedia-proprietary-image-iq-8275-evk.rootfs.qcomflash.tar.gz
    ```

    ```bash IQ-615-EVK theme={null}
    ls build/tmp/deploy/images/iq-615-evk/qcom-multimedia-proprietary-image-iq-615-evk.rootfs.qcomflash.tar.gz
    ```

    ```bash QCS6490 theme={null}
    ls build/tmp/deploy/images/rb3gen2-core-kit/qcom-multimedia-proprietary-image-rb3gen2-core-kit.rootfs.qcomflash.tar.gz
    ```

    ```bash IQ-X7181-EVK theme={null}
    ls build/tmp/deploy/images/iq-x7181-evk/qcom-multimedia-proprietary-image-iq-x7181-evk.rootfs.qcomflash.tar.gz
    ```

    ```bash IQ-X5121-EVK theme={null}
    ls build/tmp/deploy/images/iq-x5121-evk/qcom-multimedia-proprietary-image-iq-x5121-evk.rootfs.qcomflash.tar.gz
    ```
  </CodeGroup>

## **相关主题**

* [如何构建 meta-qcom 的 mainline 变体](./how-to-build-meta-qcom-mainline)
* [如何在容器化环境中构建镜像？](./how-to-build-meta-qcom-container)
* [如何使用传统的 repo manifest 方法构建 meta-qcom](./how-to-build-repo-manifest)
* [如何使用传统的 meta-qcom-releases 方法构建 meta-qcom](./how-to-build-meta-qcom-releases)
* [如何在 meta-qcom 构建中启用调试配置](./how-to-build-enable-debug-conf)
* [如何为 Yocto 构建设置共享缓存](./how-to-setup-shared-yocto-cache)
* [如何为 Yocto BSP 构建配置存储类型](./how-to-configure-storage-type)
* [如何增加系统内存以避免 OOM 错误](./how-to-increase-system-memory)
* [如何使用 kas 执行常见任务](./how-to-perform-common-tasks)

## **后续步骤**

* 要将构建的镜像烧录到您的设备上，请参阅[烧录软件镜像](/zh/Key-Documents/Flash-Guide/flash-with-qdl)。
