DTO 语法【转】

转自:https://source.android.google.cn/devices/architecture/dto/syntax?hl=zh-cn

设备树源 (DTS) 格式是设备树的文本表示形式。设备树编译器 (DTC) 可将这种格式处理为二进制设备树,这是 Linux 内核要求的形式。

使用引用

DTC(设备树编译器 + 叠加补丁程序)项目在 dtc-format.txt 和 manual.txt 中说明了 DTS 格式。在 dt-object-internal.txt 中说明了 DTO 格式和规则。这些文档说明了如何使用叠加 DT 中的节点 fragment@x 和语法 __overlay__ 来更新主 DT。例如:

    / {
      fragment@0 {
        target = <&some_node>;
          __overlay__ {
            some_prop = "okay";
            ...
          };
      };
    };
   
 

不过,Google 强烈建议您不要使用 fragment@x 和语法 __overlay__,而应使用引用语法。例如:

    &some_node {
      some_prop = "okay";
      ...
    };
   
 

dtc 会将引用语法编译成与使用语法 __overlay__ 所生成的上述对象相同的对象。此语法不强制您对片段进行编号,让您能够轻松地读取和写入叠加 DTS。如果您的 dtc 不支持此语法糖,请使用 AOSP 中的 dtc

使用标签

为了允许对编译时不存在的节点进行未定义的引用,叠加 DT .dts 文件的标头中必须带有 /plugin/ 标签。例如:

    /dts-v1/;
    /plugin/;
   
 

在这里,您可以使用引用来定位要叠加的节点,该引用是以“和”符号 (&) 作为前缀的绝对节点路径。例如,对于主 DT 中的 node@0

在主 DT 中定义标签......然后使用标签。

    [my_main_dt.dts]

    /dts-v1/;

    / {
      my_node: node@0 {
        status = "disabled";

        my_child: child@0 {
          value = <0xffffffff>;
        };
      };
    };
   
 

    [my_overlay_dt.dts]

    /dts-v1/;
    /plugin/;

    &my_node {
      status = "okay";
    };

    &my_child {
      value = <0x1>;
    };
   
 

替换

如果主 DT 中存在引用目标属性,则它会在 DTO 之后被替换;否则,它会被附加。例如:

main.dtsoverlay.dts合并结果

    [my_main_dt.dts]

    /dts-v1/;

    / {
      compatible = "corp,foo";

      my_node: node@0 {
        status = "disabled";
      };
    };
   
 

    [my_overlay_dt.dts]

    /dts-v1/;
    /plugin/;

    &my_node {
      status = "okay";
    };
   
 

    /dts-v1/;

    / {
      compatible = "corp,foo";

      ...

      node@0 {
        linux,phandle = <0x1>;
        phandle = <0x1>;
        status = "okay";
      };
    };
   
 

附加

如果主 DT 中不存在引用目标属性,则它会在 DTO 之后被附加。例如:

main.dtsoverlay.dts合并结果

    [my_main_dt.dts]

    /dts-v1/;

    / {
      compatible = "corp,foo";

      my_node: node@0 {
        status = "okay";
      };
    };
   
 

    [my_overlay_dt.dts]

    /dts-v1/;
    /plugin/;

    &my_node {
      new_prop = "bar";
    };
   
 

    /dts-v1/;

    / {
      compatible = "corp,foo";

      ...

      node@0 {
        linux,phandle = <0x1>;
        phandle = <0x1>;
        status = "okay";
        new_prop = "bar";
      };
    };
   
 

子节点

子节点语法示例:

main.dtsoverlay.dts合并结果

    [my_main_dt.dts]

    /dts-v1/;

    / {
      compatible = "corp,foo";

      my_nodes: nodes {
        compatible = "corp,bar";

        node@0 {
          status = "disabled";
        };
      };
    };
   
 

    [my_overlay_dt.dts]

    /dts-v1/;
    /plugin/;

    &my_nodes {
      new_prop1 = "abc";

      node@0 {
        status = "okay";
        new_prop2 = "xyz";
      };
    };
   
 

    /dts-v1/;

    / {
      compatible = "corp,foo";

      ...

      nodes {
        linux,phandle = <0x1>;
        phandle = <0x1>;
        compatible = "corp,bar";
        new_prop1 = "abc";

        node@0 {
          linux,phandle = <0x2>;
          phandle = <0x2>;
          status = "okay";
          new_prop2 = "xyz";
        };
      };
    };
   
原文地址:https://www.cnblogs.com/sky-heaven/p/12841917.html