Sintaksis DTO

Format sumber hierarki perangkat (DTS) adalah representasi tekstual dari hierarki perangkat (DT). Compiler hierarki perangkat (DTC) memproses format ini menjadi DT biner, yang merupakan bentuk yang diharapkan oleh kernel Linux.

Menggunakan referensi

Project DTC (compiler Hierarki perangkat + patch overlay) menjelaskan format DTS dalam dtc-format.txt dan manual.txt. Format dan aturan DTO dijelaskan dalam dt-object-internal.txt. Dokumen ini menjelaskan cara mengupdate DT utama menggunakan node fragment@x dan sintaksis __overlay__ di DT overlay. Contoh:

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

Namun, Google sangat menyarankan agar Anda tidak menggunakan fragment@x dan sintaksis __overlay__, dan sebagai gantinya gunakan sintaksis referensi. Contoh:

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

Sintaksis referensi dikompilasi oleh dtc ke dalam objek yang sama seperti di atas menggunakan sintaksis __overlay__. Sintaksis ini tidak memaksa Anda memberi nomor fragmen, sehingga Anda dapat membaca dan menulis DTS overlay dengan mudah. Jika dtc Anda tidak mendukung sintaksis ini, gunakan dtc di AOSP.

Menggunakan label

Untuk mengizinkan referensi yang tidak ditentukan ke node yang tidak ada pada waktu kompilasi, file DT .dts overlay harus memiliki tag /plugin/ di header-nya. Contoh:

/dts-v1/;
/plugin/;

Dari sini, Anda dapat menargetkan node yang akan ditempatkan menggunakan referensi, yaitu jalur node absolut yang diawali dengan ampersand (&). Misalnya, untuk node@0 di DT utama:

Menentukan label di DT utama ... ... lalu gunakan label.
[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>;
};

Ganti

Jika properti target referensi ada di DT utama, properti tersebut akan diganti setelah DTO; jika tidak, properti tersebut akan ditambahkan. Contoh:

main.dts overlay.dts Hasil Gabungan
[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";
  };
};

Cantelkan

Jika properti target referensi tidak ada di DT utama, properti tersebut akan ditambahkan setelah DTO. Contoh:

main.dts overlay.dts Hasil Gabungan
[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";
  };
};

Node turunan

Contoh sintaksis node turunan:

main.dts overlay.dts Hasil Gabungan
[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";
    };
  };
};