डिवाइस ट्री सोर्स (डीटीएस) फ़ाइलों को कंपाइल करने के लिए, डिवाइस ट्री कंपाइलर (डीटीसी) का इस्तेमाल किया जा सकता है. हालांकि, टारगेट किए गए मुख्य डीटी पर ओवरले डिवाइस ट्री (डीटी) लागू करने से पहले, आपको डिवाइस ट्री ओवरले (डीटीओ) के व्यवहार को सिम्युलेट करके नतीजे की पुष्टि भी करनी चाहिए.
डीटीसी के साथ कंपाइल करें
.dts को कंपाइल करने के लिए dtc का इस्तेमाल करते समय, आपको -@ विकल्प जोड़ना होगा, ताकि नतीजे के तौर पर मिले .dtbo में __symbols__ नोड जोड़ा जा सके. __symbols__ नोड में, लेबल किए गए सभी नोड की सूची होती है. DTO लाइब्रेरी, इस सूची का इस्तेमाल रेफ़रंस के लिए कर सकती है.
मुख्य डीटी .dts बनाने के लिए, कमांड का उदाहरण:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
ओवरले डीटी .dts बनाने के लिए सैंपल कमांड:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
होस्ट पर DTO के नतीजों की पुष्टि करना
पुष्टि करने से, आपको उन गड़बड़ियों का पता लगाने में मदद मिल सकती है जो मुख्य डीटी पर ओवरले डीटी को रखते समय हो सकती हैं. टारगेट अपडेट करने से पहले, .dts में /include/ का इस्तेमाल करके, होस्ट पर डीटी ओवरले करने के नतीजे की पुष्टि की जा सकती है. इसके लिए, डीटीओ के व्यवहार का सिम्युलेशन किया जाता है.

