नॉन-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 (ओ) | 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.img
में recovery_dtbo
इमेज शामिल करने के लिए, डिवाइस 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 Build System, 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 शामिल करता है.