编译和验证

您可以使用设备树编译器 (DTC) 来编译设备树源文件。不过,在将叠加 DT 应用于目标主 DT 之前,您还应该通过模拟 DTO 的行为来验证结果。

通过 DTC 进行编译

使用 dtc 编译 .dts 时,您必须添加选项 -@ 以在生成的 .dtbo 中添加 __symbols__ 节点。__symbols__ 节点包含带标签的所有节点的列表,DTO 库可使用这个列表作为参考。

编译主 .dts 的示例命令:

dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts

编译叠加 DT .dts 的示例命令:

dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts

注意:如果您遇到 DTC 编译错误:invalid option --'@',则可能需要更新 DTC 版本。在 AOSP 上游,官方 DTC 对 DTO 的支持从版本 1.4.4 开始,而且大部分补丁程序在 2016 年 12 月后就完成了合并。为了支持 DTO,建议您使用 AOSP 中的 external/dtc,它已与最新的 DTC 同步(已视需要合并 DTO 补丁程序)。

在主机上验证 DTO 结果

验证流程可以帮助您识别将叠加 DT 放在主 DT 上时可能发生的错误。更新目标之前,您可以通过在 .dts 中使用 /include/ 来模拟 DTO 行为,从而在主机上验证叠加 DT 的结果。

注意/include/ 不支持在叠加 DT 源中使用 __overlay__

图 1 使用语法 /include/ 来模拟主机上的 DTO。

  1. 创建叠加 .dts 的副本。在副本中,移除第一行头文件。例如:
    /dts-v1/;
    /plugin/;
    
    将文件另存为 my_overlay_dt_wo_header.dts(或您希望的任何文件名)。
  2. 创建主 .dts 的副本。在副本中的最后一行后,为您在第 1 步中创建的文件附加包含语法。例如:
    /include/ "my_overlay_dt_wo_header.dts"
    
    将文件另存为 my_main_dt_with_include.dts(或您希望的任何文件名)。
  3. 使用 dtc 编译 my_main_dt_with_include.dts 以获得合并的 DT,这应该与使用 DTO 进行编译所得到的结果相同。例如:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. 使用 dtc 转储 my_merged_dt.dto
    dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb