Składnia DTO

Format źródła drzewa urządzeń (DTS) to tekstowa reprezentacja drzewa urządzeń (DT). Kompilator drzewa urządzeń (DTC) przetwarza ten format na binarny plik przenoszenia danych, w formacie oczekiwanym przez jądro Linuksa.

Korzystaj z plików referencyjnych

DTC Projekt (kompilator drzewa + łatki nakładek) opisuje format DTS w dtc-format.txt oraz manual.txt. Format i reguły organizacji DTO opisano w dt-object-internal.txt. Te dokumenty opisują, jak zaktualizować główny plik przenoszenia danych za pomocą węzła fragment@x i składnia __overlay__ w nakładce przenoszenia danych. Dla: przykład:

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

Jednak zdecydowanie zalecamy, aby nie używać fragment@x i składni __overlay__, a zamiast tego użyj składni odwołania. Na przykład:

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

Składnia odwołania jest skompilowana przez funkcję dtc do tego samego obiektu co powyżej, używając składni __overlay__. Ta składnia nie wymusza na Tobie ponumerować fragmenty, co ułatwia ich odczytywanie i zapisywanie. Jeśli dtc nie obsługuje tego cukru składniowego, użyj makra dtc w AOSP.

Używanie etykiet

Aby umożliwić niezdefiniowane odwołania do węzłów, których nie było w czasie kompilacji, funkcja plik .dts przenoszenia danych nakładki musi zawierać tag /plugin/ nagłówek. Na przykład:

/dts-v1/;
/plugin/;

Tutaj możesz ustawić kierowanie na węzły, które mają być nakładane, za pomocą odwołania, czyli bezwzględna ścieżka węzła poprzedzona znakiem &. Na przykład w przypadku funkcji node@0 w głównym interfejsie przenoszenia danych:

Zdefiniuj etykiety w głównym pliku przenoszenia danych ... ... a potem 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>;
};

Zastąp

Jeśli referencyjna właściwość docelowa znajduje się w głównym pliku przenoszenia danych, zostanie zastąpiona po organizacji obsługi klienta; w przeciwnym razie zostanie dołączone. Na przykład:

main.dts. nakładek.dts Wynik scalony
[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łącz

Jeśli referencyjnej właściwości docelowej nie ma w głównym pliku przenoszenia danych, jest ona dołączany po DTO. Na przykład:

main.dts. nakładek.dts Wynik scalony
[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łów podrzędnych:

main.dts. nakładek.dts Wynik scalony
[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";
   
};
 
};
};