कंपाइल करके पुष्टि करें

डिवाइस ट्री सोर्स (डीटीएस) को कंपाइल करने के लिए, डिवाइस ट्री कंपाइलर (डीटीसी) का इस्तेमाल किया जा सकता है फ़ाइलें शामिल हैं. हालांकि, टारगेट मुख्य डीटी पर ओवरले डिवाइस ट्री (डीटी) लागू करने से पहले, आपको को डिवाइस ट्री ओवरले (डीटीओ) के व्यवहार को सिम्युलेट करके भी नतीजे की पुष्टि की जानी चाहिए.

डीटीसी के साथ कंपाइल करें

.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/ का इस्तेमाल करें.

  1. ओवरले .dts की एक कॉपी बनाएं. कॉपी में से, फ़र्स्ट लाइन हेडर. उदाहरणः
    /dts-v1/;
    /plugin/;
    
    फ़ाइल को my_overlay_dt_wo_header.dts (या किसी भी तरीके से) के रूप में सेव करें फ़ाइल नाम डालें).
  2. मुख्य .dts की कॉपी बनाएं. कॉपी में, आखिरी लाइन में, पहले चरण में बनाई गई फ़ाइल के लिए इनक्लूड सिंटैक्स जोड़ें. जैसे:
    /include/ "my_overlay_dt_wo_header.dts"
    
    फ़ाइल को my_main_dt_with_include.dts (या किसी भी तरीके से) के रूप में सेव करें फ़ाइल नाम डालें).
  3. कंपाइल करने के लिए dtc का इस्तेमाल करें मर्ज किया गया DT पाने के लिए my_main_dt_with_include.dts, जो यह होना चाहिए DTO के समान परिणाम हो. जैसे:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. 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 विभाजन लागू करने के लिए, पक्का करें कि बूटलोडर फ़ॉलो किया जा रहा है:

  1. उस बोर्ड की पहचान करें जिस पर यह चल रहा है और संबंधित बोर्ड चुनें लागू किए जाएंगे.
  2. 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";
	};
};