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 di dt-object-internal.txt . Dokumen-dokumen ini menjelaskan cara memperbarui DT utama menggunakan node fragment@x dan sintaks __overlay__ di overlay DT. Misalnya:

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

Namun, Google sangat menyarankan Anda untuk tidak menggunakan fragment@x dan sintaksis __overlay__ , melainkan menggunakan sintaksis referensi. Misalnya:

&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 memberi nomor pada fragmen, memungkinkan Anda membaca dan menulis DTS overlay 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 overlay DT .dts harus memiliki tag /plugin/ di headernya. Misalnya:

/dts-v1/;
/plugin/;

Dari sini Anda dapat menargetkan node untuk 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 ... ... lalu 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>;
};

Utama

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

utama.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 tersebut ditambahkan setelah DTO. Misalnya:

utama.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 sintaksis simpul anak:

utama.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";
    };
  };
};