Składnia DTO

Format źródła drzewa urządzeń (DTS) to tekstowa reprezentacja drzewa urządzeń. Kompilator drzewa urządzeń (DTC) przetwarza ten format w binarne drzewo urządzeń, które jest formą oczekiwaną przez jądro Linuksa.

Korzystanie z referencji

Projekt DTC (kompilator drzewa urządzeń + łaty nakładki) opisuje format DTS w plikach dtc-format.txt i manual.txt . Format i zasady DTO są opisane w dt-object-internal.txt . Dokumenty te opisują sposób aktualizacji głównego ID przy użyciu węzła fragment@x i składni __overlay__ w nakładkowym ID. Na przykład:

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

Jednak Google zdecydowanie zaleca, aby nie używać fragment@x i składni __overlay__ , a zamiast tego używać składni referencyjnej. Na przykład:

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

Składnia odniesienia jest kompilowana przez dtc do tego samego obiektu, co powyższy, przy użyciu składni __overlay__ . Ta składnia nie wymusza numerowania fragmentów, umożliwiając łatwy odczyt i zapis nakładki DTS. Jeśli twój dtc nie obsługuje tego cukru składniowego, użyj dtc w AOSP .

Korzystanie z etykiet

Aby umożliwić niezdefiniowane odniesienia do węzłów, które nie są obecne w czasie kompilacji, plik nakładki DT .dts musi mieć w nagłówku znacznik /plugin/ . Na przykład:

/dts-v1/;
/plugin/;

Stąd możesz wskazać węzły, które mają zostać nałożone, za pomocą odniesienia, czyli bezwzględnej ścieżki węzła poprzedzonej znakiem ampersand (&). Na przykład dla node@0 w głównym ID:

Zdefiniuj etykiety w głównym ID... ... następnie skorzystaj z etykiet.
[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>;
};

Nadrzędny

Jeśli właściwość celu referencyjnego istnieje w głównym ID, zostanie ona nadpisana po DTO; w przeciwnym razie jest on dołączony. Na przykład:

główne.dts nakładka.dts Połączony wynik
[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";
  };
};

Dołączanie

Jeśli właściwość celu referencyjnego nie istnieje w głównym ID, jest ona dodawana po DTO. Na przykład:

główne.dts nakładka.dts Połączony wynik
[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";
  };
};

Węzły podrzędne

Przykłady składni węzła podrzędnego:

główne.dts nakładka.dts Połączony wynik
[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";
    };
  };
};