Sintaksis DTO

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

Menggunakan referensi

Project DTC (device Tree compiler + overlay patches) menjelaskan format DTS dalam dtc-format.txt dan manual.txt. Format dan aturan DTO dijelaskan dalam dt-object-internal.txt. Dokumen ini menjelaskan cara memperbarui 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 menggunakan 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 untuk memberi nomor pada fragmen, sehingga Anda dapat membaca dan menulis overlay DTS dengan mudah. Jika dtc Anda tidak mendukung syntactic sugar ini, gunakan dtc di AOSP.

Menggunakan label

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

/dts-v1/;
/plugin/;

Dari sini, Anda dapat menargetkan node yang akan ditumpuk menggunakan referensi, yang merupakan 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 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";
    };
  };
};