Format sumber device tree (DTS) adalah representasi tekstual dari device tree (DT). Compiler device tree (DTC) memproses format ini menjadi DT biner, yang merupakan format yang diharapkan oleh kernel Linux.
Menggunakan referensi
Project DTC
(device Tree compiler + overlay patches) menjelaskan format DTS dalam
dtc-format.txt
dan
manual.txt.
Format dan aturan DTO dijelaskan dalam
dt-object-internal.txt.
Dokumen ini menjelaskan cara memperbarui 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 menggunakan
sintaksis referensi. Contoh:
&some_node { some_prop = "okay"; ... };
Sintaksis referensi dikompilasi oleh dtc
ke dalam objek yang sama seperti di atas menggunakan sintaksis __overlay__
. Sintaksis ini tidak memaksa Anda untuk memberi nomor pada fragmen, sehingga Anda dapat membaca dan menulis overlay DTS dengan mudah. Jika
dtc
Anda tidak mendukung syntactic sugar ini, gunakan
dtc
di AOSP.
Menggunakan label
Untuk mengizinkan referensi yang tidak ditentukan ke node yang tidak ada pada waktu kompilasi, file DT overlay .dts
harus memiliki tag /plugin/
di header-nya. Contoh:
/dts-v1/; /plugin/;
Dari sini, Anda dapat menargetkan node yang akan ditumpuk menggunakan referensi, yang merupakan jalur node absolut yang diawali dengan ampersand (&). Misalnya, untuk node@0
di DT utama:
Menentukan label di DT utama ... | ... lalu 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>; }; |
Ganti
Jika properti target referensi ada di DT utama, properti tersebut akan diganti setelah DTO; jika tidak, properti 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, properti tersebut 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"; }; }; }; |