डीटीबी इमेज

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

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

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

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

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

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

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

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

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

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

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

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

Android 10 वाले डिवाइसों में, बूट इमेज के इस स्ट्रक्चर का इस्तेमाल करके डीटीबी इमेज शामिल की जा सकती है.

बूट इमेज सेक्शन पेजों की संख्या
बूट हेडर (एक पेज) 1
कर्नेल (l पेज) l = (kernel_size + page_size - 1) / page_size
Ramdisk (m पेज) 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

डीटीबी इमेज का पाथ

Android 10 वाले डिवाइसों के लिए, 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 बिल्ड सिस्टम, फ़ाइलों को जोड़कर फ़ाइनल डीटीबी इमेज बनाता है. इसका इस्तेमाल, बूट इमेज बनाने के लिए किया जाता है.

BOARD_PREBUILT_DTBIMAGE_DIR से तय की गई डायरेक्ट्री से डीटीबी इमेज के साथ, dtb को mkbootimg.py में पास करने के लिए, बोर्ड कॉन्फ़िगरेशन वैरिएबल 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 पर चलने वाले डिवाइसों पर, वीटीएस को सही तरीके से चलाने के लिए, बूटलोडर में अपडेट की गई बूट इमेज का इस्तेमाल किया जाना चाहिए. साथ ही, चुने गए डिवाइस ट्री (डीटी) के इंडेक्स को दिखाने के लिए, androidboot.dtb_idx कर्नेल कमांड लाइन पैरामीटर जोड़ा जाना चाहिए. सिर्फ़ एक (1) इंडेक्स चुना जा सकता है. उदाहरण के लिए, पैरामीटर androidboot.dtb_idx=N, N को डिवाइस ट्री के शून्य-आधारित इंडेक्स के तौर पर दिखाता है. यह इंडेक्स, बूट इमेज में मौजूद डीटीबी के सेट से, बूटलोडर के चुने गए डिवाइस ट्री का होता है.