संकलन और सत्यापन

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

डीटीसी के साथ संकलन

का उपयोग करते समय dtc को संकलित करने के .dts , आप विकल्प को जोड़ना होगा -@ एक जोड़ने के लिए __symbols__ जिसके परिणामस्वरूप में नोड .dtbo__symbols__ नोड सभी नोड्स, जो डीटीओ पुस्तकालय संदर्भ के लिए उपयोग कर सकते हैं कि एक लेबल के साथ चिह्नित कर रहे हैं की एक सूची है।

नमूना आदेश मुख्य डीटी का निर्माण करने के .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

होस्ट पर डीटीओ परिणाम सत्यापित करें

सत्यापन आपको उन त्रुटियों की पहचान करने में मदद कर सकता है जो ओवरले डीटी को मुख्य डीटी पर रखते समय हो सकती हैं। लक्ष्य को अद्यतन करने से पहले, आप का उपयोग कर डीटीओ के व्यवहार का अनुकरण करके मेजबान पर डीटी डालने की परिणाम सत्यापित कर सकते हैं /include/ में .dts

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

एंड्रॉइड 9 में डीटीओ सत्यापित करना

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

लागू किए गए ओवरले का संकेत

सक्षम करने के लिए विक्रेता टेस्ट सुइट (वीटीएस) ओवरले आवेदन की शुद्धता का आकलन करने के लिए, विक्रेताओं एक नया कर्नेल कमांड लाइन पैरामीटर जोड़ना होगा androidboot.dtbo_idx कि DTBO विभाजन से चयनित ओवरले इंगित करता है। Android 12 में कर्नेल संस्करण 5.10 या उच्चतर का उपयोग करते हुए, यह पैरामीटर bootconfig से होकर गुजरता है। उदाहरण के लिए, पैरामीटर androidboot. dtbo_idx=x,y,z रिपोर्ट x , y और z DTBO विभाजन से डिवाइस ट्री ओवरले (DTOs) के शून्य आधारित सूचकांक के रूप में आधार डिवाइस ट्री (डीटी) के लिए बूटलोडर द्वारा (इसी क्रम में) लागू होता है।

ओवरले मुख्य उपकरण पेड़ से नोड्स लिए आवेदन कर सकते हैं या नए नोड्स जोड़ने के लिए, लेकिन एक नोड पिछले एक ओवरले में जोड़ा का उल्लेख नहीं कर सकते हैं। यह प्रतिबंध आवश्यक है क्योंकि ओवरले एप्लिकेशन मुख्य डीटी प्रतीक तालिका के साथ ओवरले प्रतीक तालिका को मर्ज नहीं करता है (विलय नहीं होने से प्रतीक नामों में टकराव और ओवरले के बीच निर्भरता की जटिलता से बचा जाता है)।

उदाहरण: अमान्य ओवरले

इस उदाहरण में, overlay_2.dts नोड को संदर्भित करता है e , जिसके द्वारा जोड़ा गया है overlay_1.dts । बाद overlay_1 मुख्य डीटी लिए आवेदन किया है, अगर एक प्रयास लागू करने के लिए किया जाता है overlay_2 परिणामी डीटी के लिए, ओवरले आवेदन एक त्रुटि के साथ विफल हो जाएगा कि प्रतीक e आधार डीटी के लिए प्रतीक तालिका में मौजूद नहीं है।

main.dts ओवरले_1.डीटीएस ओवरले_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 , संपत्ति के मूल्य prop नोड में e (द्वारा सेट overlay_1.dts ) द्वारा मूल्य सेट द्वारा ओवरराइट है overlay_2.dts

main.dts ओवरले_1.डीटीएस ओवरले_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 विभाजन छवि से DTO के शून्य-आधारित सूचकांकों ने इसे आधार DT (उसी क्रम में) पर लागू किया।
    • सूचकांकों को DTBO विभाजन में ओवरले की स्थिति का उल्लेख करना चाहिए।

DTBO विभाजन की संरचना पर जानकारी के लिए, का उल्लेख डिवाइस ट्री ओवरले source.android.com पर।

DTBO विभाजन का सत्यापन

आप निम्नलिखित को सत्यापित करने के लिए वीटीएस का उपयोग कर सकते हैं:

  • कर्नेल कमांड लाइन पैरामीटर के अस्तित्व androidboot.dtbo_idx (जाँच कि द्वारा Init अपने आप संगत की स्थापना की है ro.boot.dtbo_idx प्रणाली संपत्ति)।
  • की वैधता ro.boot.dtbo_idx प्रणाली संपत्ति (है कि संपत्ति को निर्दिष्ट कम से कम एक वैध DTBO छवि सूचकांक की जाँच करके)।
  • DTBO विभाजन की वैधता (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";
	};
};