डीटीबी इमेज

Android के लागू होने पर, बूटलोडर के इस्तेमाल के लिए डिवाइस ट्री ब्लॉब (डीटीबी) इमेज शामिल की जा सकती है. DTB चित्र का स्थान (और निर्दिष्ट करने के लिए विकल्प DTB इमेज पैरामीटर) Android रिलीज़ के बीच अलग-अलग होता है.

  • Android 11 में, Generic Kernel Image (GKI) का इस्तेमाल करने वाले डिवाइसों के लिए, वेंडर बूट पार्टिशन का काम करना ज़रूरी है. इसमें वेंडर से जुड़ी वह सारी जानकारी शामिल होती है जिसे बूट पार्टिशन से हटाकर यहां ले जाया गया है. डीटीबी इमेज में वेंडर का खास डेटा शामिल होता है. इसलिए, अब वाला हिस्सा है. डीटीबी इमेज पैरामीटर तय करने के लिए, वेंडर बूट हेडर देखें.

  • Android 10 में, डिवाइसों में डीटीबी इमेज को बूट पार्टीशन. डीटीबी इमेज पैरामीटर तय करने के लिए, बूट इमेज में डीटीबी इमेज शामिल करना देखें.

  • Android 9 और उससे पहले के वर्शन में, DTB इमेज या तो उसका खुद का विभाजन या कर्नेल को बनाने के लिए उसे कर्नेल image.gz में जोड़ा जाता है + डीटीबी इमेज (जिसे इसके बाद boot.img बनाने के लिए mkbootimg को भेज दिया जाता है).

डीटीबी इमेज फ़ॉर्मैट

Android 10 और उसके बाद के वर्शन में, DTB इमेज में किसी एक का इस्तेमाल करना ज़रूरी है नीचे दिए गए फ़ॉर्मैट में शामिल हैं:

  • एक के बाद एक जोड़े गए DT ब्लॉब. बूटलोडर, हर एफ़डीटी हेडर में मौजूद totalsize फ़ील्ड का इस्तेमाल करके, उससे जुड़े ब्लॉब को पढ़ता और पार्स करता है.

  • DTB/DTBO विभाजन. बूटलोडर में, सही DT ब्लॉब चुनने का एक बेहतर तरीका होता है. इसके लिए, dt_table_entry स्ट्रक्चर (इसमें id, rev, और custom फ़ील्ड होते हैं) की जांच की जाती है. इस स्ट्रक्चर में, एंट्री के लिए हार्डवेयर की पहचान करने वाली जानकारी हो सकती है. ज़्यादा जानकारी के लिए, डीटीबी/डीटीबीओ देखें सेगमेंट.

बूट इमेज में DTB इमेज शामिल करना

Android 10 वाले डिवाइसों में, बूट इमेज में DTB इमेज शामिल की जा सकती है. इससे Android को उन स्क्रिप्ट के साथ काम करने की ज़रूरत नहीं पड़ती जो DTB इमेज को कोर में image.gz में जोड़ती हैं. साथ ही, DTB प्लेसमेंट की पुष्टि करने और उसे स्टैंडर्ड बनाने के लिए, वेंडर टेस्ट सुइट (VTS) टेस्ट का इस्तेमाल करने की सुविधा मिलती है.

इसके अलावा, A/B डिवाइसों के लिए, DTB को अलग से बनाए गए पार्टीशन के बजाय रिकवरी इमेज के हिस्से के तौर पर रखना ज़्यादा सुरक्षित होता है. इससे, ओटीए के रुकने से होने वाली समस्याओं से बचा जा सकता है. ओटीए के दौरान, अगर डीटीबी पार्टीशन के बाद कोई समस्या आती है अपडेट होता है (लेकिन पूरा अपडेट पूरा होने से पहले), डिवाइस बूट करने की कोशिश करता है ओटीए पूरा करने के लिए रिकवरी मोड; हालांकि, DTB विभाजन में को पहले ही अपडेट कर दिया जाता है, तो हो सकता है कि रिकवरी इमेज (जिसमें अभी तक अपडेट नहीं हुई हैं). बूट इमेज फ़ॉर्मैट के हिस्से के तौर पर डीटीबी इमेज होने से, रिकवरी इमेज को अपने-आप काम करने लायक बनाकर, ऐसी समस्याओं से बचा जा सकता है. इसका मतलब है कि यह किसी दूसरे पार्टीशन पर निर्भर नहीं होती.

