डीटीबी इमेज

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

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

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

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

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

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

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

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

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

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

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

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

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

बूट इमेज सेक्शन पेजों की संख्या
बूट हेडर (1 पेज) 1
कर्नेल (l पेज) 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
रिकवरी DTBO (o पेज) o = (recovery_dtbo_size + page_size - 1) / page_size
डीटीबी (p पेज) p = (dtb_size + page_size - 1) / page_size

DTB का इमेज पाथ

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

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