डीटीबी इमेज

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

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

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

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

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

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

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

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

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

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

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

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

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

बूट इमेज सेक्शन पेजों की संख्या
बूट हेडर (1 पेज) 1
कर्नेल (l पेज) l = (kernel_size + page_size - 1) / page_size
रैमडिस्क (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_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 से तय की गई डायरेक्ट्री से डीटीबी इमेज के साथ, mkbootimg.py को dtb आर्ग्यूमेंट पास करने के लिए, बोर्ड के कॉन्फ़िगरेशन से जुड़े वैरिएबल 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 है.