बूट इमेज स्ट्रक्चर

Android 10 वाले डिवाइसों में डीटीबी इमेज इस्तेमाल की जा सकती है निम्न बूट इमेज संरचना का उपयोग करके.

बूट इमेज सेक्शन पेजों की संख्या
बूट हेडर (1 पेज) 1
Kernel (l pages) l = (kernel_size + page_size - 1) / page_size
रैमडिस्क (मी पेज) m = (ramdisk_size + page_size - 1) / page_size
दूसरे चरण का बूटलोडर (n पेज) n = (second_size + page_size - 1) / page_size
रिकवरी डीटीबीओ (o पेज) o = (recovery_dtbo_size + page_size - 1) / page_size
डीटीबी (p पेज) p = (dtb_size + page_size - 1) / page_size

DTB का इमेज पाथ

Android 10 वर्शन वाले डिवाइसों के लिए, DTB का पाथ बताने के लिए mkbootimg.py टूल और नीचे दिए गए आर्ग्युमेंट इमेज.

आर्ग्यूमेंट ब्यौरा
dtb बूट/रिकवरी इमेज में शामिल की जाने वाली DTB इमेज का पाथ.
dtb_offset base आर्ग्युमेंट में जोड़ने पर, आखिरी डिवाइस ट्री के लिए फ़िज़िकल लोड पता उपलब्ध कराता है. उदाहरण के लिए, अगर base आर्ग्युमेंट 0x10000000 है और dtb_offset आर्ग्युमेंट 0x01000000 है, तो बूट इमेज के हेडर में dtb_addr_field को 0x11000000 के तौर पर पॉप्युलेट किया जाता है.

डीटीबी इमेज का पाथ बताने के लिए, बोर्ड कॉन्फ़िगरेशन वैरिएबल BOARD_PREBUILT_DTBIMAGE_DIR का इस्तेमाल करना ज़रूरी है. अगर डायरेक्ट्री BOARD_PREBUILT_DTBIMAGE_DIR में *.dtb एक्सटेंशन वाली एक से ज़्यादा फ़ाइलें मौजूद हैं, तो Android बिल्ड सिस्टम, फ़ाइलों को जोड़कर फ़ाइनल डीटीबी इमेज बनाता है. इसका इस्तेमाल, बूट इमेज बनाने के लिए किया जाता है.

mkbootimg.py को दिए गए तर्क dtb को बोर्ड कॉन्फ़िगरेशन वैरिएबल BOARD_PREBUILT_DTBIMAGE_DIR की मदद से तय डायरेक्ट्री BOARD_INCLUDE_DTB_IN_BOOTIMG को true पर सेट किया जाना चाहिए. उदाहरण के लिए:

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

आपके पास BOARD_MKBOOTIMG_ARGS बोर्ड में dtb_offset आर्ग्युमेंट जोड़ने का विकल्प है दूसरे ऑफ़सेट और हेडर वर्शन के साथ कॉन्फ़िगरेशन वैरिएबल. उदाहरण के लिए:

BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)

बूटलोडर से जुड़ी सहायता

Android 10 पर चलने वाले डिवाइसों पर VTS को सही तरीके से चलाने के लिए, यह ज़रूरी है कि बूटलोडर, अपडेट की गई बूट इमेज के साथ काम करता हो. साथ ही, चुने गए डिवाइस ट्री (DT) के इंडेक्स को दिखाने के लिए, androidboot.dtb_idx कर्नेल कमांड लाइन पैरामीटर जोड़ा जाना चाहिए. सिर्फ़ एक (1) इंडेक्स चुना जा सकता है. उदाहरण के लिए, androidboot.dtb_idx=N पैरामीटर N को बूटलोडर के ज़रिए चुने गए डिवाइस ट्री का शून्य-आधारित इंडेक्स बूट इमेज में DTB मौजूद हैं.