设备树叠加层 (DTO) 扩展了现有的扁平化设备树 (FDT) 实现,让用户空间可以通过加载用于修改原始数据的额外叠加层 FDT,在运行时修改内核中的初始设备树数据。Android 不要求在运行时从用户空间更新 DT blob,而是建议供应商借助 libfdt
或 libufdt
在引导加载程序中添加设备树补丁程序。
Android DTO 支持
Android 对 DTO 的支持因 Android 版本而异:
- Android 7.x 及更低版本不要求提供设备树支持,也没有针对供应商如何将 DT blob 传递给内核或在何处存储这些 blob 提供建议。
- Android 8.x 建议提供设备树支持,以将内核的板专属部分和仅限 SoC 访问的部分区分开来。
- Android 9 及更高版本要求必须存在设备树 blob 叠加层 (DTBO) 分区并且至少应用一个 DTO。
DTO 分区要求
大多数 Android 设备都会在构建时将 DT blob 附加到内核,而引导加载程序会从内核加载 blob。不过,由于 DT blob 被视为系统芯片 (SoC) 内核的一部分,因此 Android 对如何构建或存储 DT blob 没有特定要求。设备可以将 DT blob 附加到内核,也可以将 blob 存储在单独的分区中;唯一的要求是引导加载程序应该知道如何加载以及从何处加载 DT blob。
如需支持 DTO,设备应具备以下条件:
- 每个内核映像都应具有一个适用于板专属 DT 叠加层的 DTBO 分区,并且引导加载程序必须知道从何处以及如何加载 SoC 专属 DTB。分区大小取决于编译 SoC 内核所需的更改量;选择分区大小时需要为未来更新留出空间,通常,8 MB 大小的分区已绰绰有余。
- 针对 A/B 设备更新了 DTO 分区。恢复内核与 Android 内核相同,但分区必须针对 A/B 设备设置,因为这样才可以通过无线下载 (GOTA) 更新进行更新。分区大小取决于设备以及主 SoC 内核 DT Blob 上所需的更改数量。
DTO 引导加载程序要求
要支持 DTO,引导加载程序应具备以下条件:
- 知道如何以及从何处(考虑使用 A/B 设备的启动槽)以供应商独有的方式加载 SoC 专属 DT blob(通常是从内核映像的末端提取,因为 blob 会附加到内核)。
- 知道如何以及从何处以供应商独有的方式加载叠加层 DT Blob。
- 将组合设备树传递给内核之前,使用叠加层修补主 DT blob。
如需详细了解如何在引导加载程序中添加对 DTO 的支持,请参阅设备树叠加层。