DTO-Syntax

Das DTS-Format (Device Tree Source) ist eine Textdarstellung einer Gerätestruktur. Der Device Tree Compiler (DTC) verarbeitet dieses Format in einen binären DT, Dies ist die vom Linux-Kernel erwartete Form.

Verweise verwenden

DTC (device Tree Compiler + Overlay-Patches) beschreibt das DTS-Format in dtc-format.txt und manual.txt festlegen. Das Format und die Regeln für DTOs werden unter dt-object-internal.txt. In diesen Dokumenten wird beschrieben, wie der Haupt-DT mithilfe des Knotens aktualisiert wird. fragment@x und Syntax __overlay__ in Overlay-DT. Für Beispiel:

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

Google empfiehlt jedoch dringend, die Verwendung nicht fragment@x und der Syntax __overlay__. Verwenden Sie stattdessen die Methode Referenzsyntax. Beispiel:

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

Die Referenzsyntax wird von dtc in dasselbe Objekt kompiliert wie die und verwenden Sie dabei die Syntax __overlay__. Diese Syntax zwingt Sie nicht dazu, nummerieren, sodass Sie Overlay-DTS einfach lesen und schreiben können. Wenn Ihr dtc unterstützt diesen syntaktischen Zucker nicht. Verwende den DTC in AOSP.

Labels verwenden

Um undefinierte Verweise auf Knoten zuzulassen, die zum Zeitpunkt der Kompilierung nicht vorhanden sind, Die Overlay-DT-Datei .dts muss das Tag /plugin/ in ihrer Header. Beispiel:

/dts-v1/;
/plugin/;

Von hier aus können Sie die zu überlagernden Knoten mithilfe einer Referenz ausrichten, Ein absoluter Knotenpfad mit dem Präfix eines kaufmännischen Und (&). Beispiel: node@0 im Haupt-DT:

Labels in Haupt-DT definieren ... ... und verwenden Sie dann die Labels.
[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 überschrieben. nach DTO; andernfalls wird er angehängt. 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 im Haupt-DT nicht vorhanden ist, angehängt wird. 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";
    };
  };
};