Android के लागू होने पर, बूटलोडर के इस्तेमाल के लिए डिवाइस ट्री ब्लॉब (डीटीबी) इमेज शामिल की जा सकती है. Android रिलीज़ के हिसाब से, डीटीबी इमेज की जगह (और डीटीबी इमेज पैरामीटर तय करने के विकल्प) अलग-अलग होती है.
Android 11 में, Generic Kernel इमेज (जीकेआई) का इस्तेमाल करने वाले डिवाइसों के लिए, वेंडर बूट पार्टिशन के साथ काम करना ज़रूरी है. इसमें वेंडर से जुड़ी वह सारी जानकारी शामिल होती है जिसे बूट पार्टिशन से हटाकर यहां ले जाया गया है. DTB इमेज में वेंडर से जुड़ा डेटा होता है. इसलिए, अब यह वेंडर बूट पार्टिशन का हिस्सा है. डीटीबी इमेज पैरामीटर तय करने के लिए, वेंडर बूट हेडर देखें.
Android 10 में, डिवाइसों के बूट पार्टिशन में डीटीबी इमेज शामिल की जा सकती है. डीटीबी इमेज पैरामीटर तय करने के लिए, बूट इमेज में डीटीबी इमेज शामिल करना लेख पढ़ें.
Android 9 और उससे पहले के वर्शन में, DTB इमेज अपने सेगमेंट में मौजूद हो सकती है या इसे कर्नेल
image.gz
में जोड़कर कर्नेल + DTB इमेज बनाई जा सकती है. इसके बाद,boot.img
बनाने के लिए इसेmkbootimg
में भेजा जाता है.
डीटीबी इमेज फ़ॉर्मैट
Android 10 और इसके बाद के वर्शन में, डीटीबी इमेज के लिए इनमें से किसी एक फ़ॉर्मैट का इस्तेमाल करना ज़रूरी है:
डीटी ब्लॉब एक के बाद एक जोड़कर रखे जाते हैं. बूटलोडर, इससे जुड़े ब्लॉब को पढ़ने और पार्स करने के लिए, हर एफ़डीटी हेडर में
totalsize
फ़ील्ड का इस्तेमाल करता है.DTB/DTBO पार्टीशन. बूटलोडर में, सही DT ब्लॉब चुनने का एक बेहतर तरीका होता है. इसके लिए,
dt_table_entry
स्ट्रक्चर (इसमेंid
,rev
, औरcustom
फ़ील्ड होते हैं) की जांच की जाती है. इस स्ट्रक्चर में, एंट्री के लिए हार्डवेयर की पहचान करने वाली जानकारी हो सकती है. ज़्यादा जानकारी के लिए, DTB/DTBO पार्टिशन देखें.
बूट इमेज में डीटीबी इमेज शामिल करना
Android 10 वाले डिवाइसों में, बूट इमेज में डीटीबी इमेज शामिल की जा सकती है. इससे, Android को उन स्क्रिप्ट के साथ काम करने की ज़रूरत नहीं पड़ती जो DTB इमेज को कर्नेल में image.gz
में जोड़ती हैं. साथ ही, DTB प्लेसमेंट की पुष्टि करने और उसे स्टैंडर्ड बनाने के लिए, Vendor Test Suite (VTS) टेस्ट का इस्तेमाल करने की सुविधा मिलती है.
इसके अलावा, नॉन-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
से तय की गई डायरेक्ट्री से डीटीबी इमेज के साथ, 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
को डिवाइस ट्री के शून्य-आधारित इंडेक्स के तौर पर दिखाता है. यह इंडेक्स, बूट इमेज में मौजूद डीटीबी के सेट से, बूटलोडर के चुने गए डिवाइस ट्री का होता है.