रिकवरी इमेज

बिना A/B डिवाइसों पर, रिकवरी इमेज में डिवाइस ट्री ब्लॉब (डीटीबी) या बेहतर कॉन्फ़िगरेशन और पावर इंटरफ़ेस (एसीपीआई) ओवरले इमेज की जानकारी होनी चाहिए. जब ऐसे डिवाइस रिकवरी मोड में बूट होते हैं, तो बूटलोडर उस ओवरले इमेज को लोड कर सकता है जो रिकवरी इमेज के साथ काम करती है. जिन डिवाइसों पर 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 (Q) A/B लागू नहीं 2 0, 1, 2 नहीं
नॉन-A/B लागू नहीं 2 0, 1, 2 हां
9 (पी) A/B लागू नहीं 1 0, 1 नहीं
नॉन-A/B लागू नहीं 1 0, 1 हां
8 (O) A/B लागू नहीं लागू नहीं (0 माना जाएगा) लागू नहीं (0 माना जाएगा) नहीं
नॉन-A/B लागू नहीं लागू नहीं (0 माना जाएगा) लागू नहीं (0 माना जाता है) हां

* Android 11 या उसके बाद के वर्शन पर चल रहे 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/Aसीपीआईओ पार्टिशन के आधार पर रिकवरी रोकने के लिए, Android 9 या उसके बाद के वर्शन पर काम करने वाले गैर-A/B डिवाइस, रिकवरी DTBO/Aसीपीआईओ इमेज को तय कर सकते हैं. इसमें, बूट इमेज फ़ॉर्मैट में ओवरले इमेज से मिली जानकारी को अलग सेक्शन के तौर पर शामिल किया जा सकता है (इसके लिए 1 या 2 के बूट हेडर वर्शन का इस्तेमाल करना ज़रूरी है).

बूट इमेज में बदलाव

Android 9 या इसके बाद के वर्शन पर काम करने वाले गैर-A/B डिवाइसों पर, रिकवरी इमेज में रिकवरी डीटीबीओ या एसीपीआईओ को शामिल करने के लिए, बूट इमेज के स्ट्रक्चर को इस तरह से अपडेट करें.

बूट इमेज सेक्शन पेजों की संख्या
बूट हेडर (एक पेज) 1
Kernel (l pages) 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 टूल के आर्ग्युमेंट के बारे में ज़्यादा जानने के लिए, बूट इमेज के हेडर का वर्शन देखें.

डीटीबीओ लागू करें

Android 9 या इसके बाद के वर्शन पर चलने वाले ऐसे डिवाइसों में, रिकवरी इमेज के recovery_dtbo सेक्शन में जानकारी अपने-आप भर सकती है जो A/B टेस्ट में शामिल नहीं हैं. recovery_dtbo इमेज को recovery.img में शामिल करने के लिए, डिवाइस 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 बिल्ड सिस्टम में 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 शामिल होता है.