डीटीबी इमेज

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

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

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

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

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

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

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

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

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

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

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

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

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

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