Format sumber hierarki perangkat (DTS) adalah representasi tekstual dari hierarki perangkat (DT). Compiler hierarki perangkat (DTC) memproses format ini menjadi DT biner, yang merupakan bentuk yang diharapkan oleh kernel Linux.
Menggunakan referensi
Project DTC
(compiler Hierarki perangkat + patch overlay) menjelaskan format DTS dalam
dtc-format.txt
dan
manual.txt.
Format dan aturan DTO dijelaskan dalam
dt-object-internal.txt.
Dokumen ini menjelaskan cara mengupdate 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 gunakan
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
memberi nomor fragmen, sehingga Anda dapat membaca dan menulis DTS overlay dengan mudah. Jika
dtc
Anda tidak mendukung 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. Contoh:
/dts-v1/; /plugin/;
Dari sini, Anda dapat menargetkan node yang akan ditempatkan menggunakan referensi, yaitu
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 akan 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"; }; }; }; |