设备树 (DT)是描述不可发现硬件的命名节点和属性的数据结构。内核(例如 Android 中使用的 Linux 内核)使用 DT 来支持 Android 设备使用的各种硬件配置。硬件供应商提供他们自己的设备树源 (DTS)文件,这些文件使用设备树编译器编译成设备树 Blob (DTB)文件。引导加载程序随后使用这些文件。 DTB 文件包含一个二进制格式的扁平化设备树。
设备树覆盖 (DTO)使中央设备树 blob (DTB) 能够覆盖在设备树上。使用 DTO 的引导加载程序可以维护片上系统 (SoC) DT 并动态覆盖特定于设备的 DT,向树中添加节点并更改现有树中的属性。
Android 9 版本中的更新
在 Android 9 中,引导加载程序在将统一设备树 blob 传递给内核之前不得修改设备树覆盖中定义的属性。
加载设备树
在引导加载程序中加载设备树涉及构建、分区和运行。

要创建并刷新设备树 blob:
1a.使用设备树编译器 (
dtc
>) 将设备树源代码 (.dts
) 编译成设备树 blob (.dtb
)。设备树 blob 被格式化为扁平设备树。 1b.将.dtb
文件闪存到引导加载程序运行时可访问的位置(详见下文)。要分区,请确定闪存中引导加载程序运行时可访问且受信任的位置以放置
.dtb
。示例位置:引导分区 图 2.通过附加到 image.gz
并作为“kernel
”传递给mkbootimg
,将.dtb
放入启动分区。唯一分区 图 3.将 .dtb
放在一个唯一的分区中(例如dtb
分区)。要加载设备树 blob 并启动内核:
3a.
.dtb
从存储加载到内存中。 3b.使用加载的 DT 的内存地址启动内核。
下一步是什么?
本页详细介绍了用于加载 DT 的典型引导加载程序工作流程,并提供了常见 DT 术语的列表。本节中的其他页面描述了如何实现引导加载程序支持,如何编译、验证和优化您的 DTO ,以及如何使用多个 DT 。您还可以获得有关DTO 语法和所需的DTO/DTBO 分区格式的详细信息。