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

# 构建和部署 DTB

修改 DTS 文件后，重新构建受影响的 DTB，将其部署到目标设备，并确认启动时加载了正确的设备树。

## 使用 Yocto 构建 DTB

DTB 会作为完整 Yocto 镜像构建的一部分自动构建。要在更改 DTS 后仅重新构建设备树而无需完整重建镜像：

1. 进入 kas shell：

```bash theme={null}
kas shell meta-qcom/ci/<SoC>-<board>.yml:meta-qcom/ci/qcom-distro.yml
```

2. 强制内核配方重新编译（以拾取 DTS 更改）：

```bash theme={null}
bitbake -c compile -f linux-qcom
```

3. 重新构建设备镜像，将更新后的 DTB 重新打包到 `dtb.bin` 中：

```bash theme={null}
bitbake qcom-multimedia-image
```

输出的 DTB 文件位于 `tmp/deploy/images/<machine>/dtbs/` 下。

### 将 DTB 部署到设备

完整 Yocto 构建后，刷写完整镜像以更新包括 DTB 分区在内的所有分区：

```bash theme={null}
cd build/tmp/deploy/images/<Machine>/<Image>-*.rootfs.qcomflash/
fastboot flash dtb_a dtb.bin
fastboot reboot
```

## 独立构建 DTB（不使用 Yocto）

使用 `kmake` 独立工作流时，可通过以下命令仅构建设备树：

```bash theme={null}
kmake O=../kobj ARCH=arm64 dtbs
```

生成的 `.dtb` 和 `.dtbo` 文件位于 `../kobj/arch/arm64/boot/dts/qcom/` 中。

### 将多个 dtb 打包为 FIT 镜像

要将它们打包成可刷写的 `dtb.bin` FIT 镜像，请使用 [qcom-dtb-metadata](https://github.com/qualcomm-linux/qcom-dtb-metadata) 仓库中的 `make_fitimage.sh`（需要 `kmake-image` Docker 工具链）：

```bash theme={null}
kmake-image-run make_fitimage.sh \
    --metadata artifacts/qcom-dtb-metadata/qcom-metadata.dts \
    --its artifacts/qcom-dtb-metadata/qcom-next-fitimage.its \
    --kobj kobj \
    --output images
```

### 将 dtb 打包为单一默认镜像

要将您的 dtb 作为单一且默认的设备树 blob 打包，以便 UEFI 在启动时选取，请使用 `generate_boot_bins.sh` 打包 dtb.bin，并显式传入您的 dtb。

```bash theme={null}
kmake-image-run generate_boot_bins.sh dtb
  --input <path/to/your-custom-dtb> \
  --output image/
```

有关完整的独立构建设置说明，请参阅[不使用 Yocto 构建内核](./build-kernel-standalone)。

有关 `kmake-image` 实用程序，请参阅其[项目自述文件](https://github.com/qualcomm-linux/kmake-image/)。

### 将 DTB 部署到设备

使用打包多个 dtb 的 `make_fitimage.sh` 或打包单个 dtb 的 `generate_boot_bins.sh` 生成 `dtb.bin` 后：

```bash theme={null}
fastboot flash dtb_a images/dtb.bin
fastboot reboot
```

<Note>
  在内核或 DTS 更改后，请同时刷写 `efi.bin` 和 `dtb.bin`，以保持内核与设备树同步。有关完整的增量刷写流程，请参阅[安装并启动内核](./install-and-boot-the-kernel#deploy-kernel-artifacts)。
</Note>

## 验证启动时的 DTB 选择

设备重启后，确认加载了预期的设备树。

**检查已加载的 compatible 字符串：**

```bash theme={null}
cat /proc/device-tree/compatible
```

输出应与您开发板 DTS 的 `compatible` 字符串匹配。例如，对于 QCS6490 RB3 Gen 2：

```text theme={null}
qcom,qcs6490-rb3gen2
qcom,qcs6490
```

**在运行时检查完整的设备树：**

```bash theme={null}
dtc -I fs /proc/device-tree 2>/dev/null | head -30
```

**从 dmesg 检查开发板型号：**

```bash theme={null}
dmesg | grep -i model
```

如果选择了错误的 DTB 或设备无法启动，请参阅[常见 DT 问题与修复](./common-dt-issues)。
