डीटीओ लागू करना

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

डीटी को बांटना

डीटी को दो हिस्सों में बांटकर शुरू करें:

  • मुख्य DT. सिर्फ़ SoC वाला हिस्सा और SoC वेंडर की ओर से उपलब्ध कराए गए डिफ़ॉल्ट कॉन्फ़िगरेशन.
  • ओवरले डीटी. डिवाइस के हिसाब से कॉन्फ़िगरेशन, जो ओडीएम/ओईएम उपलब्ध कराते हैं.

डीटी को अलग-अलग हिस्सों में बांटने के बाद, आपको यह पक्का करना होगा कि मुख्य डीटी और ओवरले डीटी एक-दूसरे के साथ काम करते हों. ऐसा इसलिए, ताकि मुख्य डीटी और ओवरले डीटी को मर्ज करने पर, डिवाइस के लिए पूरा डीटी तैयार हो सके. डीटीओ के फ़ॉर्मैट और नियमों के बारे में जानने के लिए, डीटीओ सिंटैक्स देखें. एक से ज़्यादा डीटी के बारे में जानकारी के लिए, एक से ज़्यादा डीटी का इस्तेमाल करना लेख पढ़ें.

मुख्य और ओवरले डीटी बनाना

मुख्य डीटी बनाने के लिए:

  1. मुख्य डीटी .dts को .dtb फ़ाइल में कंपाइल करें.
  2. .dtb फ़ाइल को बूटलोडर के रनटाइम में ऐक्सेस किए जा सकने वाले पार्टीशन में फ़्लैश करें. इसके बारे में [पार्टिशन डीटी](#partition) में ज़्यादा जानकारी दी गई है.

ओवरले डीटी बनाने के लिए:

  1. ओवरले डीटी .dts को .dtbo फ़ाइल में कंपाइल करें. यह फ़ाइल फ़ॉर्मैट, फ़्लैट किए गए डीटी के तौर पर फ़ॉर्मैट की गई .dtb फ़ाइल के जैसा ही है. हालांकि, फ़ाइल एक्सटेंशन अलग होने की वजह से, यह मुख्य डीटी से अलग है.
  2. .dtbo फ़ाइल को बूटलोडर के रनटाइम में ऐक्सेस किए जा सकने वाले पार्टीशन में फ़्लैश करें. इसके बारे में [पार्टिशन डीटी](#partition) में ज़्यादा जानकारी दी गई है.

होस्ट पर डीटीसी के साथ कंपाइल करने और डीटीओ के नतीजों की पुष्टि करने के बारे में ज़्यादा जानने के लिए, कंपाइल करना और पुष्टि करना लेख पढ़ें.

पार्टिशन किए गए डेटा ट्रांसफ़र

फ़्लैश मेमोरी में, बूटलोडर के रनटाइम के दौरान ऐक्सेस की जा सकने वाली और भरोसेमंद जगह तय करें, ताकि .dtb और .dtbo को वहां रखा जा सके.

मुख्य डीटी के लिए जगहों के उदाहरण:

  • बूट पार्टीशन का हिस्सा, कर्नल (image.gz) में जोड़ा गया
  • डेडीकेटेड पार्टीशन (dtb) में अलग-अलग डीटी ब्लॉब (.dtb)

ओवरले डीटी के लिए, जगह की जानकारी के उदाहरण:

पहली इमेज. .dtbo को odm पार्टीशन में रखें. ऐसा सिर्फ़ तब करें, जब आपके बूटलोडर में odm पार्टीशन के फ़ाइल सिस्टम से डेटा लोड करने की सुविधा हो.

दूसरी इमेज. .dtbo को किसी यूनीक पार्टीशन में रखें. जैसे, dtbo पार्टीशन.

ध्यान दें: ओवरले डीटी पार्टीशन का साइज़, डिवाइस और मुख्य डीटी ब्लॉब में किए जाने वाले बदलावों की संख्या पर निर्भर करता है. आम तौर पर, 8 एमबी का साइज़ काफ़ी होता है. साथ ही, अगर आने वाले समय में ज़रूरत पड़ती है, तो इसे बढ़ाया जा सकता है.

बिना किसी रुकावट के (A/B) अपडेट की सुविधा वाले डिवाइसों के लिए, मुख्य डीटी और ओवरले डीटी पार्टीशन का A/B टेस्ट करें:

तीसरी इमेज. DTBO पार्टीशन A/B, उदाहरण 1.

चौथी इमेज. DTBO पार्टीशन A/B, दूसरा उदाहरण.

बूटलोडर में चलाएं

इसे चलाने के लिए:

पांचवीं इमेज. बूटलोडर में डीटीओ के लिए, सामान्य तौर पर रनटाइम लागू करना.

  1. स्टोरेज से .dtb को मेमोरी में लोड करें.
  2. स्टोरेज से .dtbo को मेमोरी में लोड करें.
  3. मर्ज किए गए डीटी के तौर पर, .dtb को .dtbo के साथ ओवरले करें.
  4. मर्ज किए गए डीटी के मेमोरी पते के हिसाब से कर्नल शुरू करें.

कंपैटिबिलिटी बनाए रखना

एसओसी वेंडर से मिले मुख्य DTB को DTBO के लिए एपीआई सरफेस के तौर पर इस्तेमाल किया जाता है. डीटी को SoC के सामान्य हिस्से और डिवाइस के हिसाब से हिस्से में बांटने के बाद, आपको यह पक्का करना होगा कि आने वाले समय में ये दोनों हिस्से एक-दूसरे के साथ काम करें. इसके लिए, आपको ये काम करने होंगे:

  • मुख्य डीटी में डीटी की परिभाषा. उदाहरण के लिए, नोड, प्रॉपर्टी, लेबल. मुख्य डीटी में डेफ़िनिशन में हुए किसी भी बदलाव से, ओवरले डीटी में बदलाव हो सकते हैं. उदाहरण के लिए, मुख्य डीटी में किसी नोड के नाम को ठीक करने के लिए, "alias" लेबल तय करें. यह लेबल, नोड के मूल नाम पर मैप करता है, ताकि ओवरले डीटी में बदलाव न हो.
  • डीटी स्टोर की जगह का ओवरले. उदाहरण के लिए, पार्टीशन का नाम, स्टोर का फ़ॉर्मैट.

सुरक्षा पक्का करना

बूटलोडर को यह पक्का करना होगा कि DTB या DTBO सुरक्षित हो, उसमें कोई बदलाव न किया गया हो, और वह खराब न हो. डीटीबी या डीटीबीओ को सुरक्षित करने के लिए, किसी भी समाधान का इस्तेमाल किया जा सकता है. उदाहरण के लिए, VBoot 1.0 में बूट इमेज सिग्नेचर या VBoot 2.0 में AVB हैश फ़ुटर.

  • अगर DTB या DTBO किसी यूनीक पार्टीशन में है, तो उस पार्टीशन को AVB के ट्रस्ट चेन में जोड़ा जा सकता है. भरोसे की चेन, हार्डवेयर से सुरक्षित रूट ऑफ़ ट्रस्ट से शुरू होती है और बूटलोडर तक जाती है. बूटलोडर, DTB या DTBO पार्टीशन की इंटिग्रिटी और पुष्टि करता है.
  • अगर DTB या DTBO किसी मौजूदा पार्टिशन (जैसे कि odm पार्टिशन) में है, तो वह पार्टिशन AVB की ट्रस्ट चेन में होना चाहिए. (DTBO पार्टीशन, odm पार्टीशन के साथ सार्वजनिक कुंजी शेयर कर सकता है).

ज़्यादा जानकारी के लिए, पुष्टि किया गया बूट लेख पढ़ें.