使用多个 DT

许多 SoC 供应商和 ODM 支持在设备上使用多个设备树 (DT),从而使一个映像能够支持多个 SKU 或配置。在这种情况下,引导加载程序会识别硬件并在运行时加载相应的 DT

图 1. 引导加载程序中的多个设备树叠加层 (DTO)。

注意: 使用多个 DT 不是强制性的。

设置

要向 DTO 模型添加对多个 DT 的支持,请设置主 DT 列表和覆盖 DT 列表。

图 2. 针对多个 DT 的运行时 DTO 实现。

引导加载程序应能够

  • 读取 SoC ID 并选择相应的主 DT。
  • 读取板 ID 并相应地选择覆盖 DT 集。

运行时应仅选择一个主 DT 使用。可以选择多个覆盖 DT,但它们必须与所选的主 DT 兼容。使用多个覆盖可以帮助避免在 DTBO 分区中为每个板存储一个覆盖,并使引导加载程序能够根据板 ID(或可能通过探测外围设备)确定所需覆盖的子集。例如,板 A 可能需要覆盖 1、3 和 5 添加的设备,而板 B 可能需要覆盖 1、4 和 5 添加的设备。

分区

要分区,请在闪存中确定一个引导加载程序运行时可访问且受信任的位置,以存储 DTB 和 DTBO(引导加载程序必须能够在匹配过程中找到这些文件)。请记住,DTB 和 DTBO 不能存在于同一分区中。如果您的 DTB/DTBO 位于 dtb/dtbo 分区中,请使用DTB 和 DTBO 分区格式中详细介绍的表结构和标头格式。

在引导加载程序中运行

要运行

  1. 识别 SoC 并从存储加载相应的 .dtb 到内存中。
  2. 识别板 并从存储加载相应的 .dtbo 到内存中。
  3. .dtbo 覆盖到 .dtb 上,以成为合并后的 DT。
  4. 给定合并后的 DT 的内存地址,启动内核。