ओवर-द-एयर (OTA) अपडेट लागू करने के लिए, बूटलोडर को बूट के दौरान रिकवरी रैम डिस्क को ऐक्सेस करना होगा. अगर डिवाइस में, बिना बदलाव वाली AOSP रिकवरी इमेज का इस्तेमाल किया जाता है, तो बूटलोडर, misc
पार्टिशन पर मौजूद पहले 32 बाइट पढ़ता है. अगर वहां मौजूद डेटा, boot-recovery
से मेल खाता है, तो बूटलोडर, recovery
इमेज में बूट होता है. इस तरीके से, रिकवरी से जुड़े किसी भी काम को पूरा किया जा सकता है. जैसे, ओटीए लागू करना या डेटा हटाना.
रिकवरी और बूटलोडर के ज़रिए कम्यूनिकेशन के लिए इस्तेमाल किए जाने वाले फ़्लैश में ब्लॉक के कॉन्टेंट के बारे में जानकारी पाने के लिए, bootable/recovery/bootloader_message/bootloader_message.h पर जाएं.
A/B अपडेट वाले डिवाइस
A/B अपडेट का इस्तेमाल करने वाले डिवाइसों पर, ओटीए अपडेट की सुविधा काम करे, इसके लिए पक्का करें कि डिवाइस का बूटलोडर इन शर्तों को पूरा करता हो.
सामान्य शर्तें
ओटीए के ज़रिए अपडेट किए गए सभी पार्टीशन को अपडेट किया जा सकता है. हालांकि, ऐसा तब किया जा सकता है, जब मुख्य सिस्टम बूट हो गया हो और रिकवरी मोड में अपडेट न किया गया हो.
system
पार्टीशन को बूट करने के लिए, बूटलोडर, कर्नल कमांड लाइन पर यह वैल्यू पास करता है:ro root=/dev/[node] rootwait init=/init
.Android फ़्रेमवर्क की यह ज़िम्मेदारी है कि वह एचएएल से
markBootSuccessful
को कॉल करे. बूटलोडर को कभी भी किसी पार्टीशन को 'सफलतापूर्वक बूट किया गया' के तौर पर मार्क नहीं करना चाहिए.
बूट कंट्रोल HAL के लिए सहायता
बूटलोडर को boot_control
एचएएल के साथ काम करना चाहिए. इसके बारे में hardware/libhardware/include/hardware/boot_control.h
में बताया गया है. अपडेटर, बूट कंट्रोल HAL से क्वेरी करता है. इसके बाद, इस्तेमाल न किए जा रहे बूट स्लॉट को अपडेट करता है. साथ ही, HAL का इस्तेमाल करके चालू स्लॉट को बदलता है और अपडेट किए गए ऑपरेटिंग सिस्टम में रीबूट करता है. ज़्यादा जानकारी के लिए, बूट कंट्रोल HAL लागू करना लेख पढ़ें.
स्लॉट के लिए सहायता
बूटलोडर में, पार्टीशन और स्लॉट से जुड़ी सुविधाएं होनी चाहिए. जैसे:
पार्टिशन के नामों में ऐसा सफ़िक्स शामिल होना चाहिए जिससे यह पता चले कि कौनसे पार्टिशन, बूटलोडर के किसी स्लॉट से जुड़े हैं. ऐसे हर पार्टीशन के लिए, एक वैरिएबल
has-slot:partition base name
होता है. इसकी वैल्यूyes
होती है. स्लॉट के नाम, वर्णमाला के क्रम में a, b, c वगैरह होते हैं. ये_a
,_b
,_c
वगैरह सफ़िक्स वाले पार्टीशन से जुड़े होते हैं. बूटलोडर को ऑपरेटिंग सिस्टम को यह बताना चाहिए कि किस स्लॉट को बूट किया गया है. इसके लिए, कमांड लाइन प्रॉपर्टीandroidboot.slot_suffix
का इस्तेमाल किया जाता है. इस प्रॉपर्टी को, Android 12 या उसके बाद के वर्शन पर लॉन्च होने वाले डिवाइसों के लिए, bootconfig के ज़रिए सेट किया जाता है.slot-retry-count
वैल्यू को पॉज़िटिव वैल्यू (आम तौर पर3
) पर रीसेट किया जाता है. ऐसा, बूट कंट्रोल HAL के ज़रिएsetActiveBootSlot
कॉलबैक याfastboot set_active
कमांड के ज़रिए किया जाता है. किसी ऐसे पार्टीशन में बदलाव करते समय जो किसी स्लॉट का हिस्सा है, बूटलोडर "सक्सेसफ़ुली बूटेड" को मिटा देता है और स्लॉट के लिए फिर से कोशिश करने की संख्या को रीसेट कर देता है.
बूटलोडर को यह भी तय करना चाहिए कि कौनसे स्लॉट को लोड करना है. इस इमेज में, फ़ैसला लेने की प्रोसेस का एक उदाहरण दिखाया गया है.

