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