Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

DTO語法

設備樹源(DTS)格式是設備樹的文本表示形式。設備樹編譯器(DTC)將這種格式處理為二進制設備樹,這是Linux內核期望的形式。

使用參考

DTC (設備樹編譯器+覆蓋修補程序)項目在dtc- format.txtmanual.txt中描述了DTS格式。 DTO格式和規則在dt-object-internal.txt中進行了描述。這些文檔描述瞭如何在覆蓋DT中使用節點fragment@x和語法__overlay__更新主DT。例如:

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

然而,谷歌強烈建議您不要使用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.dts overlay.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.dts overlay.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.dts overlay.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";
    };
  };
};