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