Cihaz ağacı kaynağı (DTS) biçimi, cihaz ağacının (DT) metin biçimindeki gösterimidir. Cihaz ağacı derleyicisi (DTC), bu biçimi Linux çekirdeği tarafından beklenen biçim olan ikili DT'ye dönüştürür.
Referansları kullanma
DTC
(Device Tree Compiler + Overlay Patches) projesi, DTS biçimini
dtc-format.txt
ve
manual.txt dosyalarında açıklar.
DTO biçimi ve kuralları dt-object-internal.txt dosyasında açıklanmıştır.
Bu belgelerde, yer paylaşımı DT'sinde düğüm fragment@x ve söz dizimi __overlay__ kullanılarak ana DT'nin nasıl güncelleneceği açıklanmaktadır. Örneğin:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Ancak Google, fragment@x ve __overlay__ söz dizimini kullanmamanızı, bunun yerine referans söz dizimini kullanmanızı önemle tavsiye eder. Örneğin:
&some_node {
some_prop = "okay";
...
};Referans söz dizimi, dtc tarafından __overlay__ söz dizimi kullanılarak yukarıdakiyle aynı nesneye derlenir. Bu söz dizimi, parçaları numaralandırmanızı gerektirmez. Böylece, DTS'yi kolayca okuyabilir ve yazabilirsiniz. dtc, bu söz dizimi kolaylığını desteklemiyorsa AOSP'deki dtc'yi kullanın.
Etiketleri kullanma
Derleme sırasında bulunmayan düğümlere tanımlanmamış referanslara izin vermek için, overlay DT .dts dosyasının üstbilgisinde /plugin/ etiketi bulunmalıdır. Örneğin:
/dts-v1/; /plugin/;
Buradan, bir referans kullanarak yerleştirilecek düğümleri hedefleyebilirsiniz. Bu referans, "ve" işareti (&) ile öneklenmiş mutlak bir düğüm yoludur. Örneğin, ana DT'deki node@0 için:
| Ana DT'de etiketleri tanımlayın. | ... ardından etiketleri kullanın. |
|---|---|
[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>; }; |
Geçersiz kıl
Referans hedef mülk ana DT'de varsa DTO'dan sonra geçersiz kılınır, aksi takdirde eklenir. Örneğin:
| main.dts | overlay.dts | Birleştirilmiş sonuç |
|---|---|---|
[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"; }; }; |
Ekle
Referans hedef mülk ana DT'de yoksa DTO'nun sonuna eklenir. Örneğin:
| main.dts | overlay.dts | Birleştirilmiş sonuç |
|---|---|---|
[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"; }; }; |
Alt düğümler
Alt düğüm söz dizimi örnekleri:
| main.dts | overlay.dts | Birleştirilmiş sonuç |
|---|---|---|
[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"; }; }; }; |