डिवाइस ट्री सोर्स (डीटीएस) को कंपाइल करने के लिए, डिवाइस ट्री कंपाइलर (डीटीसी) का इस्तेमाल किया जा सकता है फ़ाइलें शामिल हैं. हालांकि, टारगेट मुख्य डीटी पर ओवरले डिवाइस ट्री (डीटी) लागू करने से पहले, आपको को डिवाइस ट्री ओवरले (डीटीओ) के व्यवहार को सिम्युलेट करके भी नतीजे की पुष्टि की जानी चाहिए.
डीटीसी के साथ कंपाइल करें
.dts
को कंपाइल करने के लिए dtc
का इस्तेमाल करते समय, आपको यह जोड़ना होगा
इसमें __symbols__
नोड जोड़ने के लिए, -@
विकल्प
नतीजे के तौर पर .dtbo
मिलेगा. __symbols__
नोड में एक
लेबल से मार्क किए गए सभी नोड की सूची. डीटीओ लाइब्रेरी इसका इस्तेमाल कर सकती है
देखें.
मुख्य DT .dts
बनाने के लिए सैंपल कमांड:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
ओवरले DT .dts
बनाने के लिए सैंपल कमांड:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dtsअभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
होस्ट पर डीटीओ के नतीजों की पुष्टि करें
पुष्टि से, आपको उन गड़बड़ियों की पहचान करने में मदद मिल सकती है जो
ओवरले DT को मुख्य DT पर डालें. टारगेट अपडेट करने से पहले,
के व्यवहार को सिम्युलेट करके, होस्ट पर DT को ओवरले करने का नतीजा
.dts
में /include/
.
पहला डायग्राम. होस्ट पर डीटीओ को सिम्युलेट करने के लिए, सिंटैक्स /include/ का इस्तेमाल करें.
- ओवरले
.dts
की एक कॉपी बनाएं. कॉपी में से, फ़र्स्ट लाइन हेडर. उदाहरणः/dts-v1/; /plugin/;
फ़ाइल कोmy_overlay_dt_wo_header.dts
(या किसी भी तरीके से) के रूप में सेव करें फ़ाइल नाम डालें). - मुख्य
.dts
की कॉपी बनाएं. कॉपी में, आखिरी लाइन में, पहले चरण में बनाई गई फ़ाइल के लिए इनक्लूड सिंटैक्स जोड़ें. जैसे:/include/ "my_overlay_dt_wo_header.dts"
फ़ाइल कोmy_main_dt_with_include.dts
(या किसी भी तरीके से) के रूप में सेव करें फ़ाइल नाम डालें). - कंपाइल करने के लिए
dtc
का इस्तेमाल करें मर्ज किया गया DT पाने के लिए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 के लिए, डिवाइस ट्री ब्लॉब ओवरले की ज़रूरत है (DTBO) विभाजन. SoC में नोड जोड़ने या प्रॉपर्टी में बदलाव करने के लिए DT, बूटलोडर को डिवाइस के हिसाब से DT को डाइनैमिक तौर पर ओवरले करना चाहिए SoC DT शामिल है.
लागू किए गए ओवरले दिखाएं
को सक्षम करने के लिए
ओवरले की सटीक जानकारी का आकलन करने के लिए वेंडर टेस्ट सुइट (वीटीएस) का इस्तेमाल करें
ऐप्लिकेशन, वेंडर को नया kernel कमांड लाइन पैरामीटर जोड़ना होगा
androidboot.dtbo_idx
, जो यहां से चुने गए ओवरले दिखाते हैं
DTBO विभाजन. Android 12 में, कर्नेल वर्शन का इस्तेमाल करने वाले वर्शन
5.10 या उसके बाद वाले वर्शन पर है, तो यह पैरामीटर बूट कॉन्फ़िगरेशन से गुज़रता है.
उदाहरण के लिए, पैरामीटर androidboot.dtbo_idx=x,y,z
इसके शून्य-आधारित इंडेक्स के रूप में x
, y
, और z
डीटीबीओ विभाजन से लागू किए गए डीटीओ (इस क्रम में)
बूटलोडर से बेस DT तक.
ओवरले मुख्य डीटी से नोड पर लागू हो सकते हैं या नए नोड जोड़ सकते हैं. लेकिन पिछले ओवरले में जोड़े गए नोड को नहीं जोड़ा जा सकता. यह प्रतिबंध आवश्यक है क्योंकि ओवरले ऐप मुख्य DT सिंबल टेबल के साथ ओवरले सिंबल टेबल (मर्ज किए जाने से बचा नहीं जाता) सिंबल के नामों और जटिलता के बीच टकराव होने की वजह से ओवरले होता है).
उदाहरण: अमान्य ओवरले
इस उदाहरण में, overlay_2.dts
का मतलब नोड के बारे में है
e
, जिसे इन्होंने जोड़ा
overlay_1.dts
. overlay_1
के लागू होने के बाद
मुख्य DT, अगर overlay_2
को
नतीजे के तौर पर, DT का इस्तेमाल करके ओवरले ऐप्लिकेशन काम नहीं करता है और इस गड़बड़ी को ठीक करने के लिए,
जिसके लिए सिंबल टेबल में e
मौजूद नहीं है
बेस डीटी.
मुख्य.डीटीएस | ओवरले_1.dts | ओवरले_2.डीटीएस |
---|---|---|
[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
सिर्फ़ नोड के बारे में बताता है
मुख्य डीटीएस से b
. टास्क कब शुरू होगा
overlay_1
को बेस डीटी पर लागू किया जाता है. इसके बाद, इस वैल्यू को चुना जाता है
overlay_2
का ऐप्लिकेशन, प्रॉपर्टी का मान
e
नोड में prop
(overlay_1.dts
से सेट किया गया)
overlay_2.dts
.
मुख्य.डीटीएस | ओवरले_1.dts | ओवरले_2.डीटीएस |
---|---|---|
[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 विभाजन चित्र से बेस DT पर लागू किया गया है (उसी में ऑर्डर).
- इंडेक्स को डीटीबीओ में ओवरले की स्थिति के हिसाब से जानकारी देनी चाहिए विभाजन.
डीटीबीओ पार्टीशन की संरचना के बारे में जानने के लिए, डिवाइस ट्री ओवरले देखें.
DTBO विभाजन की पुष्टि करें
वीटीएस का इस्तेमाल करके, इन बातों की पुष्टि की जा सकती है:
- कर्नेल कमांड लाइन पैरामीटर मौजूद है
androidboot.dtbo_idx
(यह देखकर किInit
ने इससे जुड़ाro.boot.dtbo_idx
सिस्टम अपने-आप सेट अप हो जाएगा प्रॉपर्टी). ro.boot.dtbo_idx
सिस्टम प्रॉपर्टी की वैधता (इसके हिसाब से) यह जांचना कि प्रॉपर्टी में कम से कम एक मान्य DTBO इमेज मौजूद है या नहीं इंडेक्स).- DTBO विभाजन की वैधता (DTBO में ओवरले की भी पुष्टि करता है) विभाजन) जो बेस DT पर लागू होता है.
- नतीजे के तौर पर मिलने वाले डीटी में दूसरे नोड या प्रॉपर्टी में होने वाले बदलाव दिखाए जाते हैं Linux कर्नेल में जोड़ा जा सकता है.
उदाहरण के लिए, नीचे दिए गए ओवरले और फ़ाइनल डीटी में,
androidboot.dtbo_idx=5,3
कर्नेल कमांड लाइन के पास से गुज़रता है
पुष्टि किया जा सकता है लेकिन कर्नेल में androidboot.dtbo_idx=3,5
जोड़ा जा रहा है
आदेश पंक्ति सत्यापन को पास नहीं करती.
इंडेक्स 3 पर ओवरले DT | इंडेक्स 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>; }; सी { phandle = <0x3>; प्रॉप = <0xfe>; }; __सिंबल__ { a = "/a"; b = "/b"; c = "/c"; }; }; |