设备树覆盖

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

设备树覆盖 (DTO)使中央设备树 blob (DTB) 能够覆盖在设备树上。使用 DTO 的引导加载程序可以维护片上系统 (SoC) DT 并动态覆盖特定于设备的 DT,向树中添加节点并更改现有树中的属性。

DTBO用于覆盖的设备树 Blob

Android 9 版本中的更新

在 Android 9 中,引导加载程序在将统一设备树 blob 传递给内核之前不得修改设备树覆盖中定义的属性。

加载设备树

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

图 1.在引导加载程序中加载设备树的典型实现。
  1. 要创建并刷新设备树 blob:

    1a.使用设备树编译器 ( dtc >) 将设备树源代码 ( .dts ) 编译成设备树 blob ( .dtb )。设备树 blob 被格式化为扁平设备树。 1b.将.dtb文件闪存到引导加载程序运行时可访问的位置(详见下文)。

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

    引导分区
    图 2.通过附加到image.gz并作为“ kernel ”传递给mkbootimg ,将.dtb放入启动分区。
    唯一分区
    图 3..dtb放在一个唯一的分区中(例如dtb分区)。

  3. 要加载设备树 blob 并启动内核:

    3a. .dtb从存储加载到内存中。 3b.使用加载的 DT 的内存地址启动内核。

下一步是什么?

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