设备树叠加层

设备树 (DT) 是一种命名节点和属性的数据结构,用于描述不可发现的硬件。内核(例如 Android 中使用的 Linux 内核)使用 DT 来支持 Android 设备使用的各种硬件配置。硬件供应商提供自己的设备树源 (DTS) 文件,这些文件使用设备树编译器编译为设备树 Blob (DTB) 文件。这些文件随后由 Bootloader 使用。DTB 文件包含二进制格式的扁平化设备树

设备树叠加层 (DTO) 支持将中央 DTB 叠加在 DT 上(用于叠加层的设备树 Blob (DTBO))。使用 DTO 的引导加载程序可以维护片上系统 (SoC) DT,并动态叠加设备专用 DT,从而向树中添加节点并更改现有树中的属性。

Android 9 版本中的更新

在 Android 9 中,引导加载程序不得在将统一 DTB 传递给内核之前修改 DTO 中定义的属性。

加载 DT

在引导加载程序中加载 DT 涉及构建、分区和运行。

图 1. 引导加载程序中加载设备树的典型实现。

  1. 创建和刷写 DTB

    1a. 使用 DTC (dtc) 将 DTS (.dts) 编译为 DTB (.dtb)。 DTB 格式为扁平化 DT。 1b. 将 .dtb 文件刷写到引导加载程序运行时可访问的位置(详见下文)。

  2. 要分区,请在闪存中确定引导加载程序运行时可访问且可信的位置以放置 .dtb。 示例位置

    图 2. 通过以下方式将 .dtb 放入引导分区
    附加到 image.gz 并作为
    "kernel" 传递给 mkbootimg。

    图 3. 将 .dtb 放入唯一分区
    (例如,dtb 分区)。

  3. 加载 DTB 并启动内核

    • 从存储加载 .dtb 到内存。
    • 使用加载的 DT 的内存地址启动内核。

下一步是什么?

本页面详细介绍了用于加载 DT 的典型引导加载程序工作流程,并提供了常见 DT 术语列表。 本节中的其他页面介绍了如何实现引导加载程序支持、如何编译、验证和优化 DTO,以及如何使用多个 DT。 您还可以获取有关DTO 语法和所需的DTO 和 DTBO 分区格式的详细信息。