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