तय करें कि किस स्लॉट के लिए कोशिश करनी है.
slot-unbootable
के तौर पर मार्क किए गए स्लॉट को लोड करने की कोशिश न करें. यह स्लॉट, फ़ास्टबूट से मिली वैल्यू के मुताबिक होना चाहिए. इसे मौजूदा स्लॉट कहा जाता है.अगर मौजूदा स्लॉट को
slot-successful
के तौर पर मार्क नहीं किया गया है और उसमेंslot-retry-count = 0
मौजूद है, तो मौजूदा स्लॉट कोslot-unbootable
के तौर पर मार्क करें. इसके बाद,unbootable
के तौर पर मार्क नहीं किए गए औरslot-successful
के तौर पर मार्क किए गए किसी दूसरे स्लॉट को चुनें. अब यह स्लॉट चुना गया स्लॉट है. अगर कोई मौजूदा स्लॉट उपलब्ध नहीं है, तो रिकवरी मोड में बूट करें या उपयोगकर्ता को गड़बड़ी का मैसेज दिखाएं.सही
boot.img
चुनें और कर्नल कमांड लाइन पर सही सिस्टम पार्टीशन का पाथ शामिल करें.कर्नेल कमांड लाइन
slot_suffix
पैरामीटर को पॉप्युलेट करें.बूट करें. अगर
slot-successful
के तौर पर मार्क नहीं किया गया है, तोslot-retry-count
की वैल्यू कम करें.
fastboot
यूटिलिटी यह तय करती है कि फ़्लैश कमांड चलाने पर, किस पार्टिशन को फ़्लैश करना है. उदाहरण के लिए, fastboot flash system system.img
कमांड चलाने पर, सबसे पहले current-slot
वैरिएबल के लिए क्वेरी की जाती है. इसके बाद, सिस्टम में मौजूद नतीजे को एक साथ जोड़कर, उस पार्टीशन का नाम जनरेट किया जाता है जिसे फ़्लैश किया जाना चाहिए (system_a
, system_b
वगैरह).
fastboot set_active
कमांड या बूट कंट्रोल HAL setActiveBootSlot
कमांड का इस्तेमाल करके, मौजूदा स्लॉट सेट करते समय, बूटलोडर को मौजूदा स्लॉट अपडेट करना चाहिए. साथ ही, slot-unbootable
और slot-successful
को मिटाना चाहिए और फिर से कोशिश करने की संख्या को रीसेट करना चाहिए. slot-unbootable
को मिटाने का यही एक तरीका है.
ऐसे डिवाइस जिनमें A/B अपडेट की सुविधा नहीं है
जिन डिवाइसों पर A/B अपडेट का इस्तेमाल नहीं किया जाता है उन पर ओटीए अपडेट की सुविधा काम करे, इसके लिए (अपडेट किए जा सकने वाले नॉन-ए/बी डिवाइस देखें), पक्का करें कि डिवाइस का बूटलोडर इन शर्तों को पूरा करता हो.
recovery
पार्टीशन में ऐसी इमेज होनी चाहिए जो किसी काम करने वाले पार्टीशन (cache
,userdata
) से सिस्टम इमेज को पढ़ सके और उसेsystem
पार्टीशन में लिख सके.बूटलोडर में, सीधे रिकवरी मोड में बूट करने की सुविधा होनी चाहिए.
अगर रेडियो इमेज अपडेट करने की सुविधा काम करती है, तो
recovery
पार्टीशन में भी रेडियो को फ़्लैश करने की सुविधा होनी चाहिए. ऐसा इनमें से किसी एक तरीके से किया जा सकता है:बूटलोडर, रेडियो को फ़्लैश करता है. इस मामले में, अपडेट पूरा करने के लिए, रिकवरी पार्टीशन से बूटलोडर में वापस रीबूट किया जा सकता है.
रिकवरी इमेज, रेडियो को फ़्लैश करती है. यह सुविधा, बाइनरी लाइब्रेरी या यूटिलिटी के तौर पर उपलब्ध कराई जा सकती है.