# Qualcomm Linux 内核入门指南

以下信息介绍了如何为 Qualcomm Linux 开发包及其相关组件下载、配置和开发 Qualcomm^®^ Linux 内核，以编译和刷写系统镜像。

在开始下载和配置 Qualcomm Linux 内核之前，请按照 [Qualcomm Linux 编译指南](bundle/publicresource/topics/80-70018-254)设置您的主机，Qualcomm Linux 编译指南还提供了有关常见的 Qualcomm Linux 内核工作流程的信息。

## 获取 Qualcomm Linux 内核源代码

要访问 Qualcomm Linux 内核的源代码，请参阅 [Qualcomm Linux 编译指南](bundle/publicresource/topics/80-70018-254)并获取所有必要的 Qualcomm Linux 元数据层。

Qualcomm Linux 使用 LTS Linux 内核 (6.6.x) 并支持两种软件变体：

> 
> 
> - 基本板级支持包 (BSP)
> - 定制 BSP

Note

- **基本 BSP** 版本使用上游 LTS Linux 内核 (6.6.x) 和一组有限的下游补丁。内核源托管于 [kernel/git/stable/linux.git](https://web.git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/?h=linux-6.6.y&amp;id=943e0aeece93a9c2329215d02621e634adf6d790)。
- **定制 BSP** 版本使用定制的 LTS Linux 内核 (6.6.x)，并托管在 CodeLinaro 的 Qualcomm 代码仓库中。内核源代码托管在 [kernel.qclinux.1.0.r1-rel](https://git.codelinaro.org/clo/la/kernel/qcom/-/commits/LKP.QCLINUX.1.0.r1-04800-kernel.0?ref_type=tags)。

表：不同版本的内核配方路径

| 版本 | 内核配方路径 |
| --- | --- |
| 基本 BSP | `recipes-kernel/linux/linux-qcom-base_6.6.bb` |
| 定制 BSP | `recipes-kernel/linux/linux-qcom-custom_6.6.bb` |

Note

基本 BSP 和定制 BSP 的内核配方位于 `meta-qcom-hwe` 层中。

查看 `recipes-kernel/linux/linux-qcom-base_6.6.bb` 或者 `recipes-kernel/linux/linux-qcom-custom_6.6.bb` 文件来了解 Git 统一资源标识符（URI）以下载内核源代码。

有关 Qualcomm Linux 层的更多信息，请参阅 [Qualcomm Linux 元数据层概述](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-27/qualcomm_linux_metadata_layers_overview.html)。

> 
> 
> Note
> 
> 
> Yocto 配方是指在 [CodeLinaro](https://git.codelinaro.org/clo/la/kernel/qcom) 公开托管的 Qualcomm Linux 内核源代码。

以下示例展示了基本 BSP 和定制 BSP 的 Qualcomm Linux 内核配方源代码 URI 信息：

**基本 BSP**

以下是基本 BSP 版本的源代码 URI 信息：

SECTION = "kernel"
    
    SUMMARY = "Linux kernel for QCOM devices"
    DESCRIPTION = "Recipe to build Linux kernel from 6.6 LTS branch"
    
    LICENSE = "GPL-2.0-only"
    LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
    
    inherit kernel
    
    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 \
    "
    Copy to clipboard

**自定义 BSP**

以下是定制 BSP 版本的源代码 URI 信息：

> 
> 
> SECTION = "kernel"
>     
>     SUMMARY = "Linux kernel for QCOM devices"
>     DESCRIPTION = "Recipe to build Linux kernel"
>     
>     LICENSE = "GPLv2.0-with-linux-syscall-note"
>     LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
>     
>     inherit kernel
>     
>     COMPATIBLE_MACHINE = "(qcom)"
>     
>     SRC_URI = "git://git.codelinaro.org/clo/la/kernel/qcom.git;protocol=https;rev=350dfd604d2ffbe0cac99bf3459b49114aad11f4;branch=kernel.qclinux.1.0.r1-rel \
>       file://QCLINUX-arm64-dts-qcom-sa8775p-ride-add-board-id-and.patch \
>       ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', ' file://selinux.cfg', '', d)} \
>       ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', ' file://selinux_debug.cfg', '', d)} \
>       "
>     Copy to clipboard

## 确定支持的 Qualcomm 主机

Qualcomm 主机配置文件位于 `meta-qcom-hwe/conf/machine/` 目录。

主机配置文件遵循 `<SoC>-<board>-<variant>​.conf` 命名约定，其中：

- `SoC` 是片上系统 (SoC) 名称
- `board` 是编译软件适用的板卡类型
- `variant` 是产品的类型

例如：

在 `qcs6490-rb3gen2-core-kit.conf` 文件名中，

- `qcs6490` 是 SoC
- `rb3gen2` 是板卡
- `core-kit` 是产品的类型

在平台特定的设备树文件中遵循相同的命名约定。

以下示例展示了为 Yocto 配置的受支持机器列表：

ls -l ./LE.QCLINUX.1.0/layers/meta-qcom-hwe/conf/machine/*.conf
    
    meta-qcom-hwe/conf/machine/qcs6490-rb3gen2-core-kit.conf
    meta-qcom-hwe/conf/machine/qcs6490-rb3gen2-vision-kit.conf
    meta-qcom-hwe/conf/machine/qcs9075-ride-sx.conf
    Copy to clipboard

以下示例展示了搭载 Qualcomm 芯片组的开发板的主机配置选项：

less meta-qcom-hwe/conf/machine/<SoC>-<board>-<variant>.conf
    
    #@TYPE: Machine
    #@NAME: <Machine name same as the machine conf file or ``<SoC>-<board>-<variant>`` >
    #@DESCRIPTION: Machine configuration for the development board, with Qualcomm qcs6490
    
    require conf/machine/include/qcom-<SoC>.inc
    Copy to clipboard

以下示例展示了基本和定制 BSP 版本的内核配置选项：

less meta-qcom-hwe/conf/machine/include/qcom-base.inc
    
    # Provider for linux kernel
    # qcom-base-bsp uses 'linux-qcom-base' as kernel
    PREFERRED_PROVIDER_virtual/kernel ?= "linux-qcom-custom"
    PREFERRED_PROVIDER_virtual/kernel:qcom-base-bsp ?= "linux-qcom-base"
    Copy to clipboard

Note

- 在编译基本 BSP 版本时选择 `linux-qcom-base`。
- 在编译定制 BSP 版本时选择 `linux-qcom-custom`。

## 编译 Yocto 镜像配方和内核配置

用户可以访问 Qualcomm Linux 镜像配方以修改内核配置。下表列出了支持的 `meta-qcom-hwe` 镜像：

表：Qualcomm Linux 支持的镜像配方

| 镜像名称 | 说明 |
| --- | --- |
| qcom-console-image<br>    Copy to clipboard | 这是一个包含软件包组的 boot-to-shell 镜像，该软件包组用于引入所有基本软件包。 |
| qcom-multimedia-image<br>    Copy to clipboard | 该镜像配方包括多媒体软件组件的配方，例如音频、蓝牙^®^、摄像头、计算机视觉、显示器和视频。 |
| qcom-multimedia-test-image<br>    Copy to clipboard | 此镜像配方包含测试镜像。 |

下载 Qualcomm Linux 代码后，运行 `bitbake` 命令编译镜像。

Note

基本 BSP 版本使用 `arch/arm64/configs/defconfig` 内核配置文件。本地更改覆盖在 `meta-qcom-hwe/recipes-kernel/linux/linux-qcom-base-6.6/qcom.cfg` 文件中的 `defconfig` 之上。

若要编译基本 BSP 版本的 Qualcomm Linux 内核，可运行以下命令：

# Use the filename of Machine conf file for MACHINE parameter
    $ MACHINE=<SoC>-<board>-<variant> DISTRO=qcom-wayland QCOM_SELECTED_BSP=base source setup-environment
    
    # build qcom linux console image
    $ bitbake qcom-console-image
    
    # Build Images are produced under "build-qcom-wayland/tmp-glibc/deploy/images/<SoC>-<board>-<variant>/qcom-console-image/"
    Copy to clipboard

要编译[表：Qualcomm Linux 支持的镜像配方](https://docs.qualcomm.com/doc/80-70018-3SC/topic/getting_started_chapter2.html#qualcomm-linux-supported-image-recipes)中列出的镜像，Qualcomm Linux 内核定制 BSP 配方使用以下内核配置片段之一：

Note

下游内核配置文件包含 `addons`。

表：自定义 BSP 内核配置片段

| 内核配置片段 | 说明 |
| --- | --- |
| <kernel_src>/arch/arm64/configs/qcom_defconfig<br>    Copy to clipboard | 要求产品基本配置与上游内核保持一致。 |
| <kernel_src>/arch/arm64/configs/qcom_debug.config<br>    Copy to clipboard | 从上游内核调试配置片段。 |
| <kernel_src>/arch/arm64/configs/qcom_addons.config<br>    Copy to clipboard | 在上游一致的基本配置之上增加 Qualcomm 下游增加配置。 |
| <kernel_src>/arch/arm64/configs/qcom_addons_debug.config<br>    Copy to clipboard | 启用 Qualcomm 下游调试。 |

若要编译 Qualcomm Linux，包括定制 BSP 版本的内核，可运行以下命令：

> 
> 
> # Use the filename of Machine conf file for MACHINE parameter
>       MACHINE=<SoC>-<board>-<variant> DISTRO=qcom-wayland QCOM_SELECTED_BSP=custom source setup-environment
>     
>     # build qcom linux console image
>       bitbake qcom-console-image
>     
>     # Build Images are produced under "build-qcom-wayland/tmp-glibc/deploy/images/<SoC>-<board>-<variant>/qcom-console-image/"
>     Copy to clipboard

内核默认编译版本在 `linux-qcom-base_6.6.bb` 或 `linux-qcom-custom_6.6.bb` 文件中定义。

Qualcomm Linux 内核配方支持下表中提到的 #3（性能）和 #4（调试）编译配置。默认编译配置为编号 3（性能）。以下内核配置片段仅适用于定制 BSP 版本。

> 
> 
> 表：自定义 BSP 内核编译配置类型和配置
> 
> 
> | 序列号 | 内核编译版本配置类型 | Defconfig/config 片段 |
> | --- | --- | --- |
> | 1 | 基本配置 | arch/arm64/configs/qcom_defconfig<br>    Copy to clipboard |
> | 2 | 启用调试的基本配置 | <ul><br><li><div class="highlight-pre notranslate"><div class="highlight"><pre class="pre codeblock"><code>arch/arm64/configs/qcom_defconfig<br></code><span class="copyclip"><svg xmlns="http://www.w3.org/2000/svg" class="copyclipicon" width="25px" height="25px" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><title>Copy to clipboard</title><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></span></pre></div><br></div><br></li><br><li><div class="highlight-pre notranslate"><div class="highlight"><pre class="pre codeblock"><code>arch/arm64/configs/qcom_debug.config<br></code><span class="copyclip"><svg xmlns="http://www.w3.org/2000/svg" class="copyclipicon" width="25px" height="25px" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><title>Copy to clipboard</title><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></span></pre></div><br></div><br></li><br></ul> |
> | 3 | 增加下游配置的基本配置 | <ul><br><li><div class="highlight-pre notranslate"><div class="highlight"><pre class="pre codeblock"><code>arch/arm64/configs/qcom_defconfig<br></code><span class="copyclip"><svg xmlns="http://www.w3.org/2000/svg" class="copyclipicon" width="25px" height="25px" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><title>Copy to clipboard</title><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></span></pre></div><br></div><br></li><br><li><div class="highlight-pre notranslate"><div class="highlight"><pre class="pre codeblock"><code>arch/arm64/configs/qcom_addons.config<br></code><span class="copyclip"><svg xmlns="http://www.w3.org/2000/svg" class="copyclipicon" width="25px" height="25px" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><title>Copy to clipboard</title><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></span></pre></div><br></div><br></li><br></ul> |
> | 4 | 包含下游配置且启用调试的基本配置 | <ul><br><li><div class="highlight-pre notranslate"><div class="highlight"><pre class="pre codeblock"><code>arch/arm64/configs/qcom_defconfig<br></code><span class="copyclip"><svg xmlns="http://www.w3.org/2000/svg" class="copyclipicon" width="25px" height="25px" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><title>Copy to clipboard</title><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></span></pre></div><br></div><br></li><br><li><div class="highlight-pre notranslate"><div class="highlight"><pre class="pre codeblock"><code>arch/arm64/configs/qcom_debug.config<br></code><span class="copyclip"><svg xmlns="http://www.w3.org/2000/svg" class="copyclipicon" width="25px" height="25px" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><title>Copy to clipboard</title><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></span></pre></div><br></div><br></li><br><li><div class="highlight-pre notranslate"><div class="highlight"><pre class="pre codeblock"><code>arch/arm64/configs/qcom_addons.config<br></code><span class="copyclip"><svg xmlns="http://www.w3.org/2000/svg" class="copyclipicon" width="25px" height="25px" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><title>Copy to clipboard</title><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></span></pre></div><br></div><br></li><br><li><div class="highlight-pre notranslate"><div class="highlight"><pre class="pre codeblock"><code>arch/arm64/configs/qcom_addons_debug.config<br></code><span class="copyclip"><svg xmlns="http://www.w3.org/2000/svg" class="copyclipicon" width="25px" height="25px" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><title>Copy to clipboard</title><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></span></pre></div><br></div><br></li><br></ul> |

有关配置内核的更多信息，请参阅[内核配置](https://docs.qualcomm.com/doc/80-70018-3SC/topic/features.html#kernel-configuration-1)。

### 编译 Qualcomm 调试版本

运行以下命令以编译调试版本：

DEBUG_BUILD=1 bitbake qcom-console-image
    Copy to clipboard

要修改构建版本配置，请更新 `meta-qcom-hwe` 层中 `linux-qcom-base_6.6.bb` 或 `linux-qcom-custom_6.6.bb` 内核配方中的 `KERNEL_CONFIG` 和 `KERNEL_CONFIG_FRAGMENTS` 变量。

### 内核配置示例

以下示例展示了基本 BSP 和定制 BSP 的内核配置：

**基本 BSP**

以下示例显示了使用 `linux-qcom-base_6.6.bb` 内核配方的内核配置：

> 
> 
> KERNEL_CONFIG_FRAGMENTS:append = " ${WORKDIR}/qcom.cfg"
>     
>     S = "${WORKDIR}/git"
>     
>     # 6.6.38
>     SRCREV = "2928631d5304b8fec48bad4c7254ebf230b6cc51"
>     PV = "6.6+git${SRCPV}"
>     
>     KERNEL_CONFIG ??= "defconfig"
>     Copy to clipboard

**自定义 BSP**

以下示例显示了使用 `linux-qcom-custom_6.6.bb` 内核配方的内核配置：

> 
> 
> 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 Linux 编译指南](bundle/publicresource/topics/80-70018-254)中的 [QSC CLI 编译](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-254/build_frm_source_qsc_cli.html#build-from-source-qsc-cli)。

## 访问平台设备树

受支持的开发套件的 Qualcomm 设备树源包含 (DTSI) 和设备树源 (DTS) 文件位于 `arch/arm64/boot/dts/qcom/` 目录中的内核源下。这些 Qualcomm 文件将上游对齐和下游附加部分分开。

具有 `addons` 的设备树文件是下游文件。基本 BSP 变体软件不使用任何下游设备树文件。

`<SoC>-<board>-<variant>​.conf` 是包含所需设备树 blob (DTB) 选择配置数据的 Qualcomm Linux 机器配置文件。

- `SoC` 是任何受支持的 Qualcomm Linux SoC。例如，QCS6490 和 QCS9075。
- `board` 是 RB3 Gen 2 支持的产品。
- `variant` 是产品的特定类型，例如 core-kit。

以下示例展示了纳入设备配置文件中的 DTB 包含文件：

KERNEL_DEVICETREE = " \
                         qcom/<SoC>-addons-<variant>.dtb \
                         "
    Copy to clipboard

Tab QCS6490
Tab QCS9075
Tab QCS8275

下表列出了适用于 Qualcomm RB3 Gen 2 开发包的 Qualcomm^®^ 设备树文件。

> 
> 
> 表：Qualcomm 设备树源代码
> 
> 
> | 设备树源代码 | 详细信息 |
> | --- | --- |
> | arch/arm64/boot/dts/qcom/sc7280.dtsi<br>    Copy to clipboard | QCS6490 SoC 源自 SC7280 SoC。 |
> | arch/arm64/boot/dts/qcom/qcm6490.dtsi<br>    Copy to clipboard | QCM6490/QCS6490 DTSI，其中包含不同于 SC7280 SoC 的所有更改。 |
> | arch/arm64/boot/dts/qcom/qcm6490-addons.dtsi<br>    Copy to clipboard | QCM6490/QCS6490 SoC 特定的下游增加配置。 |
> | arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts<br>    Copy to clipboard | 适用于 QCS6490 Qualcomm RB3 Gen 2 开发套件的设备树源代码。 |
> | arch/arm64/boot/dts/qcom/qcs6490-addons-rb3gen2.dts<br>    Copy to clipboard | Qualcomm RB3 Gen 2 开发套件的 QCS6490 特定的下游增加配置。 |
> | arch/arm64/boot/dts/qcom/qcs5430-addons-rb3gen2.dts<br>    Copy to clipboard | Qualcomm RB3 Gen 2 开发套件的 QCS5430 功能包-1 特定的下游增加配置。 |
> | arch/arm64/boot/dts/qcom/qcs5430-fp2-addons-rb3gen2.dts<br>    Copy to clipboard | Qualcomm RB3 Gen 2 开发套件的 QCS5430 功能包-2 的下游增加配置。 |
> | arch/arm64/boot/dts/qcom/qcs5430-fp2p5-addons-rb3gen2-vision-mezz.dts<br>    Copy to clipboard | RB3 Gen 2 机器视觉 Mezzanine 开发包的 QCS5430 功能包-2.5 的下游增加配置。 |
> | arch/arm64/boot/dts/qcom/qcs5430-fp3-addons-rb3gen2-vision-mezz.dts<br>    Copy to clipboard | RB3 Gen 2 机器视觉 Mezzanine 开发包的 QCS5430 功能包-3 的下游增加配置。 |

下表列出了适用于 QCS9075 开发包的 Qualcomm 设备树文件。默认情况下，使用插件 DTB。

> 
> 
> 表：Qualcomm 设备树源代码
> 
> 
> | 设备树源代码 | 详细信息 |
> | --- | --- |
> | arch/arm64/boot/dts/qcom/sa8775p.dtsi<br>    Copy to clipboard | QCS9075 SoC 源自 SA8775P。 |
> | arch/arm64/boot/dts/qcom/sa8775p-ride.dtsi<br>    Copy to clipboard | QCS9075 的 Qualcomm Linux 开发包。 |
> | arch/arm64/boot/dts/qcom/qcs9075-ride.dts<br>    Copy to clipboard | QCS9075 ride 的 Qualcomm Linux 开发包。 |
> | arch/arm64/boot/dts/qcom/qcs9075-addons-ride.dts<br>    Copy to clipboard | QCS9075 ride 的 Qualcomm Linux 开发包及其下游附加功能。 |
> | arch/arm64/boot/dts/qcom/qcs9075-ride-r3.dts<br>    Copy to clipboard | QCS9075 ride R3 的 Qualcomm Linux 开发包。 |
> | arch/arm64/boot/dts/qcom/qcs9075-addons-ride-r3.dts<br>    Copy to clipboard | QCS9075 ride R3 的 Qualcomm Linux 开发包及其下游附加功能。 |
> | arch/arm64/boot/dts/qcom/qcs9075-iq-9075-evk.dts<br>    Copy to clipboard | 适用于 Qualcomm Dragonwing^TM^ IQ-9075 EVK 的 Qualcomm Linux 开发包。 |
> | arch/arm64/boot/dts/qcom/qcs9075-addons-iq-9075-evk.dts<br>    Copy to clipboard | 适用于 Qualcomm Dragonwing^TM^ IQ-9075 EVK 的 Qualcomm Linux 开发包及其下游附加功能。 |

下表列出了适用于 QCS8275 开发包的 Qualcomm 设备树文件。默认情况下，使用插件 DTB。

> 
> 
> 表：Qualcomm 设备树源代码
> 
> 
> | 设备树源代码 | 详细信息 |
> | --- | --- |
> | arch/arm64/boot/dts/qcom/qcs8300.dtsi<br>    Copy to clipboard | QCS8275 SoC 源自 QCS8300。 |
> | arch/arm64/boot/dts/qcom/qcs8300-addons.dtsi<br>    Copy to clipboard | 适用于 QCS8275 的 Qualcomm Linux 开发包及其下游附加功能。 |
> | arch/arm64/boot/dts/qcom/qcs8300-ride.dts<br>    Copy to clipboard | 适用于 QCS8275 ride 的 Qualcomm Linux 开发包。 |
> | arch/arm64/boot/dts/qcom/qcs8300-addons-ride.dts<br>    Copy to clipboard | 适用于 QCS8275 ride 的 Qualcomm Linux 开发包以及下游附加功能。 |

## 管理树外 DT 叠加片段

SoC 主机配置文件包括附加的树外 DTB 叠加 (DTBO)。

图形、摄像头、无线局域网 (WLAN) 驱动程序及其设备树配置在内核源代码树之外维护。其各自的设备树源代码叠加 (DTSO) 文件在编译时被叠加在基础 DTB 之上。

DTBO 配置在 `conf/machine/<SoC>-<board>-<variant>.conf` 文件中完成。

以下示例展示了 DTBO 配置：

# OUT_OF_KERNEL_DTSO - qcs6490-rb3gen2-core-kit.conf
    # Additional list of DTBOs to be overlaid on top of base kernel devicetree files
    # Format - KERNEL_TECH_DTBOS[<base-dtb-name>] = "<dtbo1 <dtbo2> ..."
    # For example:
    
    KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2] = " \
    qcm6490-graphics.dtbo qcm6490-wlan-rb3.dtbo \
    qcm6490-display-rb3.dtbo qcm6490-bt.dtbo \
    qcm6490-video.dtbo qcm6490-wlan-upstream.dtbo \
    "
    Copy to clipboard

## 管理树外内核模块

大多数内核驱动程序都是从上游内核源代码编译的。但是，有些驱动程序是在内核源代码树之外进行维护，并使用 Yocto 编译系统编译为内核模块。

在以下示例中，蓝牙^®^ 是树外内核模块。位于 `recipes-connectivity/bt_dlkm_kernel/bt-dlkm-kernel_git.bb` 的配方将驱动程序编译为内核模块。要在启动时自动加载内核模块，您可以将模块名称添加到 `KERNEL_MODULE_AUTOLOAD` 变量。

# Example out-of-tree Kernel module recipe
    DESCRIPTION = "QCOM BT drivers"
    LICENSE = "GPL-2.0-only"
    LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/${LICENSE};md5=801f80980d171dd6425610833a22dbe6"
    
    inherit module
    
    SRC_URI += "git://git.codelinaro.org/clo/le/platform/vendor/qcom-opensource/bt-kernel.git;protocol=https;rev=9e5cf29625d60f78e88440c94d096a9139445c00;branch=bt-performant.qclinux.1.0.r1-rel \
             file://bt_dlkm \
             file://bt_dlkm.service \
             "
    
    S = "${WORKDIR}/git"
    
    RPROVIDES:${PN} += "kernel-module-bt-kernel"
    
    EXTRA_OEMAKE += "MACHINE='${MACHINE}'"
    MAKE_TARGETS = "modules"
    MODULES_INSTALL_TARGET = "modules_install"
    # Kernel module to be autoloaded
    KERNEL_MODULE_AUTOLOAD += "bt_fm_slim"
    Copy to clipboard

## 编译设备镜像

要编译完整的镜像和内核，请运行以下 Yocto 命令：

# setup the build environment
      export SHELL=/bin/bash
    
      source setup-environment
    # (select "<SoC> meta-qcom" → Enter → select "qcom-wayland meta-qcom-distro" → Enter)
    
    # build qcom linux console image
      bitbake qcom-console-image
    
    # Build kernel only
      bitbake linux-qcom-base
    
    # Build Images are produced under
    # build-qcom-wayland/tmp-glibc/deploy/images/<SoC>-<board>-<variant>/qcom-console-image/
    Copy to clipboard

有关如何为 SoC 支持的 Qualcomm 分发版构建不同镜像的更多信息，请参阅[内核配置](https://docs.qualcomm.com/doc/80-70018-3SC/topic/features.html#kernel-configuration-1)。

Note

要编译定制 BSP，使用 `linux-qcom-custom`。

## 调通设备

`efi.bin` 文件包含 systemd-boot（启动管理器）、内核和 initramfs 镜像。Yocto 编译版本将这些镜像打包到 `efi.bin` 中，其已被刷写到 EFI 系统分区 (ESP) 以引导设备。

设备树 blob 已更新或添加到 `conf/machine/<SoC>-<board>-<variant>.conf` 文件中的 `KERNEL_DEVICETREE` 变量。这些设备树 blob 用于编译 `dtb.bin` 文件。

使用以下 fastboot 命令刷写 `efi.bin` 和 `dtb.bin` 镜像：

# Bring the device in fastboot mode
    # cd to the source root location
    $ cd build-qcom-wayland/tmp-glibc/deploy/images/<SoC>/qcom-console-image
    $ fastboot flash efi efi.bin
    $ fastboot flash dtb_a dtb.bin
    $ fastboot reboot
    Copy to clipboard

在生成 Qualcomm Linux 版本后，内核编译完成，并在 `tmp-glibc/deploy/images/<SoC>-<board>-<variant>/` 目录中创建内核相关镜像。

下表列出了内核编译 artifact：

表：内核编译 artifact

| 镜像 | 镜像名称 | 编译版本部署路径 | 详细信息 |
| --- | --- | --- | --- |
| 内核的可执行和可链接的格式 (ELF) 文件 | vmlinux<br>    Copy to clipboard | tmp-glibc/deploy/images/<SoC>-<board>-<variant>/<br>    Copy to clipboard | 输出带有调试符号的内核 ELF 文件。 |
| Initramfs | initramfs-qcom-image-<SoC>-<board>-<variant>.cpio.gz<br>    Copy to clipboard | tmp-glibc/deploy/images/<SoC>-<board>-<variant>/<br>    Copy to clipboard | 拷贝输入/输出 (CPIO) 文件格式的 Initramfs。 |
| 内核镜像 | Image<br>    Copy to clipboard | tmp-glibc/deploy/images/<SoC>-<board>-<variant>/<br>    Copy to clipboard | 内核原始镜像二进制，systemd-boot 不支持压缩镜像。 |
| 内核模块 | 不同的内核动态可加载内核模块 (DLKM)<br><br><br>modules-<SoC>-<board>-<variant>.tgz<br>    Copy to clipboard | tmp-glibc/deploy/images/<SoC>-<board>-<variant>/<br>    Copy to clipboard | 内核驱动程序模块。 |
| 设备树 blob | <SoC>-addons-<VARIANT>.dtb<br>    Copy to clipboard | tmp-glibc/deploy/images/<SoC>-<board>-<variant>/<br>    Copy to clipboard | 各个设备树 blob。 |
| ESP 分区 | efi.bin<br>    Copy to clipboard | tmp-glibc/deploy/images/<SoC>-<board>-<variant>/<br>    Copy to clipboard | 所有必需的启动镜像（包括 systemd-boot、内核和 initramfs）都打包到可扩展固件接口 (`efi.bin`) 二进制文件中。 |
| DTB 分区 | dtb.bin<br>    Copy to clipboard | tmp-glibc/deploy/images/<SoC>-<board>-<variant>/<br>    Copy to clipboard | 所有 DTBO 文件都合并到 `dtb.bin` 二进制文件中。 |

Last Published: May 05, 2025

[Previous Topic
内核概述](https://docs.qualcomm.com/bundle/publicresource/80-70018-3SC/topics/overview.md) [Next Topic
内核功能](https://docs.qualcomm.com/bundle/publicresource/80-70018-3SC/topics/features.md)