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