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