ओटीए अपडेट का समर्थन

ओवर-द-एयर (ओटीए) अपडेट का समर्थन करने के लिए, बूटलोडर को बूट के दौरान रिकवरी रैम डिस्क तक पहुंचने में सक्षम होना चाहिए। यदि डिवाइस एक असंशोधित AOSP पुनर्प्राप्ति छवि का उपयोग करता है, तो बूटलोडर misc विभाजन पर पहले 32 बाइट्स पढ़ता है; यदि वहां मौजूद डेटा boot-recovery से मेल खाता है, तो बूटलोडर recovery छवि में बूट हो जाता है। यह विधि किसी भी लंबित पुनर्प्राप्ति कार्य (उदाहरण के लिए, ओटीए लागू करना या डेटा हटाना) को पूरा करना जारी रखने में सक्षम बनाती है।

पुनर्प्राप्ति और बूटलोडर द्वारा संचार के लिए उपयोग किए जाने वाले फ्लैश में ब्लॉक की सामग्री के विवरण के लिए, बूट करने योग्य/पुनर्प्राप्ति/बूटलोडर_मैसेज/बूटलोडर_मैसेज.एच देखें।

ए/बी अपडेट वाले डिवाइस

ए/बी अपडेट का उपयोग करने वाले उपकरणों पर ओटीए अपडेट का समर्थन करने के लिए, सुनिश्चित करें कि डिवाइस बूटलोडर निम्नलिखित मानदंडों को पूरा करता है।

सामान्य मानदंड

  • ओटीए के माध्यम से अद्यतन किए गए सभी विभाजन मुख्य सिस्टम के बूट होने के दौरान अद्यतन करने योग्य होने चाहिए (और पुनर्प्राप्ति में अद्यतन नहीं किए जाने चाहिए)।

  • system विभाजन को बूट करने के लिए, बूटलोडर कर्नेल कमांड लाइन पर निम्नलिखित मान पास करता है: ro root=/dev/[node] rootwait init=/init .

  • एचएएल से markBootSuccessful कॉल करना एंड्रॉइड फ्रेमवर्क की जिम्मेदारी है। बूटलोडर को कभी भी किसी विभाजन को सफलतापूर्वक बूट किए गए के रूप में चिह्नित नहीं करना चाहिए।

बूट नियंत्रण एचएएल के लिए समर्थन

बूटलोडर को hardware/libhardware/include/hardware/boot_control.h ) में परिभाषित boot_control एचएएल का समर्थन करना चाहिए। अपडेटर बूट नियंत्रण एचएएल पर सवाल उठाता है, वर्तमान में उपयोग में नहीं आने वाले बूट स्लॉट को अपडेट करता है, एचएएल का उपयोग करके सक्रिय स्लॉट को बदलता है, और अपडेट किए गए ऑपरेटिंग सिस्टम में रीबूट करता है। विवरण के लिए, बूट नियंत्रण एचएएल लागू करना देखें।

स्लॉट के लिए समर्थन

बूटलोडर को विभाजन और स्लॉट से संबंधित कार्यक्षमता का समर्थन करना चाहिए, जिसमें शामिल हैं:

  • विभाजन नामों में एक प्रत्यय शामिल होना चाहिए जो पहचानता है कि कौन से विभाजन बूटलोडर में किसी विशेष स्लॉट से संबंधित हैं। ऐसे प्रत्येक विभाजन के लिए, एक संबंधित वैरिएबल है-स्लॉट है: yes के मान के साथ has-slot: partition base name । स्लॉट्स को प्रत्यय _a , _b , _c , आदि के साथ विभाजन के अनुरूप वर्णानुक्रम में a, b, c, आदि नाम दिया गया है। बूटलोडर को ऑपरेटिंग सिस्टम को सूचित करना चाहिए कि कमांड लाइन प्रॉपर्टी androidboot.slot_suffix का उपयोग करके कौन सा स्लॉट बूट किया गया था। यह प्रॉपर्टी Android 12 या उसके बाद के संस्करण के साथ लॉन्च होने वाले उपकरणों के लिए Bootconfig के माध्यम से सेट की गई है।

  • slot-retry-count मान को एक सकारात्मक मान (आमतौर पर 3 ) पर रीसेट किया जाता है, या तो बूट कंट्रोल एचएएल द्वारा setActiveBootSlot कॉलबैक के माध्यम से या fastboot set_active कमांड के माध्यम से। किसी स्लॉट के हिस्से वाले विभाजन को संशोधित करते समय, बूटलोडर "सफलतापूर्वक बूट किया गया" साफ़ कर देता है और स्लॉट के लिए पुनः प्रयास की संख्या को रीसेट कर देता है।

