DTO-Syntax

Das Device Tree Source-Format (DTS) ist eine textuelle Darstellung eines Gerätebaums (Device Tree, DT). Der Gerätebaum-Compiler (DTC) verarbeitet dieses Format in einen binären Gerätebaum, der vom Linux-Kernel erwartet wird.

Verweise verwenden

Im DTC -Projekt (Device Tree Compiler + Overlay-Patches) wird das DTS-Format in den Dateien dtc-format.txt und manual.txtbeschrieben. Das DTO-Format und die Regeln werden in dt-object-internal.txt beschrieben. In diesen Dokumenten wird beschrieben, wie Sie den Haupt-Gerätebaum mit dem Knoten fragment@x und der Syntax __overlay__ im Overlay-Gerätebaum aktualisieren. Beispiel:

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

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

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

Die Referenzsyntax wird von dtc in dasselbe Objekt wie oben mit der Syntax __overlay__ kompiliert. Bei dieser Syntax müssen Sie die Fragmente nicht nummerieren, sodass Sie Overlay-DTS einfach lesen und schreiben können. Wenn Ihr dtc diese syntaktische Vereinfachung nicht unterstützt, verwenden Sie den DTC in AOSP.

Labels verwenden

Damit undefinierte Verweise auf Knoten möglich sind, die zur Kompilierungszeit nicht vorhanden sind, muss die Overlay-DT-Datei .dts im Header ein Tag /plugin/ haben. Beispiel:

/dts-v1/;
/plugin/;

Hier können Sie die Knoten, die überlagert werden sollen, mit einem Verweis ansprechen. Ein Verweis ist ein absoluter Knotenpfad mit einem kaufmännischen Und (&) als Präfix. Beispiel für node@0 im Haupt-Gerätebaum:

Labels im Haupt-Gerätebaum definieren… … und dann die Labels verwenden.
[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 Referenzziel-Property im Haupt-Gerätebaum vorhanden ist, wird sie nach dem DTO überschrieben. Andernfalls wird sie 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 Referenzziel-Property im Haupt-DT nicht vorhanden ist, wird sie nach dem DTO angehängt. 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";
    };
  };
};