रिकवरी इमेज

गैर-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 शामिल होता है.