DTO-Syntax

Das DTS-Format (Device Tree Source) ist eine Textdarstellung eines Gerätebaums. Der Device Tree Compiler (DTC) verarbeitet dieses Format in einen binären Gerätebaum, der der vom Linux-Kernel erwarteten Form entspricht.

Referenzen verwenden

Das DTC- Projekt (Device Tree Compiler + Overlay Patches) beschreibt das DTS-Format in dtc-format.txt und manual.txt . Das DTO-Format und die Regeln werden in dt-object-internal.txt beschrieben. In diesen Dokumenten wird beschrieben, wie das Haupt-DT mithilfe des Knotens fragment@x und der Syntax __overlay__ im Overlay-DT aktualisiert wird. Zum Beispiel:

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

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

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

Die Referenzsyntax wird von dtc mithilfe der Syntax __overlay__ in dasselbe Objekt wie oben kompiliert. Diese Syntax zwingt Sie nicht dazu, 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 .

Verwendung von Etiketten

Um undefinierte Verweise auf Knoten zu ermöglichen, die zur Kompilierungszeit nicht vorhanden sind, muss die Overlay-DT .dts Datei im Header das Tag /plugin/ enthalten. Zum Beispiel:

/dts-v1/;
/plugin/;

Von hier aus können Sie mithilfe einer Referenz, einem absoluten Knotenpfad, dem ein kaufmännisches Und-Zeichen (&) vorangestellt ist, auf die zu überlagernden Knoten abzielen. Zum Beispiel für node@0 im Haupt-DT:

Definieren Sie Beschriftungen im Haupt-DT ... ... dann nutzen 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 im Haupt-DT nicht 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";
    };
  };
};