बिना A/B डिवाइसों पर, रिकवरी इमेज में डिवाइस ट्री ब्लॉब (डीटीबी) या बेहतर कॉन्फ़िगरेशन और पावर इंटरफ़ेस (एसीपीआई) ओवरले इमेज की जानकारी होनी चाहिए. जब ऐसे डिवाइस रिकवरी मोड में बूट होते हैं, तो बूटलोडर उस ओवरले इमेज को लोड कर सकता है जो रिकवरी इमेज के साथ काम करती है. जिन डिवाइसों पर A/B (बिना किसी रुकावट के) अपडेट काम करते हैं उन्हें अलग रिकवरी पार्टीशन के बजाय, रिकवरी को बूट के तौर पर इस्तेमाल करना चाहिए. ज़्यादा जानकारी के लिए, A/B अपडेट लागू करना लेख पढ़ें.
बूट/रिकवरी इमेज के हिस्से के तौर पर, रिकवरी डीटीबीओ/एसीपीआईओ को शामिल करने के विकल्प, Android के रिलीज़ होने के बाद अलग-अलग होते हैं.
रिलीज़ | स्कीम अपडेट करना | जीकेआई के नियमों का पालन करना | बूट हेडर वर्शन (लॉन्च हो रहे डिवाइस) | बूट हेडर वर्शन (डिवाइसों को अपग्रेड करना) | रिकवरी इमेज होना ज़रूरी है |
---|---|---|---|---|---|
11 | A/B, वर्चुअल A/B |
हां | 3* | लागू नहीं | नहीं |
A/B, वर्चुअल A/B |
नहीं | 2, 3 | 0, 1, 2, 3 | नहीं | |
नॉन-A/B | हां | 3 | लागू नहीं | हां | |
नॉन-A/B | नहीं | 2, 3 | 0, 1, 2, 3 | हां | |
10 (Q) | A/B | लागू नहीं | 2 | 0, 1, 2 | नहीं |
नॉन-A/B | लागू नहीं | 2 | 0, 1, 2 | हां | |
9 (पी) | A/B | लागू नहीं | 1 | 0, 1 | नहीं |
नॉन-A/B | लागू नहीं | 1 | 0, 1 | हां | |
8 (O) | A/B | लागू नहीं | लागू नहीं (0 माना जाएगा) | लागू नहीं (0 माना जाएगा) | नहीं |
नॉन-A/B | लागू नहीं | लागू नहीं (0 माना जाएगा) | लागू नहीं (0 माना जाता है) | हां |
* Android 11 या उसके बाद के वर्शन पर चल रहे A/B डिवाइसों पर और जेनरिक कर्नेल इमेज (जीकेआई) का इस्तेमाल करने वाले डिवाइसों को वेंडर बूट पार्टी के साथ काम करने के लिए, 3 के बूट हेडर वर्शन का इस्तेमाल करना चाहिए.
खास बातें:
A/B डिवाइसों को रिकवरी इमेज तय करने की ज़रूरत नहीं होती, क्योंकि A/B अपडेट, पार्टिशन के दो सेट (
boot
औरdtbo
सहित) का इस्तेमाल करते हैं. साथ ही, अपडेट के दौरान उनके बीच स्विच करते हैं. इससे रिकवरी इमेज की ज़रूरत नहीं पड़ती. A/B डिवाइस अब भी खास तौर पर रिकवरी इमेज का इस्तेमाल कर सकते हैं.Android 11 या इसके बाद के वर्शन के साथ लॉन्च होने वाले और बूट हेडर के तीसरे वर्शन का इस्तेमाल करने वाले ऐसे डिवाइसों के लिए, रिकवरी इमेज के लिए बूट हेडर के दूसरे वर्शन की जानकारी अलग से देनी होगी. उदाहरण के लिए:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
डिवाइस ट्री के साथ काम न करने वाले आर्किटेक्चर के लिए, रिकवरी इमेज में DTBO इमेज के बजाय ACPIO इमेज शामिल की जा सकती है.
ओटीए (Over-The-Air) के काम न करने और रिकवरी इमेज के बारे में जानकारी
A/B डिवाइसों के अलावा अन्य डिवाइसों पर, ओवर-द-एयर (ओटीए) से जुड़ी गड़बड़ियों से बचने के लिए, रिकवरी इमेज को पूरी तरह से काम करने वाला और अन्य इमेज से अलग होना चाहिए. ओटीए अपडेट के दौरान, अगर ओवरले इमेज अपडेट होने के बाद (पूरा अपडेट पूरा होने से पहले) कोई समस्या आती है, तो डिवाइस ओटीए अपडेट पूरा करने के लिए, रिकवरी मोड में बूट करने की कोशिश करता है. हालांकि, ओवरले पार्टीशन पहले ही अपडेट हो चुका है. इसलिए, रिकवरी इमेज (जिसे अब तक अपडेट नहीं किया गया है) के साथ मैच न होने की समस्या आ सकती है.
अपडेट के दौरान DTBO/Aसीपीआईओ पार्टिशन के आधार पर रिकवरी रोकने के लिए, Android 9 या उसके बाद के वर्शन पर काम करने वाले गैर-A/B डिवाइस, रिकवरी DTBO/Aसीपीआईओ इमेज को तय कर सकते हैं. इसमें, बूट इमेज फ़ॉर्मैट में ओवरले इमेज से मिली जानकारी को अलग सेक्शन के तौर पर शामिल किया जा सकता है (इसके लिए 1 या 2 के बूट हेडर वर्शन का इस्तेमाल करना ज़रूरी है).
बूट इमेज में बदलाव
Android 9 या इसके बाद के वर्शन पर काम करने वाले गैर-A/B डिवाइसों पर, रिकवरी इमेज में रिकवरी डीटीबीओ या एसीपीआईओ को शामिल करने के लिए, बूट इमेज के स्ट्रक्चर को इस तरह से अपडेट करें.
बूट इमेज सेक्शन | पेजों की संख्या |
---|---|
बूट हेडर (एक पेज) | 1 |
Kernel (l pages) | l = (kernel_size + page_size -
1) / page_size |
Ramdisk (m पेज) | m = (ramdisk_size + page_size -
1) / page_size |
दूसरे चरण का बूटलोडर (n पेज) | n = (second_size + page_size -
1) / page_size |
रिकवरी DTBO या ACPIO (o पेज) | o = (recovery_[dtbo|acpio]_size + page_size -
1) / page_size |
बूट इमेज के हेडर वर्शन और ओवरले इमेज के पाथ की जानकारी देने के लिए, mkbootimg
टूल के आर्ग्युमेंट के बारे में ज़्यादा जानने के लिए, बूट इमेज के हेडर का वर्शन देखें.
डीटीबीओ लागू करें
Android 9 या इसके बाद के वर्शन पर चलने वाले ऐसे डिवाइसों में, रिकवरी इमेज के recovery_dtbo
सेक्शन में जानकारी अपने-आप भर सकती है जो A/B टेस्ट में शामिल नहीं हैं. recovery_dtbo
इमेज को recovery.img
में शामिल करने के लिए, डिवाइस BoardConfig.mk
में:
कॉन्फ़िगरेशन
BOARD_INCLUDE_RECOVERY_DTBO
कोtrue
पर सेट करें:BOARD_INCLUDE_RECOVERY_DTBO := true
इमेज हेडर का बूट करें वर्शन तय करने के लिए,
BOARD_MKBOOTIMG_ARGS
वैरिएबल को बढ़ाएं:BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
पक्का करें कि
BOARD_PREBUILT_DTBOIMAGE
वैरिएबल, DTBO इमेज के पाथ पर सेट हो. Android बिल्ड सिस्टम, रिकवरी इमेज बनाते समय इस वैरिएबल का इस्तेमालmkbootimg
टूल केrecovery_dtbo
आर्ग्युमेंट को सेट करने के लिए करता है.
अगर BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
, और
BOARD_PREBUILT_DTBOIMAGE
वैरिएबल सही तरीके से सेट किए गए हैं, तो Android बिल्ड सिस्टम में
recovery.img
में BOARD_PREBUILT_DTBOIMAGE
वैरिएबल से तय किया गया DTBO शामिल होता है.
ACPIO लागू करना
Android 9 या इसके बाद के वर्शन पर काम करने वाले ऐसे डिवाइस जो A/B नहीं हैं, वे DTBO इमेज के बजाय ACPIO ओवरले इमेज का इस्तेमाल कर सकते हैं. साथ ही, रिकवरी इमेज के recovery_dtbo
सेक्शन के बजाय recovery_acpio
सेक्शन को पॉप्युलेट कर सकते हैं. डिवाइस BoardConfig.mk
में, recovery.img
में recovery_acpio
इमेज शामिल करने के लिए:
कॉन्फ़िगरेशन
BOARD_INCLUDE_RECOVERY_ACPIO
कोtrue
पर सेट करें:BOARD_INCLUDE_RECOVERY_ACPIO := true
बूट इमेज के हेडर के वर्शन की जानकारी देने के लिए,
BOARD_MKBOOTIMG_ARGS
वैरिएबल को बड़ा करें. रिकवरी के लिए, वैरिएबल की वैल्यू 1 या उससे ज़्यादा होनी चाहिए.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
पक्का करें कि
BOARD_RECOVERY_ACPIO
वैरिएबल, ACPIO इमेज के पाथ पर सेट हो. Android बिल्ड सिस्टम, रिकवरी इमेज बनाते समय,mkbootimg
टूल केrecovery_acpio
आर्ग्युमेंट को सेट करने के लिए वैरिएबल का इस्तेमाल करता है.
अगर BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
, और
BOARD_RECOVERY_ACPIO
वैरिएबल सही तरीके से सेट किए गए हैं, तो Android बिल्ड सिस्टम में
recovery.img
में BOARD_RECOVERY_ACPIO
वैरिएबल से तय किया गया ACPIO शामिल होता है.