Składnia DTO

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Format DTS (Device Tree Source) to tekstowa reprezentacja drzewa urządzeń. Kompilator drzewa urządzeń (DTC) przetwarza ten format na binarne drzewo urządzeń, które jest formą oczekiwaną przez jądro systemu Linux.

Korzystanie z referencji

Projekt DTC (Device Tree compiler + overlay patches) opisuje format DTS w dtc-format.txt i manual.txt . Format i reguły DTO są opisane w dt-object-internal.txt . Dokumenty te opisują, jak zaktualizować główny ID przy użyciu węzła fragment@x i składni __overlay__ w nakładce 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 referencyjna 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 łatwe odczytywanie i zapisywanie nakładek DTS. Jeśli twój dtc nie obsługuje tego cukru składniowego, użyj dtc w AOSP .

Korzystanie z etykiet

Aby zezwolić na niezdefiniowane odniesienia do węzłów nieobecnych w czasie kompilacji, plik .dts nakładki DT musi mieć w nagłówku znacznik /plugin/ . Na przykład:

/dts-v1/;
/plugin/;

Stąd możesz kierować na węzły, które mają zostać nałożone, używając odniesienia, które jest bezwzględną ścieżką węzła poprzedzoną znakiem ampersand (&). Na przykład dla node@0 w głównym ID:

Zdefiniuj etykiety w głównym ID... ... następnie użyj 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ść docelowa odniesienia istnieje w głównym ID, jest zastępowana po DTO; w przeciwnym razie jest dołączany. Na przykład:

main.dts nakładka.dts Scalony 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żeli właściwość docelowa odniesienia nie istnieje w głównym ID, jest dołączana po DTO. Na przykład:

main.dts nakładka.dts Scalony 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 potomne

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

main.dts nakładka.dts Scalony 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";
    };
  };
};