DTO-Syntax

Das Device Tree Source (DTS)-Format ist eine Textdarstellung eines Gerätebaums. Der Device Tree Compiler (DTC) verarbeitet dieses Format zu einem binären Gerätebaum, der vom Linux-Kernel erwartet wird.

Referenzen verwenden

Das Projekt DTC (Device Tree Compiler + Overlay Patches) beschreibt das DTS-Format in dtc-format.txt und manual.txt . DTO-Format und -Regeln werden in dt-object-internal.txt beschrieben. Diese Dokumente beschreiben, wie das Haupt-DT mithilfe von Knotenfragment fragment@x und der Syntax __overlay__ in Overlay-DT aktualisiert wird. Zum Beispiel:

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

Google empfiehlt jedoch dringend, fragment@x und die Syntax __overlay__ nicht zu verwenden und stattdessen die Referenzsyntax zu verwenden. Zum Beispiel:

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

Die Referenzsyntax wird von dtc mithilfe der Syntax dtc in dasselbe Objekt wie oben __overlay__ . Diese Syntax zwingt Sie nicht, die Fragmente zu nummerieren, sodass Sie Overlay-DTS problemlos lesen und schreiben können. Wenn Ihr dtc diesen syntaktischen Zucker nicht unterstützt, verwenden Sie den dtc in AOSP .

Etiketten verwenden

Um undefinierte Verweise auf Knoten zuzulassen, die zum Zeitpunkt der Kompilierung nicht vorhanden sind, muss die Überlagerungs-DT .dts -Datei ein Tag /plugin/ in ihrem Header haben. Zum Beispiel:

/dts-v1/;
/plugin/;

Von hier aus können Sie die zu überlagernden Knoten mithilfe einer Referenz ansteuern, bei der es sich um einen absoluten Knotenpfad mit vorangestelltem kaufmännischem Und (&) handelt. Zum Beispiel für node@0 im Haupt-BMK:

Labels im Haupt-BMK definieren ... ... dann verwenden Sie die Etiketten.
[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>;
};

Überschreiben

Wenn die Referenzzieleigenschaft im Haupt-DT vorhanden ist, wird sie nach DTO überschrieben; andernfalls wird es angehängt. Zum Beispiel:

main.dts overlay.dts Zusammengeführtes Ergebnis
[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";
  };
};

Anhängen

Wenn die Referenzzieleigenschaft nicht im Haupt-DT vorhanden ist, wird sie nach DTO angehängt. Zum Beispiel:

main.dts overlay.dts Zusammengeführtes Ergebnis
[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";
  };
};

Untergeordnete Knoten

Beispiele für die Syntax untergeordneter Knoten:

main.dts overlay.dts Zusammengeführtes Ergebnis
[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";
    };
  };
};