डीटीबी छवियां

एंड्रॉइड कार्यान्वयन में बूटलोडर द्वारा उपयोग के लिए डिवाइस ट्री ब्लॉब (डीटीबी) छवि शामिल हो सकती है। डीटीबी छवि का स्थान (और डीटीबी छवि पैरामीटर निर्दिष्ट करने के विकल्प) एंड्रॉइड रिलीज़ के बीच भिन्न होता है।

  • एंड्रॉइड 11 में, जेनेरिक कर्नेल इमेज (जीकेआई) का उपयोग करने वाले उपकरणों को विक्रेता बूट विभाजन का समर्थन करना चाहिए, जिसमें सभी विक्रेता-विशिष्ट जानकारी शामिल है जो बूट विभाजन से स्थानांतरित की गई थी। क्योंकि DTB छवि में विक्रेता-विशिष्ट डेटा होता है, यह अब विक्रेता बूट विभाजन का हिस्सा है। DTB छवि पैरामीटर निर्दिष्ट करने के लिए, विक्रेता बूट हेडर देखें।

  • एंड्रॉइड 10 में, डिवाइस बूट विभाजन में DTB छवि शामिल कर सकते हैं। DTB छवि पैरामीटर निर्दिष्ट करने के लिए, बूट छवि में DTB छवि शामिल करना देखें।

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

डीटीबी छवि प्रारूप

एंड्रॉइड 10 और उच्चतर में, DTB छवि को निम्नलिखित प्रारूपों में से एक का उपयोग करना होगा:

  • डीटी बूँदें एक के बाद एक जुड़ती गईं। बूटलोडर संबंधित ब्लॉब को पढ़ने और पार्स करने के लिए प्रत्येक FDT हेडर में totalsize फ़ील्ड का उपयोग करता है।

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

बूट छवि में DTB छवि शामिल करना

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

इसके अलावा, गैर-ए/बी उपकरणों के लिए, बाधित ओटीए के कारण होने वाली समस्याओं को रोकने के लिए एक अलग विभाजन के बजाय डीटीबी को पुनर्प्राप्ति छवि के हिस्से के रूप में रखना अधिक सुरक्षित है। ओटीए के दौरान, यदि डीटीबी विभाजन अद्यतन होने के बाद (लेकिन पूर्ण अद्यतन पूरा करने से पहले) कोई समस्या होती है, तो डिवाइस ओटीए को पूरा करने के लिए पुनर्प्राप्ति मोड में बूट करने का प्रयास करता है; हालाँकि, क्योंकि DTB विभाजन पहले ही अद्यतन किया जा चुका है, पुनर्प्राप्ति छवि (जिसे अभी तक अद्यतन नहीं किया गया है) के साथ एक बेमेल हो सकता है। बूट छवि प्रारूप के हिस्से के रूप में DTB छवि होने से पुनर्प्राप्ति छवि को आत्मनिर्भर बनाकर ऐसी समस्याओं को रोका जाता है (अर्थात, यह किसी अन्य विभाजन पर निर्भर नहीं होती है)।

बूट छवि संरचना

एंड्रॉइड 10 चलाने वाले डिवाइस निम्नलिखित बूट छवि संरचना का उपयोग करके एक डीटीबी छवि शामिल कर सकते हैं।

बूट छवि अनुभाग पृष्ठों की संख्या
बूट हेडर (1 पृष्ठ) 1
कर्नेल (एल पेज) एल = ( kernel_size + page_size - 1) / page_size
रैमडिस्क (एम पेज) एम = ( ramdisk_size + page_size - 1) / page_size
दूसरा चरण बूटलोडर (एन पेज) n = ( second_size + page_size - 1) / page_size
रिकवरी डीटीबीओ (ओ पेज) ओ = ( recovery_dtbo_size + page_size - 1) / page_size
डीटीबी (पी पेज) पी = ( dtb_size + page_size - 1) / page_size

डीटीबी छवि पथ

एंड्रॉइड 10 चलाने वाले उपकरणों के लिए, आप DTB छवि का पथ निर्दिष्ट करने के लिए mkbootimg.py टूल और निम्नलिखित तर्कों का उपयोग कर सकते हैं।

तर्क विवरण
dtb बूट/पुनर्प्राप्ति छवियों में शामिल किए जाने वाले DTB छवि का पथ।
dtb_offset जब base तर्क में जोड़ा जाता है, तो अंतिम डिवाइस ट्री के लिए भौतिक लोड पता प्रदान करता है। उदाहरण के लिए, यदि base तर्क 0x10000000 है और dtb_offset तर्क 0x01000000 है, तो बूट छवि हेडर में dtb_addr_field 0x11000000 के रूप में पॉप्युलेट होता है।

DTB छवि का पथ निर्दिष्ट करने के लिए बोर्ड कॉन्फिग वैरिएबल BOARD_PREBUILT_DTBIMAGE_DIR का उपयोग किया जाना चाहिए। यदि *.dtb एक्सटेंशन वाली एक से अधिक फ़ाइल BOARD_PREBUILT_DTBIMAGE_DIR निर्देशिका में मौजूद है, तो एंड्रॉइड बिल्ड सिस्टम बूट छवि निर्माण में उपयोग की जाने वाली अंतिम 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_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)

बूटलोडर समर्थन

एंड्रॉइड 10 चलाने वाले उपकरणों पर वीटीएस को सफलतापूर्वक चलाने के लिए, बूटलोडर को अद्यतन बूट छवि का समर्थन करना होगा और चयनित डिवाइस ट्री (डीटी) के सूचकांक को इंगित करने के लिए androidboot.dtb_idx कर्नेल कमांड लाइन पैरामीटर जोड़ना होगा। आप केवल एक (1) सूचकांक निर्दिष्ट कर सकते हैं। उदाहरण के लिए, पैरामीटर androidboot.dtb_idx=N बूट इमेज में मौजूद DTBs के सेट से बूटलोडर द्वारा चुने गए डिवाइस ट्री के शून्य-आधारित इंडेक्स के रूप में N को रिपोर्ट करता है।