पहली इमेज. होस्ट पर डीटीओ को सिम्युलेट करने के लिए, /include/ सिंटैक्स का इस्तेमाल करें.
- ओवरले
.dtsकी कॉपी बनाएं. कॉपी में, पहली लाइन का हेडर हटाएं. उदाहरण: फ़ाइल को/dts-v1/; /plugin/;
my_overlay_dt_wo_header.dtsके तौर पर सेव करें. इसके अलावा, फ़ाइल को किसी भी नाम से सेव किया जा सकता है. - मुख्य
.dtsकी कॉपी बनाएं. कॉपी में, आखिरी लाइन के बाद, पहले चरण में बनाई गई फ़ाइल के लिए include सिंटैक्स जोड़ें. उदाहरण के लिए: फ़ाइल को/include/ "my_overlay_dt_wo_header.dts"
my_main_dt_with_include.dtsके तौर पर सेव करें. इसके अलावा, फ़ाइल को किसी भी नाम से सेव किया जा सकता है. - मर्ज़ किया गया DT पाने के लिए,
dtcका इस्तेमाल करकेmy_main_dt_with_include.dtsको कंपाइल करें. यह DTO के बराबर होना चाहिए. उदाहरण के लिए:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
my_merged_dt.dtoको डंप करने के लिए,dtcका इस्तेमाल करें.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Android 9 में डीटीओ की पुष्टि करना
Android 9 के लिए, डिवाइस ट्री ब्लॉब ओवरले (डीटीबीओ) पार्टिशन की ज़रूरत होती है. SoC DT में नोड जोड़ने या प्रॉपर्टी में बदलाव करने के लिए, बूटलोडर को SoC DT पर डिवाइस के हिसाब से डीटी को डाइनैमिक तौर पर ओवरले करना होगा.
इस्तेमाल किए गए ओवरले दिखाएं
वेंडर टेस्ट सुइट (वीटीएस) को ओवरले ऐप्लिकेशन की जांच करने की अनुमति देने के लिए, वेंडर को एक नया कर्नल कमांड लाइन पैरामीटर androidboot.dtbo_idx जोड़ना होगा. इससे पता चलेगा कि DTBO पार्टीशन से कौनसे ओवरले चुने गए हैं. Android 12 में, कर्नेल वर्शन 5.10 या इसके बाद के वर्शन का इस्तेमाल करने पर, यह पैरामीटर बूट कॉन्फ़िगरेशन से होकर गुज़रता है.
उदाहरण के लिए, पैरामीटर androidboot.dtbo_idx=x,y,z, x, y, और z को DTBO पार्टीशन से लागू किए गए DTO के ज़ीरो-आधारित इंडेक्स के तौर पर रिपोर्ट करता है. इन्हें बूटलोडर, बेस DT पर लागू करता है.
ओवरले, मुख्य डीटी के नोड पर लागू हो सकते हैं या नए नोड जोड़ सकते हैं. हालांकि, वे पिछले ओवरले में जोड़े गए नोड का रेफ़रंस नहीं दे सकते. यह पाबंदी ज़रूरी है, क्योंकि ओवरले ऐप्लिकेशन, ओवरले सिंबल टेबल को मुख्य डीटी सिंबल टेबल के साथ मर्ज नहीं करता है. मर्ज न करने से, सिंबल के नामों में टकराव नहीं होता. साथ ही, ओवरले के बीच डिपेंडेंसी की समस्या भी नहीं होती.
उदाहरण: अमान्य ओवरले
इस उदाहरण में, overlay_2.dts का मतलब नोड e से है , जिसे overlay_1.dts ने जोड़ा था. मुख्य DT पर overlay_1 लागू होने के बाद, अगर नतीजे के तौर पर मिले DT पर overlay_2 लागू करने की कोशिश की जाती है, तो ओवरले ऐप्लिकेशन में गड़बड़ी होती है. इसमें बताया जाता है कि सिंबल e, बेस DT के लिए सिंबल टेबल में मौजूद नहीं है.
| main.dts | overlay_1.dts | overlay_2.dts |
|---|---|---|
[main.dts]
/dts-v1/;
/ {
a: a {};
b: b {};
c: c {};
};
|
[overlay_1.dts]
/dts-v1/;
/plugin/;
&b { ref1 = <&a>;
e: e {
prop = <0x0a>;
phandle = <0x04>;
};
};
|
[overlay_2.dts]
/dts-v1/;
/plugin/;
/* invalid! */
&e {
prop = <0x0b>;
};
|
उदाहरण: मान्य ओवरले
इस उदाहरण में, overlay_2.dts सिर्फ़ मुख्य DTS के नोड b को दिखाता है. जब overlay_1 को बेस डीटी पर लागू किया जाता है, तो इसके बाद overlay_2 का ऐप्लिकेशन लागू होता है. ऐसे में, नोड e में मौजूद प्रॉपर्टी prop की वैल्यू (overlay_1.dts से सेट की गई) को overlay_2.dts से सेट की गई वैल्यू से बदल दिया जाता है.
| main.dts | overlay_1.dts | overlay_2.dts |
|---|---|---|
[final.dts]
/dts-v1/;
/ {
a: a {};
b: b {};
c: c {};
};
|
[overlay_1.dts]
/dts-v1/;
/plugin/;
&b { ref1 = <&a>;
e {
prop = <0x0c>;
};
};
|
[overlay_2.dts]
/dts-v1/;
/plugin/;
/* valid */
&b { ref1 = <&c>;
e {
prop = <0x0d>;
};
};
|
DTBO पार्टीशन लागू करना
ज़रूरी DTBO पार्टिशन को लागू करने के लिए, पक्का करें कि बूटलोडर ये काम कर सकता हो:
- उस बोर्ड की पहचान करें जिस पर यह चल रहा है और लागू किए जाने वाले उससे जुड़े ओवरले चुनें.
androidboot.dtbo_idxपैरामीटर को कर्नेल कमांड लाइन में जोड़ें.- इस पैरामीटर से, DTBO पार्टीशन इमेज के उन डीटीओ के ज़ीरो-आधारित इंडेक्स का पता चलना चाहिए जिन्हें बेस डीटी पर लागू किया गया है. ये इंडेक्स उसी क्रम में होने चाहिए.
- इंडेक्स, DTBO पार्टीशन में ओवरले की पोज़िशन के बारे में बताते हैं.
DTBO पार्टीशन के स्ट्रक्चर के बारे में जानने के लिए, डिवाइस ट्री ओवरले देखें.
DTBO पार्टीशन की पुष्टि करना
वीटीएस का इस्तेमाल करके, इनकी पुष्टि की जा सकती है:
- कर्नल कमांड लाइन पैरामीटर मौजूद है या नहीं
androidboot.dtbo_idx(यह जांच करके किInitनेro.boot.dtbo_idxसिस्टम प्रॉपर्टी को अपने-आप सेट अप किया है या नहीं). ro.boot.dtbo_idxsystem प्रॉपर्टी की वैधता. इसके लिए, यह जांच की जाती है कि प्रॉपर्टी में कम से कम एक मान्य DTBO इमेज इंडेक्स मौजूद है या नहीं.- DTBO पार्टीशन की वैधता. यह DTBO पार्टीशन में मौजूद उन ओवरले की भी पुष्टि करता है जो बेस DT पर लागू होते हैं.
- इसके बाद, Linux कर्नल को डीटी में मौजूद अतिरिक्त नोड या प्रॉपर्टी में हुए बदलावों के बारे में बताया जाता है.
उदाहरण के लिए, यहां दिए गए ओवरले और फ़ाइनल डीटी में, कर्नल कमांड लाइन में androidboot.dtbo_idx=5,3 जोड़ने पर पुष्टि हो जाती है. हालांकि, कर्नल कमांड लाइन में androidboot.dtbo_idx=3,5 जोड़ने पर पुष्टि नहीं होती.
| तीसरे इंडेक्स पर ओवरले डीटी | अनुक्रमणिका 5 पर ओवरले DT |
|---|---|
[overlay_1.dts]
/dts-v1/;
/plugin/;
&c { prop = <0xfe>; };
|
[overlay_2.dts]
/dts-v1/;
/plugin/;
&c { prop = <0xff>; };
|
| फ़ाइनल डीटी |
|---|
/dts-v1/;
/ {
a {
phandle = <0x1>;
};
b {
phandle = <0x2>;
};
c {
phandle = <0x3>;
prop = <0xfe>;
};
__symbols__ {
a = "/a";
b = "/b";
c = "/c";
};
};
|