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

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