自 2025 年 3 月 27 日起,我们建议您使用 android-latest-release
而非 aosp-main
构建 AOSP 并为其做出贡献。如需了解详情,请参阅 AOSP 的变更。
设备树叠加层
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
设备树 (DT) 是用于描述“不可发现”硬件的命名节点和属性构成的一种数据结构。内核(例如在 Android 中使用的 Linux 内核)会使用 DT 来支持 Android 设备使用的各种硬件配置。硬件供应商会提供自己的设备树源 (DTS) 文件,系统会使用设备树编译器将这些文件编译到设备树 Blob (DTB) 文件中。随后,这些文件将供引导加载程序使用。DTB 文件包含二进制格式的扁平化设备树。
设备树叠加层 (DTO) 可让主要的 DTB 叠加在 DT(设备树 Blob 叠加层 (DTBO))上。使用 DTO 的引导加载程序可以维护系统芯片 (SoC) DT,并动态叠加设备特定的 DT,从而向树中添加节点并对现有树中的属性进行更改。
Android 9 版本中的更新
在 Android 9 中,在将统一 DTB 传递给内核之前,引导加载程序不得修改 DTO 中定义的属性。
加载 DT
在引导加载程序中加载 DT 会涉及到构建、分区和运行。

图 1. 在引导加载程序中加载设备树的典型实现。
如需创建和刷写 DTB,请执行以下操作:
1a. 使用 DTC (dtc
) 将 DTS (.dts
) 编译成 DTB (.dtb
)。DTB 的格式为扁平化 DT。
1b. 将 .dtb
文件刷写到引导加载程序在运行时可访问的位置(详见下文)。
如需进行分区,请确定闪存中引导加载程序在运行时可访问的可信位置以放置 .dtb
。地点示例:

图 2. 将 .dtb 放在启动分区中,方法是:将其附加到 image.gz,并将其作为“内核”传递给 mkbootimg。
|

图 3. 将 .dtb 放在专属分区(例如 dtb 分区)中。
|
如需加载 DTB 并启动内核,请执行以下操作:
- 将
.dtb
从存储空间加载到内存中。
- 使用所加载 DT 的内存地址来启动内核。
后续操作
本页详细介绍了引导加载程序加载 DT 的典型工作流程,并列出了常见的 DT 术语。本部分的其他页面介绍了如何实现引导加载程序支持,如何编译、验证和优化 DTO 以及如何使用多个 DT。您还可以获取关于 DTO 语法和必需的 DTO 和 DTBO 分区格式的详细信息。
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-03-09。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-03-09。"],[],[],null,["# Device tree overlays\n\n\u003cbr /\u003e\n\nA *device tree (DT)* is a data structure of named nodes and properties that\ndescribe non-discoverable hardware. Kernels, such as the Linux kernel\nused in Android, use DTs to support a wide range of hardware configurations used\nby Android-powered devices. Hardware vendors supply their own *device tree\nsource (DTS)* files, which are compiled into the *device tree blob (DTB)* file\nusing the *device tree compiler* . These files are then used by the\nbootloader. The DTB file contains a binary-formatted *flattened device tree*.\n\nA [*device tree overlay (DTO)*](https://lkml.org/lkml/2012/11/5/615)\nenables a central DTB to be overlaid on the DT (a *device tree blob\nfor overlay (DTBO)*). A bootloader using DTO can maintain the system-on-chip\n(SoC) DT and dynamically overlay a device-specific DT, adding nodes to the tree\nand making changes to properties in the existing tree.\n\nUpdates in Android 9 release\n----------------------------\n\nIn Android 9, the bootloader must not modify the\nproperties defined in the DTOs before passing the unified DTB to the kernel.\n\nLoad a DT\n---------\n\nLoading a DT in bootloader involves building, partitioning, and running.\n\n**Figure 1.** Typical implementation for loading device tree in bootloader.\n\n1. To create and flash the DTB:\n\n 1a. Use the DTC (`dtc`) to compile DTS (`.dts`) into a DTB (`.dtb`).\n The DTB is formatted as a flattened DT.\n 1b. Flash the `.dtb` file into a bootloader runtime-accessible location\n (detailed below).\n2. To partition, determine a bootloader runtime-accessible and trusted location\n in flash memory to put `.dtb`. Example locations:\n\n \u003cbr /\u003e\n\n |-----------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------|\n | **Figure 2.** Put .dtb in a boot partition by appending to image.gz and passing as \"kernel\" to mkbootimg. | **Figure 3.** Put .dtb in a unique partition (for example, dtb partition). |\n\n \u003cbr /\u003e\n\n3. To load the DTB and start the kernel:\n\n - Load `.dtb` from storage into memory.\n - Start kernel using the memory address of the loaded DT.\n\nWhat's next?\n------------\n\nThis page details a typical bootloader workflow for loading a DT and provides\na list of common DT terms. Other pages in this section describe how to\n[implement bootloader support](/docs/core/architecture/dto/implement), how to\n[compile](/docs/core/architecture/dto/compile), verify, and\n[optimize your DTO](/docs/core/architecture/dto/optimize), and how to\n[use multiple DTs](/docs/core/architecture/dto/multiple). You can\nalso get details on [DTO syntax](/docs/core/architecture/dto/syntax) and\nrequired\n[DTO and DTBO partition formatting](/docs/core/architecture/dto/partitions)."]]