डीटीबी इमेज

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

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

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

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

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

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

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

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

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

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

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

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

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

BOARD_PREBUILT_DTBIMAGE_DIR में दिए गए डायरेक्ट्री से DTB इमेज के साथ dtb आर्ग्युमेंट को mkbootimg.py पर पास करने के लिए, बोर्ड के कॉन्फ़िगरेशन से जुड़े वैरिएबल BOARD_INCLUDE_DTB_IN_BOOTIMG को true पर सेट करना होगा. उदाहरण के लिए:

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

अन्य ऑफ़सेट और हेडर वर्शन के साथ, dtb_offset आर्ग्युमेंट को BOARD_MKBOOTIMG_ARGS board config वैरिएबल में जोड़ा जा सकता है. उदाहरण के लिए:

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