A/B वर्शन वाले डिवाइसों के अलावा, अन्य डिवाइसों पर रिकवरी इमेज में डिवाइस ट्री ब्लॉब (DTB) या ऐडवांस कॉन्फ़िगरेशन और पावर इंटरफ़ेस (ACPI) ओवरले इमेज की जानकारी होनी चाहिए. जब ऐसे डिवाइस रिकवरी मोड में बूट होते हैं, तो बूटलोडर उस ओवरले इमेज को लोड कर सकता है जो रिकवरी इमेज के साथ काम करती है. जिन डिवाइसों पर A/B (बिना किसी रुकावट के) अपडेट की सुविधा काम करती है उन्हें अलग रिकवरी पार्टीशन के बजाय, रिकवरी को बूट के तौर पर इस्तेमाल करना चाहिए. ज़्यादा जानकारी के लिए, A/B अपडेट लागू करना लेख पढ़ें.
बूट/रिकवरी इमेज के हिस्से के तौर पर रिकवरी DTBO/ACPIO को शामिल करने के विकल्प, 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 (P) | A/B | लागू नहीं | 1 | 0, 1 | नहीं |
नॉन-A/B | लागू नहीं | 1 | 0, 1 | हां | |
8 (O) | A/B | लागू नहीं | लागू नहीं (0 माना जाएगा) | लागू नहीं (0 माना जाएगा) | नहीं |
नॉन-A/B | लागू नहीं | लागू नहीं (0 माना जाएगा) | लागू नहीं (0 माना जाएगा) | हां |
* Android 11 या इसके बाद के वर्शन पर काम करने वाले और Generic Kernel Image (GKI) का इस्तेमाल करने वाले 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/ACPIO पार्टीशन पर निर्भर होने से रोकने के लिए, Android 9 या उसके बाद के वर्शन पर काम करने वाले ऐसे डिवाइसों के लिए, रिकवरी DTBO/ACPIO इमेज तय की जा सकती है जिसमें ओवरले इमेज की जानकारी, बूट इमेज फ़ॉर्मैट में अलग सेक्शन के तौर पर शामिल हो. इसके लिए, बूट हेडर के वर्शन 1 या 2 का इस्तेमाल करना ज़रूरी है.
बूट इमेज में बदलाव
Android 9 या उसके बाद के वर्शन पर काम करने वाले ऐसे डिवाइसों पर रिकवरी इमेज में रिकवरी DTBO या ACPIO शामिल करने के लिए, बूट इमेज के स्ट्रक्चर को यहां बताए गए तरीके से अपडेट करें.
बूट इमेज सेक्शन | पेजों की संख्या |
---|---|
बूट हेडर (एक पेज) | 1 |
कर्नेल (l पेज) | 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 |
रिकवरी डीटीबीओ या एसीपीआईओ (o पेज) | o = (recovery_[dtbo|acpio]_size + page_size -
1) / page_size |
बूट इमेज के हेडर वर्शन और ओवरले इमेज के पाथ की जानकारी देने के लिए, mkbootimg
टूल के आर्ग्युमेंट के बारे में ज़्यादा जानने के लिए, बूट इमेज के हेडर का वर्शन देखें.
डीटीबीओ लागू करना
Android 9 या इसके बाद के वर्शन पर चलने वाले ऐसे डिवाइसों में, रिकवरी इमेज के recovery_dtbo
सेक्शन में जानकारी अपने-आप भर सकती है जो A/B टेस्ट में शामिल नहीं हैं. BoardConfig.mk
डिवाइस में, recovery.img
में recovery_dtbo
इमेज शामिल करने के लिए:
कॉन्फ़िगरेशन
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 शामिल होता है.