बूटलोडर को यह भी निर्धारित करना चाहिए कि किस स्लॉट को लोड करना है। यह आंकड़ा एक उदाहरण निर्णय प्रक्रिया दिखाता है।

बूटलोडर स्लॉटिंग प्रवाह
चित्र 1. बूटलोडर स्लॉटिंग प्रवाह
  1. निर्धारित करें कि किस स्लॉट में प्रयास करना है। slot-unbootable चिह्नित स्लॉट को लोड करने का प्रयास न करें। यह स्लॉट फास्टबूट द्वारा लौटाए गए मानों के अनुरूप होना चाहिए, और इसे वर्तमान स्लॉट के रूप में जाना जाता है।

  2. यदि वर्तमान स्लॉट को slot-successful के रूप में चिह्नित नहीं किया गया है और उसमें slot-retry-count = 0 है, तो वर्तमान स्लॉट को slot-unbootable के रूप में चिह्नित करें। फिर एक अलग स्लॉट चुनें जिसे unbootable रूप में चिह्नित नहीं किया गया है और slot-successful के रूप में चिह्नित किया गया है; यह स्लॉट अब चयनित स्लॉट है. यदि कोई वर्तमान स्लॉट उपलब्ध नहीं है, तो पुनर्प्राप्ति के लिए बूट करें या उपयोगकर्ता को एक सार्थक त्रुटि संदेश प्रदर्शित करें।

  3. उपयुक्त boot.img चयन करें और कर्नेल कमांड लाइन पर सिस्टम विभाजन को सही करने के लिए पथ शामिल करें।

  4. कर्नेल कमांड लाइन slot_suffix पैरामीटर को पॉप्युलेट करें।

  5. गाड़ी की डिक्की। यदि slot-successful चिह्नित नहीं है, slot-retry-count

fastboot उपयोगिता यह निर्धारित करती है कि किसी फ़्लैश कमांड को चलाते समय किस विभाजन को फ्लैश करना है। उदाहरण के लिए, fastboot flash system system.img कमांड को चलाने से पहले current-slot वैरिएबल पर सवाल उठाया जाता है, फिर उस विभाजन का नाम उत्पन्न करने के लिए सिस्टम में परिणाम को संयोजित किया जाता है जिसे फ्लैश किया जाना चाहिए ( system_a , system_b , आदि)।

फास्टबूट set_active कमांड या बूट कंट्रोल एचएएल setActiveBootSlot कमांड का उपयोग करके वर्तमान स्लॉट सेट करते समय, बूटलोडर को वर्तमान स्लॉट को अपडेट करना चाहिए, slot-unbootable और slot-successful साफ़ करना चाहिए, और पुनः प्रयास गिनती को रीसेट करना चाहिए (यह slot-unbootable साफ़ करने का एकमात्र तरीका है- slot-unbootable )।

बिना ए/बी अपडेट वाले डिवाइस

उन उपकरणों पर ओटीए अपडेट का समर्थन करने के लिए जो ए/बी अपडेट का उपयोग नहीं करते हैं ( गैर-ए/बी अपडेट करने योग्य डिवाइस देखें), सुनिश्चित करें कि डिवाइस बूटलोडर निम्नलिखित मानदंडों को पूरा करता है।

  • recovery विभाजन में एक छवि होनी चाहिए जो कुछ समर्थित विभाजन ( cache , userdata ) से सिस्टम छवि को पढ़ने और system विभाजन में लिखने में सक्षम हो।

  • बूटलोडर को सीधे पुनर्प्राप्ति मोड में रीबूट करने का समर्थन करना चाहिए।

  • यदि रेडियो छवि अद्यतन समर्थित हैं, तो recovery विभाजन भी रेडियो को फ्लैश करने में सक्षम होना चाहिए। इसे दो तरीकों में से एक में पूरा किया जा सकता है:

    • बूटलोडर रेडियो चमकाता है। इस मामले में, अद्यतन को पूरा करने के लिए पुनर्प्राप्ति विभाजन से वापस बूटलोडर में रीबूट करना संभव होना चाहिए।

    • पुनर्प्राप्ति छवि रेडियो पर चमकती है। यह कार्यक्षमता बाइनरी लाइब्रेरी या उपयोगिता के रूप में प्रदान की जा सकती है।