Sintaks DTO

Format Device Tree Source (DTS) adalah representasi tekstual dari pohon perangkat. Device Tree Compiler (DTC) memproses format ini menjadi pohon perangkat biner, yang merupakan bentuk yang diharapkan oleh kernel Linux.

Menggunakan referensi

Proyek DTC (Device Tree compiler + overlay patch) menjelaskan format DTS dalam dtc-format.txt dan manual.txt . Format dan aturan DTO dijelaskan dalam dt-object-internal.txt . Dokumen-dokumen ini menjelaskan cara memperbarui DT utama menggunakan fragment@x dan sintaks __overlay__ dalam DT overlay. Sebagai contoh:

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

Namun, Google sangat menyarankan Anda untuk tidak menggunakan fragment@x dan sintaks __overlay__ , dan sebagai gantinya gunakan sintaks referensi. Sebagai contoh:

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

Sintaks referensi dikompilasi oleh dtc ke dalam objek yang sama seperti di atas menggunakan sintaks __overlay__ . Sintaks ini tidak memaksa Anda untuk memberi nomor pada fragmen, memungkinkan Anda membaca dan menulis overlay DTS dengan mudah. Jika dtc Anda tidak mendukung gula 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. Sebagai contoh:

/dts-v1/;
/plugin/;

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

Tentukan label di DT utama ... ... kemudian 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>;
};

Utama

Jika properti target referensi ada di DT utama, properti itu ditimpa setelah DTO; jika tidak, itu akan ditambahkan. Sebagai contoh:

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

menambahkan

Jika properti target referensi tidak ada di DT utama, properti itu ditambahkan setelah DTO. Sebagai contoh:

main.dts overlay.dts Hasil Penggabungan
[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 anak

Contoh sintaks simpul anak:

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