# `meta-qcom-hwe`

该 `meta-qcom-hwe` 元数据层可在 [GitHub](https://github.com/qualcomm-linux/meta-qcom-hwe/tree/scarthgap) 上使用。它为启用 Qualcomm 设备提供了额外的软件支持。

Note

本指南中所称 QCM6490 和 QCS6490 硬件 SoC 可互换使用。`meta-qcom-hwe/conf/machine/` 目录中定义的 `qcs6490-rb3gen2-core-kit.conf` 和 `qcs6490-rb3gen2-vision-kit.conf` 机器配置文件支持 QCM6490、QCS6490 和 QCS5430 硬件 SoC。

## BitBake 类

> 
> 
> 有关 BitBake 类的介绍，请参阅 [Classes](https://github.com/qualcomm-linux/meta-qcom-hwe/tree/scarthgap/classes)。
> 
> 
> 
> 
> 
> 
> | 文件 | 说明 |
> | --- | --- |
> | `classes/qprebuilt.bbclass` | 实现使用预编译软件包代替获取和编译源代码的逻辑。对于继承 `qprebuilt` 的任何配方，此类将会解压打包在 <cite>tar.gz</cite> 存档中的二进制文件，并使用 BitBake 任务提供这些二进制文件以供打包。 |
> | `classes/qmodule.bbclass` | 默认情况下，Qualcomm BSP 通过启用内核中的 `CONFIG_MODULE_SIG_FORCE` 强制签署内核模块。但是，某些树外模块可能未签名。为了避免模块加载问题，`qmodule.bbclass` 会检查所有提供内核模块的软件包，如果尚未签名，则对其进行签名。 |
> | `classes/image_types_ota_sdboot.bbclass` | 此 BitBake 类根据 OSTree 空中下载（OTA）升级系统的要求实现镜像创建。 |

## 机器配置

Qualcomm Linux 机器配置文件在 [GitHub](https://github.com/qualcomm-linux/meta-qcom-hwe/tree/scarthgap/conf/machine)。

位于 `meta-qcom-hwe/conf/machine/include` 目录的文件定义并设置所需的 BitBake 变量，这些变量会被 Qualcomm BSP 定义的机器配置通用。下表概述了这些文件。

| 文件 | 说明 |
| --- | --- |
| `meta-qcom-hwe/conf/machine/include/qcom-base.inc` | 该文件设置了 Qualcomm BSP 中定义的所有机器配置共享的 BitBake 变量。例如，`SOC_ARCH`，`PREFERRED_PROVIDER` 和 `IMAGE_FSTYPES`。 |
| `meta-qcom-hwe/conf/machine/include/qcom-qcs6490.inc` | 该文件将 `SOC_FAMILY` 变量设置为 `qcm6490`。这使得 Qualcomm Linux 配方能够使用 `qcm6490` OVERRIDE 来实现特定于 Qualcomm BSP 的更改。该文件还定义了所有基于 QCS6490 的 Qualcomm 开发套件共享的配置变量。 |
| `meta-qcom-hwe/conf/machine/include/qcom-qcs9100.inc` | 该文件将 `SOC_FAMILY` 变量设置为 `qcs9100`。这使得 Qualcomm Linux 配方能够使用 `qcs9100` OVERRIDE 来实现特定于 Qualcomm BSP 的更改。该文件还定义了所有基于 QCS9100 的 Qualcomm 开发套件共享的配置变量。 |
| `meta-qcom-hwe/conf/machine/include/qcom-qcs8300.inc` | 该文件将 `SOC_FAMILY` 变量设置为 `qcs8300`。这使得 Qualcomm Linux 配方能够使用 `qcs8300` OVERRIDE 来实现特定于 Qualcomm BSP 的更改。该文件还定义了所有基于 QCS8300 的 Qualcomm 开发套件共享的配置变量。 |
| `meta-qcom-hwe/conf/machine/include/qcom-qcs615.inc` | 该文件将 `SOC_FAMILY` 变量设置为 `qcs615`。这使得 Qualcomm Linux 配方能够使用 `qcs615` OVERRIDE 来实现特定于 Qualcomm BSP 的更改。该文件还定义了所有基于 QCS615 的 Qualcomm 开发套件共享的配置变量。 |

### 基于 QCS6490 的开发套件的机器配置文件

Note

对于 Qualcomm Linux 1.2 及其后续版本，必须使用下表列出的新机器配置文件。Qualcomm Linux 1.2 已替换了 Qualcomm Linux 1.1 之前的机器配置文件 `qcm6490.conf`。

| 配置文件 | 说明 |
| --- | --- |
| `conf/machine/qcm6490-idp.conf` | 该文件适用于 QCM6490 的集成开发平台（IDP）。 |
| `conf/machine/qcs6490-rb3gen2-core-kit.conf` | 该文件适用于搭载 QCS6490 SoC 的 Qualcomm Dragonwing^™^ RB3 Gen 2 核心开发套件。 |
| `conf/machine/qcs6490-rb3gen2-vision-kit.conf` | 该文件适用于搭载 QCS6490 SoC 的 Qualcomm Dragonwing^™^ RB3 Gen 2 机器视觉开发套件，其中包含低分辨率和高分辨率 CSI 摄像头。 |
| `conf/machine/qcs6490-rb3gen2-industrial-kit.conf` | 该文件适用于搭载 QCS6490 SoC 的 Qualcomm Dragonwing^™^ RB3 Gen 2 工业开发套件。 |

### 基于 IQ-9075 和 IQ-9100 的开发套件的机器配置文件

| 配置文件 | 说明 |
| --- | --- |
| `conf/machine/qcs9100-ride-sx.conf` | 该文件适用于搭载 IQ-9100 SoC 的 Qualcomm^®^ IQ-9 Beta 评估套件 (EVK)。 |
| `conf/machine/qcs9075-ride-sx.conf` | 该文件适用于搭载 IQ-9075 SoC 的 Qualcomm IQ-9 Beta EVK。 |
| `conf/machine/qcs9075-iq-9075-evk.conf` | 该文件适用于搭载 IQ-9075 SoC 的 Qualcomm Dragonwing^™^ IQ-9075 EVK。 |
| `conf/machine/qcs9075-iq-9075-evk-ifp.conf` | 该文件适用于搭载 IQ-9075 SoC 的 Dragonwing IQ-9075 EVK。 |

### 基于 IQ-8275 的开发套件的机器配置文件

| 配置文件 | 说明 |
| --- | --- |
| `conf/machine/qcs8300-ride-sx.conf` | 该文件适用于搭载 IQ-8300 SoC 的 Qualcomm^®^ IQ-8 Beta EVK。 |
| `qcs8275-iq-8275-evk.conf` | 该文件适用于搭载 IQ-8275 SoC 的 Qualcomm Dragonwing^™^ IQ-8275 EVK。 |
| `qcs8275-iq-8275-evk-ifp.conf` | 该文件适用于搭载 IQ-8275 SoC 的 Dragonwing^™^ IQ-8275 EVK。 |

### 基于 IQ-615 的开发套件的机器配置文件

| 配置文件 | 说明 |
| --- | --- |
| `conf/machine/qcs615-adp-air.conf` | 该文件适用于搭载 IQ-615 SoC 的 Qualcomm Dragonwing^™^ IQ-615 EVK。 |

### 在 `meta-qcom-hwe` 中使用 OVERRIDES

Qualcomm BSP 使用 BitBake OVERRIDES 定义了两种不同的编译 BSP 的方法。

元数据层在 `meta-qcom-hwe/conf/machine/include/qcom-base.inc` 文件中从 `QCOM_SELECTED_BSP` 衍生 `MACHINEOVERRIDES`，具体如下：

MACHINEOVERRIDES =. "qcom-${QCOM_SELECTED_BSP}-bsp:"
    Copy to clipboard

`meta-qcom-hwe` 中的两个 MACHINEOVERRIDES 为 `qcom-custom-bsp` 和 `qcom-base-bsp`。这些 OVERRIDES 由机器配置文件、配方、和 `meta-qcom-hwe` 元数据层内的其他配置文件使用。配置文件和配方使用这些 OVERRIDE 构件来有条件地设置变量并根据需要附加任务。

配方和配置文件使用 MACHINEOVERRIDES 来确定最终镜像是由 Qualcomm 定制 BSP 软件组件还是上游软件组件组成，具体取决于编译时生效的 OVERRIDE 覆盖参数。

例如，`egl`、`libgl`、`libgles1` 和 `libgles2` 的 PREFERRED\_PROVIDER 设置如下：

| 有效 OVERRIDE | PREFERRED\_PROVIDER 用于 `egl`、`libgl`、`libgles1`、`libgles2` |
| --- | --- |
| `qcom-custom-bsp` | `adreno` |
| `qcom-base-bsp` | `mesa` |

在 BitBake 代码片段中，OVERRIDES 有条件地设置变量，如下所示：

# Provider for Graphics Library.
    # qcom-base-bsp uses 'mesa' as GL provider
    GL_PROVIDER ?= "adreno"
    GL_PROVIDER:qcom-base-bsp ?= "mesa"
    
    PREFERRED_PROVIDER_virtual/egl      = "${GL_PROVIDER}"
    PREFERRED_PROVIDER_virtual/libgl    = "${GL_PROVIDER}"
    PREFERRED_PROVIDER_virtual/libgles1 = "${GL_PROVIDER}"
    PREFERRED_PROVIDER_virtual/libgles2 = "${GL_PROVIDER}"
    
    PREFERRED_PROVIDER_virtual/egl-native      = "mesa-native"
    PREFERRED_PROVIDER_virtual/libgl-native    = "mesa-native"
    PREFERRED_PROVIDER_virtual/libgles1-native = "mesa-native"
    PREFERRED_PROVIDER_virtual/libgles2-native = "mesa-native"
    Copy to clipboard

Note

在本次发布版本中，`qcom-base-bsp` OVERRIDE 仅针对 `qcs9100-ride-sx.conf` 和 `qcs8300-ride-sx.conf` 而编译。

### 内核命令行

> 
> 
> `meta-qcom-hwe/conf/machine/include/qcom-qcs6490.inc`，`meta-qcom-hwe/conf/machine/include/qcom-qcs9100.inc` 和 `meta-qcom-hwe/conf/machine/include/qcom-qcs8300.inc` 包含文件使用 `KERNEL_CMDLINE_EXTRA` 变量来设置内核命令行参数如下：
> 
> 
> Tab qcom-qcs6490.inc
> Tab qcom-qcs9100.inc
> Tab qcom-qcs8300.inc
> 
> 以下代码片段来自该 `qcom-qcs6490.inc` 文件：
> 
> 
> # Additional Kernel cmdline parameters for debug builds
>     DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','earlycon page_owner=on qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage;FZPU','',d)}"
>     
>     KERNEL_CMDLINE_EXTRA ?= "pcie_pme=nomsi kernel.sched_pelt_multiplier=4 rcupdate.rcu_expedited=1 rcu_nocbs=0-7 kpti=off kasan=off kasan.stacktrace=off no-steal-acc ${DBG_CMDLINE} swiotlb=128 mitigations=auto net.ifnames=0"
>     Copy to clipboard
> 
> 以下代码片段来自该 `qcom-qcs9100.inc` 文件：
> 
> 
> # Additional Kernel cmdline parameters for debug builds
>     DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','earlycon reboot=panic_warm page_owner=on qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage;FZPU','',d)}"
>     
>     KERNEL_CMDLINE_EXTRA ?= "pcie_pme=nomsi net.ifnames=0 pci=noaer kpti=off kasan=off kasan.stacktrace=off swiotlb=128 ${DBG_CMDLINE} mitigations=auto kernel.sched_pelt_multiplier=4 rcupdate.rcu_expedited=1 rcu_nocbs=0-7 no-steal-acc vfio_iommu_type1.allow_unsafe_interrupts=1 fw_devlink.strict=1"
>     Copy to clipboard
> 
> 以下代码片段来自该 `qcom-qcs8300.inc` 文件：
> 
> 
> # Additional Kernel cmdline parameters for debug builds
>     DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','earlycon reboot=panic_warm page_owner=on qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage;FZPU','',d)}"
>     
>     KERNEL_CMDLINE_EXTRA ?= "pcie_pme=nomsi net.ifnames=0 pci=noaer kpti=off kasan=off kasan.stacktrace=off swiotlb=128 ${DBG_CMDLINE} mitigations=auto kernel.sched_pelt_multiplier=4 rcupdate.rcu_expedited=1 rcu_nocbs=0-7 no-steal-acc arm64.nopauth  fw_devlink.strict=1"
>     Copy to clipboard

### 包括 DTB

KERNEL\_DEVICETREE 变量通过 OVERRIDES 机制按条件设置，以确保包含正确的设备树二进制文件 (DTB)。meta-qcom-hwe/conf/machine 中的每个单独的机器配置文件都管理此设置。

例如，`conf/machine/qcs9100-ride-sx.conf` 文件针对 custom 和 base 变体对 `KERNEL_DEVICETREE` 变量的设置不同，从而选择合适的 DTB：

Tab linux-qcom-base
Tab linux-qcom-custom

以下代码块展示了如何将 `KERNEL_DEVICETREE` 设置为 `linux-qcom-base`，从而得到 `base` 使用上游 DTB 的变体。

KERNEL_DEVICETREE:pn-linux-qcom-base = " \
                         qcom/qcs9100-ride.dtb \
                         qcom/qcs9100-ride-r3.dtb \
                         qcom/sa8775p-ride.dtb \
                         qcom/sa8775p-ride-r3.dtb \
                         "
    Copy to clipboard

以下代码块展示了如何将 `KERNEL_DEVICETREE` 设置为 `linux-qcom-custom`，从而得到 `custom` 使用上游 DTB 的变体。

KERNEL_DEVICETREE:pn-linux-qcom-custom = " \
                         qcom/qcs9100-addons-ride.dtb \
                         qcom/qcs9100-addons-ride-r3.dtb \
                         qcom/sa8775p-addons-ride.dtb \
                         qcom/sa8775p-addons-ride-r3.dtb \
                         "
    Copy to clipboard

### 包括其他 DTBO

要包括拟覆盖在内核设备树上的附加设备-树覆盖层 (DTBO)，请使用 `KERNEL_TECH_DTBOS` 变量列出 DTBO 名称。

Note

Qualcomm Linux 仅支持 `custom` 变体的设备树二进制覆盖层。

来自 `qcs9100-ride-sx.conf` 的以下示例展示如何使用 DTBO。

KERNEL_TECH_DTBOS[sa8775p-addons-ride] = " \
       sa8775p-video.dtbo qcs9100-graphics.dtbo \
       qcs9100-ride-sx-camera.dtbo \
       "
    KERNEL_TECH_DTBOS[sa8775p-addons-ride-r3] = " \
       sa8775p-video.dtbo qcs9100-graphics.dtbo \
       qcs9100-ride-sx-camera.dtbo \
       "
    
    KERNEL_TECH_DTBOS[qcs9100-addons-ride] = " \
       sa8775p-video.dtbo qcs9100-graphics.dtbo \
       qcs9100-ride-sx-camera.dtbo \
       "
    
    KERNEL_TECH_DTBOS[qcs9100-addons-ride-r3] = " \
       sa8775p-video.dtbo qcs9100-graphics.dtbo \
       qcs9100-ride-sx-camera.dtbo \
       "
    
    KERNEL_TECH_DTBO_PROVIDERS = "\
       qcom-graphicsdevicetree \
       qcom-videodtb \
       cameradtb \
       "
    Copy to clipboard

## 固件配方

Qualcomm Linux 固件配方文件在 [GitHub](https://github.com/qualcomm-linux/meta-qcom-hwe/tree/scarthgap/recipes-firmware)。当 Qualcomm Linux 源代码同步完成后，固件配方位于 `<workspace>/layers/meta-qcom-hwe/recipes-firmware/firmware` 目录中。

### 关键启动二进制文件

需要关键启动固件镜像来启动设备上的内核。以下固件配方提供了硬件 SoC 特定的启动固件。

| 固件配方 | 说明 |
| --- | --- |
| `firmware-qcom-bootbins_1.0.bb` | 处理对兼容的目标设备的关键启动固件的二进制文件的获取、解包和部署。`QCM6490_bootbinaries.zip`、`QCS9100_bootbinaries.zip` 和 `QCS8300_bootbinaries.zip` 文件提供基于 QCS6490、QCS9075 和 QCS8300 的机器所需的启动固件。 |

生成编译版本后，这些 zip 文件中的固件二进制文件可在以下目录中进行刷写：

`<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/<machine-name>/<image-name>/`

### 子系统固件二进制文件

Qualcomm Linux 包含在相应子系统上加载并运行的固件二进制文件。当 Qualcomm 硬件 SoC 启动时，各个子系统在重置后运行固件。

| 固件配方 | 说明 |
| --- | --- |
| `firmware-qcom-hlosfw_1.0.bb` | 处理子系统固件二进制文件（例如 aDSP、cDSP、modem 和 WLAN）的获取、解包和安装。`QCM6490_fw.zip`、`QCS9100_fw.zip` 和 `QCS8300_fw.zip` 文件打包了基于 QCM6490、QCS9075 和 QCS8300 的机器的固件文件。 |

该 `firmware-qcom-hlosfw_1.0.bb` 配方执行以下操作：

> 
> 
> 1. 基于 `SRC_URI` 从远程服务器获取子系统固件二进制文件。
> 2. 解压 zip 文件。
> 3. 在 中 `rootfs` 安装固件。

### DSP 库

用户空间工具是指数字信号处理器 (DSP) 库，必须位于 `rootfs` 镜像中。以下固件配方提供特定于硬件 SoC 的 DSP 库：

| 固件配方 | 说明 |
| --- | --- |
| `firmware-qcom-dspso_1.0.bb` | 处理对 DSP 库的获取、解包和安装。`QCM6490_dspso.zip`、`QCS9100_dspso.zip` 和 `QCS8300_dspso.zip` zip 文件打包了基于 QCM6490、QCS9075 和 QCS8300 的机器的库。 |

该 `firmware-qcom-dspso_1.0.bb` 配方执行以下操作：

> 
> 
> 1. 基于 `SRC_URI` 从远程服务器获取 DSP 库。
> 2. 解压 zip 文件。
> 3. 在 中 `rootfs` 安装 DSP 库。

### 安装启动、子系统和 dspso

在编译 Qualcomm Linux 时，编译系统使用固件配方根据 `MACHINE_EXTRA_RDEPENDS` 配置变量部署预编译的固件，其在机器配置文件中设置。例如，在 `qcom-qcs6490.inc` 中，请参阅 `packagegroup-firmware-qcm6490` 包括在 `MACHINE_EXTRA_RDEPENDS` 变量中：

MACHINE_EXTRA_RDEPENDS += " \
       packagegroup-firmware-qcm6490 \
       "
    Copy to clipboard

Note

`packagegroup-firmware-qcm6490` 配方在 `<workspace>/layers/meta-qcom-hwe/recipes-firmware/packagegroups/` 目录中。它将固件配方分组以生成镜像。

在编译 Qualcomm Linux 时，根据机器配置中的配置和软件包组配方文件， `<workspace>/layers/meta-qcom-hwe/recipes-firmware/firmware` 目录的相应固件配方也将编译。

## 内核配方

Qualcomm Linux 使用的 Qualcomm Linux 内核配方位于 `<workspace>/layers/meta-qcom-hwe/recipes-kernel/linux` 中。

Qualcomm Linux 支持长期支持 (LTS) Qualcomm Linux 内核 v6.6.x。在该 `meta-qcom-hwe` 层中，有两个不同的内核配方：

- `linux-qcom-custom_6.6.bb` 配方支持 `custom` BSP 并从托管在 `git.codelinaro.org` 中的 `qcom.git` 获取内核源代码。
- `linux-qcom-base_6.6.bb` 配方支持 `base` BSP 并从托管在 `git.kernel.org` 中的 `linux.git` 检索内核源代码。

Tab linux-qcom-custom\_6.6.bb
Tab Linux-QCOM-Base\_6.6.bb

inherit kernel sota
    
    COMPATIBLE_MACHINE = "(qcom)"
    
    SRCPROJECT = "git://git.codelinaro.org/clo/la/kernel/qcom.git;protocol=https"
    SRCBRANCH  = "kernel.qclinux.1.0.r1-rel"
    SRCREV     = "d3ed32bf7ee64db22653833d4c3d9a80dd76896d"
    
    SRC_URI = "${SRCPROJECT};branch=${SRCBRANCH};destsuffix=kernel \
             ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', ' file://selinux.cfg', '', d)} \
             ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', ' file://selinux_debug.cfg', '', d)} \
             "
    
    S = "${WORKDIR}/kernel"
    
    KERNEL_CONFIG ??= "qcom_defconfig"
    Copy to clipboard

inherit kernel sota
    
    COMPATIBLE_MACHINE = "(qcom)"
    
    SRC_URI = " git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git;protocol=https;branch=linux-6.6.y \
                file://qcom.cfg \
                file://vm-configs/qcom_vm.cfg \
                file://qcom_debug.cfg \
                "
    # Apply qcom patches
    require ${BPN}-${PV}/configs.inc
    require ${BPN}-${PV}/devicetree.inc
    require ${BPN}-${PV}/drivers.inc
    require ${BPN}-${PV}/dt-bindings.inc
    require ${BPN}-${PV}/tools.inc
    
    KERNEL_CONFIG_FRAGMENTS:append = " ${WORKDIR}/qcom.cfg"
    KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${WORKDIR}/qcom_debug.cfg', '', d)}"
    
    S = "${WORKDIR}/git"
    Copy to clipboard

机器配置文件使用 OVERRIDES 来选择适当的内核配方变体。当您选择 `base` 变体时，`qcom-base.inc` 文件选择 `linux-qcom-base`。如果您选择 `custom` 变体，使用如下所示的片段中的 `linux-qcom-custom` 配方编译内核。

PREFERRED_PROVIDER_virtual/kernel ?= "linux-qcom-custom"
    PREFERRED_PROVIDER_virtual/kernel:qcom-base-bsp ?= "linux-qcom-base"
    Copy to clipboard

**内核配置**

Qualcomm Linux 内核配方 为 `base` 和 `custom` 变体使用一组不同的内核配置和片段。

| 版本 | 配置和片段文件 |
| --- | --- |
| `base` | `defconfig`，`qcom.cfg`，`qcom_vm.cfg`，`qcom_debug.cfg` |
| `custom` | `qcom_defconfig`，`qcom_addons.config`，`selinux.cfg`，`qcom_debug.config`，`qcom_addons_debug.config`，`selinux_debug.cfg` |

下表提供了用于 `custom` 变体的 `defconfig` 和 `fragments` 的描述：

| 内核配置文件 | 说明 |
| --- | --- |
| `<kernel_src>/arch/arm64/configs/qcom_defconfig` | 符合产品和性能需求的默认配置 |
| `<kernel_src>/arch/arm64/configs/qcom_debug.config` | 调试配置片段 |
| `<kernel_src>/arch/arm64/configs/qcom_addons.config` | 在上游对齐基础上的额外 Qualcomm 增强功能 |
| `<kernel_src>/arch/arm64/configs/qcom_addons_debug.config` | 启用调试 |

Qualcomm Linux `custom` 变体配方 `linux-qcom-custom_6.6.bb` 进一步支持 `perf` 和 `debug` 变化。使用 `linux-qcom-custom_6.6.bb` 编译内核的默认方法是 `perf`。

| 编译版本 | Defconfig/config 片段 |
| --- | --- |
| `Perf` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_defconfig</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_addons.config</span></code></p></li><br></ul> |
| `Debug` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_defconfig</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_debug.config</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_addons.config</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">arch/arm64/configs/qcom_addons_debug.config</span></code></p></li><br></ul> |

要使用 `linux-qcom-custom_6.6.bb` 编译调试内核镜像，在您使用 BitBake 命令编译镜像的 shell 中将 `DEBUG_BUILD` 设置为 `1`。

此选择在以下代码中有效：

KERNEL_CONFIG ??= "qcom_defconfig"
    
    KERNEL_CONFIG_FRAGMENTS:append = " ${S}/arch/arm64/configs/qcom_addons.config"
    KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${S}/arch/arm64/configs/qcom_debug.config', '', d)}"
    KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${S}/arch/arm64/configs/qcom_addons_debug.config', '', d)}"
    
    # Enable selinux support
    SELINUX_CFG = "${@oe.utils.vartrue('DEBUG_BUILD', 'selinux_debug.cfg', 'selinux.cfg', d)}"
    KERNEL_CONFIG_FRAGMENTS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', '${WORKDIR}/${SELINUX_CFG}', '', d)}"
    Copy to clipboard

要为 Qualcomm 平台自动加载内核模块，请更新 Qualcomm Linux 内核配方中的 `KERNEL_MODULE_AUTOLOAD` 变量。例如，CoreSight 和 STM 模块按如下方式自动加载：

KERNEL_MODULE_AUTOLOAD += "coresight coresight-tmc coresight-funnel"
    KERNEL_MODULE_AUTOLOAD += "coresight-replicator coresight-etm4x coresight-stm"
    KERNEL_MODULE_AUTOLOAD += "coresight-cti coresight-tpdm coresight-tpda coresight-dummy"
    KERNEL_MODULE_AUTOLOAD += "coresight-remote-etm coresight-tgu"
    KERNEL_MODULE_AUTOLOAD += "stm_core stm_p_ost stm_console stm_heartbeat stm_ftrace "
    Copy to clipboard

## 许可证

`meta-qcom-hwe` 中的配方许可证列于 `<workspace>/meta-qcom-hwe/files/common-licenses`。

common-licenses/
    ├── BSD-3-Clause-Clear
    ├── GPLv2.0-with-linux-syscall-note
    └── Qualcomm-Technologies-Inc.-Proprietary
    Copy to clipboard

Yocto 可以根据图像创建自动创建 SPDX SBOM 文档。若要启用此功能，请按 `local.conf` 如下方式继承 `create-spdx` 类：

INHERIT += "create-spdx"
    Copy to clipboard

在继承该类之后，使用 BitBake 命令重新编译镜像：

bitbake qcom-multimedia-image
    Copy to clipboard

您可以在以下目录中找到 SPDX 输出：

- 对于每个配方，生成的文件在 `tmp/deploy/spdx/<machine>` 目录中。
- 顶级 SPDX 输出文件位于目录中 `tmp-glibc/deploy/images/<machine>/`。

Last Published: Nov 04, 2025

[Previous Topic
meta-qcom](https://docs.qualcomm.com/bundle/publicresource/80-70022-27SC/topics/meta_qcom.md) [Next Topic
meta-qcom-distro](https://docs.qualcomm.com/bundle/publicresource/80-70022-27SC/topics/meta_qcom_distro.md)