आप डिवाइस ट्री सोर्स फ़ाइलों को संकलित करने के लिए डिवाइस ट्री कंपाइलर (डीटीसी) का उपयोग कर सकते हैं। हालाँकि, लक्ष्य मुख्य डीटी पर ओवरले डीटी लगाने से पहले, आपको डीटीओ के व्यवहार का अनुकरण करके परिणाम को भी सत्यापित करना चाहिए।
डीटीसी के साथ संकलन
.dts
संकलित करने के लिए dtc
उपयोग करते समय, आपको परिणामी .dtbo
में __symbols__
नोड जोड़ने के लिए -@
विकल्प जोड़ना होगा। __symbols__
नोड में एक लेबल के साथ चिह्नित सभी नोड्स की एक सूची होती है, जिसे DTO लाइब्रेरी संदर्भ के लिए उपयोग कर सकती है।
मुख्य 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
होस्ट पर डीटीओ परिणाम सत्यापित करें
सत्यापन आपको उन त्रुटियों की पहचान करने में मदद कर सकता है जो ओवरले डीटी को मुख्य डीटी पर रखते समय हो सकती हैं। लक्ष्य को अद्यतन करने से पहले, आप .dts
में /include/
उपयोग करके DTO के व्यवहार का अनुकरण करके होस्ट पर DT को ओवरले करने के परिणाम को सत्यापित कर सकते हैं।
/include/
का उपयोग करें- ओवरले
.dts
की एक प्रति बनाएँ। कॉपी में, पहली पंक्ति का हेडर हटा दें. उदाहरण:/dts-v1/; /plugin/;
फ़ाइल कोmy_overlay_dt_wo_header.dts
(या कोई भी फ़ाइल नाम जो आप चाहते हैं) के रूप में सहेजें। - मुख्य
.dts
की एक प्रतिलिपि बनाएँ। कॉपी में, अंतिम पंक्ति के बाद, चरण 1 में आपके द्वारा बनाई गई फ़ाइल के लिए शामिल सिंटैक्स जोड़ें। उदाहरण के लिए:/include/ "my_overlay_dt_wo_header.dts"
फ़ाइल कोmy_main_dt_with_include.dts
(या कोई भी फ़ाइल नाम जो आप चाहते हैं) के रूप में सहेजें। - मर्ज किए गए DT को प्राप्त करने के लिए
my_main_dt_with_include.dts
संकलित करने के लिएdtc
उपयोग करें, जिसका परिणाम 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
एंड्रॉइड 9 में डीटीओ का सत्यापन
एंड्रॉइड 9 को डिवाइस ट्री ब्लॉब ओवरले (डीटीबीओ) विभाजन की आवश्यकता है। SoC DT में नोड्स जोड़ने या गुणों में परिवर्तन करने के लिए, बूटलोडर को SoC DT पर एक डिवाइस विशिष्ट DT को गतिशील रूप से ओवरले करना होगा।
लागू ओवरले का संकेत
ओवरले एप्लिकेशन की शुद्धता का आकलन करने के लिए विक्रेता परीक्षण सूट (वीटीएस) को सक्षम करने के लिए, विक्रेताओं को एक नया कर्नेल कमांड लाइन पैरामीटर androidboot.dtbo_idx
जोड़ना होगा जो डीटीबीओ विभाजन से चयनित ओवरले को इंगित करता है। कर्नेल संस्करण 5.10 या उससे अधिक का उपयोग करने वाले एंड्रॉइड 12 में, यह पैरामीटर बूटकॉन्फिग से गुजरता है। उदाहरण के लिए, पैरामीटर androidboot.dtbo_idx=x,y,z
बूटलोडर द्वारा आधार पर लागू DTBO विभाजन से डिवाइस ट्री ओवरले (DTOs) के शून्य-आधारित सूचकांक के रूप में x
, y
और z
की रिपोर्ट करता है। डिवाइस ट्री (डीटी)।
ओवरले मुख्य डिवाइस ट्री से नोड्स पर लागू हो सकते हैं या नए नोड्स जोड़ सकते हैं, लेकिन पिछले ओवरले में जोड़े गए नोड को संदर्भित नहीं कर सकते । यह प्रतिबंध आवश्यक है क्योंकि ओवरले एप्लिकेशन ओवरले प्रतीक तालिका को मुख्य डीटी प्रतीक तालिका के साथ विलय नहीं करता है (विलय नहीं करने से प्रतीक नामों में टकराव और ओवरले के बीच निर्भरता की जटिलता से बचा जाता है)।
उदाहरण: अमान्य ओवरले
इस उदाहरण में, overlay_2.dts
नोड e
को संदर्भित करता है, जिसे overlay_1.dts
द्वारा जोड़ा गया था। overlay_1
को मुख्य डीटी पर लागू करने के बाद, यदि परिणामी डीटी पर overlay_2
लागू करने का प्रयास किया जाता है, तो ओवरले एप्लिकेशन एक त्रुटि के साथ विफल हो जाएगा कि प्रतीक e
आधार डीटी के लिए प्रतीक तालिका में मौजूद नहीं है।
मुख्य.डीटीएस | ओवरले_1.dts | ओवरले_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
मुख्य डीटीएस से केवल नोड b
को संदर्भित करता है। जब overlay_1
आधार डीटी पर लागू किया जाता है, उसके बाद overlay_2
का अनुप्रयोग किया जाता है, तो नोड e
में प्रॉपर्टी prop
का मूल्य ( overlay_1.dts
द्वारा निर्धारित) overlay_2.dts
द्वारा निर्धारित मूल्य से अधिलेखित हो जाता है।
मुख्य.डीटीएस | ओवरले_1.dts | ओवरले_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 विभाजन की संरचना के विवरण के लिए, source.android.com पर डिवाइस ट्री ओवरले देखें।
DTBO विभाजन को मान्य करना
आप निम्नलिखित को सत्यापित करने के लिए वीटीएस का उपयोग कर सकते हैं:
- कर्नेल कमांड लाइन पैरामीटर
androidboot.dtbo_idx
का अस्तित्व (यह जाँच कर किInit
ने स्वचालित रूप से संबंधितro.boot.dtbo_idx
सिस्टम प्रॉपर्टी सेट कर ली है)। -
ro.boot.dtbo_idx
सिस्टम प्रॉपर्टी की वैधता (यह जाँच कर कि प्रॉपर्टी कम से कम एक वैध DTBO छवि सूचकांक निर्दिष्ट करती है)। - डीटीबीओ विभाजन की वैधता (डीटीबीओ विभाजन में ओवरले को भी सत्यापित करती है जो आधार डीटी पर लागू होते हैं)।
- परिणामी डीटी में अतिरिक्त नोड्स या संपत्ति परिवर्तन लिनक्स कर्नेल में प्रस्तुत किए जाते हैं।
उदाहरण के लिए, निम्नलिखित ओवरले और अंतिम DT में, कर्नेल कमांड लाइन में androidboot.dtbo_idx=5,3
जोड़ने से सत्यापन पास हो जाता है, लेकिन कर्नेल कमांड लाइन में androidboot.dtbo_idx=3,5
जोड़ने से सत्यापन पास नहीं होता है।
सूचकांक 3 पर ओवरले डीटी | इंडेक्स 5 पर ओवरले डीटी |
---|---|
[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"; }; }; |
इस पेज पर मौजूद कॉन्टेंट और कोड सैंपल कॉन्टेंट के लाइसेंस में बताए गए लाइसेंस के हिसाब से हैं. Java और OpenJDK, Oracle और/या इससे जुड़ी हुई कंपनियों के ट्रेडमार्क या रजिस्टर किए हुए ट्रेडमार्क हैं.
आखिरी बार 2024-03-18 (UTC) को अपडेट किया गया.