设备树 (DT) 是用于描述“不可发现”硬件的命名节点和属性构成的一种数据结构。内核(例如在 Android 中使用的 Linux 内核)会使用 DT 来支持 Android 设备使用的各种硬件配置。硬件供应商会提供自己的设备树源 (DTS) 文件,系统会使用设备树编译器将这些文件编译到设备树 Blob (DTB) 文件中。随后,这些文件将供引导加载程序使用。DTB 文件包含二进制格式的扁平化设备树。
设备树叠加层 (DTO) 可让主要的设备树 Blob (DTB) 叠加在设备树上。使用 DTO 的引导加载程序可以维护系统芯片 (SoC) DT,并动态叠加设备特定的 DT,从而向树中添加节点并对现有树中的属性进行更改。
DTBO 适用于叠加层的设备树 Blob
Android 9 版本中的更新
在 Android 9 中,在将统一设备树 Blob 传递给内核之前,引导加载程序不得修改设备树叠加层中定义的属性。
加载设备树
在引导加载程序中加载设备树会涉及到构建、分区和运行。
![](https://source.android.google.cn/docs/core/architecture/images/treble_dto_bootloader.png?authuser=7&hl=ro)
如需创建和刷写设备树 blob,请执行以下操作:
1a. 使用设备树编译器 (
dtc
>) 将设备树源代码 (.dts
) 编译为设备树 blob (.dtb
)。设备树 blob 会格式化为扁平化设备树。1b. 将.dtb
文件刷写到引导加载程序在运行时可访问的位置(详见下文)。如需进行分区,请确定闪存中引导加载程序在运行时可访问的可信位置以放置
.dtb
。地点示例:启动分区 图 2. 将 .dtb
放在启动分区中,方法是将其附加到image.gz
,并作为“kernel
”传递给mkbootimg
。唯一分区 图 3. 将 .dtb
放在唯一分区(例如dtb
分区)中。如需加载设备树 blob 并启动内核,请执行以下操作:
- 将
.dtb
从存储空间加载到内存中。 - 使用所加载 DT 的内存地址来启动内核。
- 将
后续操作
本页详细介绍了引导加载程序加载 DT 的典型工作流程,并列出了常见的 DT 术语。本部分的其他页面介绍了如何实现引导加载程序支持,如何编译、验证和优化 DTO 以及如何使用多个 DT。您还可以获取关于 DTO 语法和必需的 DTO/DTBO 分区格式的详细信息。