Sintaksis DTO

Format sumber hierarki perangkat (DTS) adalah representasi tekstual dari hierarki perangkat (DT). {i>Device tree compiler<i} (DTC) memproses format ini menjadi DT biner, yang merupakan bentuk yang diharapkan oleh {i>kernel<i} Linux.

Gunakan referensi

DTC ({i>device Tree compiler + overlay patch<i}) menjelaskan format DTS dalam dtc-format.txt dan manual.txt. Format dan aturan DTO dijelaskan di 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 dengan di atas menggunakan sintaksis __overlay__. Sintaks ini tidak memaksa Anda untuk memberi nomor fragmen, memungkinkan Anda untuk membaca dan menulis DTS overlay dengan mudah. Jika dtc tidak mendukung sugar sintaksis ini, gunakan dtc di AOSP.

Menggunakan label

Untuk memungkinkan referensi yang tidak terdefinisi ke node yang tidak ada pada waktu kompilasi, file .dts DT overlay harus memiliki tag /plugin/ dalam {i>header<i}. Contoh:

/dts-v1/;
/plugin/;

Dari sini, Anda dapat menargetkan node untuk dihamparkan menggunakan referensi, yang jalur simpul absolut yang diawali dengan tanda dan (&). Misalnya, untuk node@0 di DT utama:

Tentukan label di DT utama ... ... kemudian gunakan labelnya.
[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 ini akan diganti setelah DTO; jika tidak, elemen 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, 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";
    };
  };
};