برای اجرای بهروزرسانیهای ازطریق هوا (OTA)،
راهانداز سیستم باید بتواند درطول راهاندازی به دیسک RAM بازیابی دسترسی داشته باشد. اگر دستگاه از تصویر بازیابی AOSP بدون تغییر استفاده کند، راهانداز سیستم ۳۲ بایت اول را در افراز misc میخواند؛ اگر دادههای آنجا با boot-recovery مطابقت داشته باشد، راهانداز سیستم با تصویر recovery راهاندازی میشود. این روش امکان میدهد هرگونه کار بازیابی معلق (برای مثال، اعمال OTA یا برداشتن دادهها) تا تکمیل شدن ادامه یابد.
برای جزئیات مربوط به محتوای بلوک در حافظه فلش که برای ارتباطات توسط بازیابی و راهانداز سیستم استفاده میشود، به bootable/recovery/bootloader_message/bootloader_message.h مراجعه کنید.
دستگاههای دارای بهروزرسانیهای A/B
برای پشتیبانی از بهروزرسانیهای OTA در دستگاههایی که از بهروزرسانیهای A/B استفاده میکنند، مطمئن شوید که bootloader دستگاه معیارهای زیر را برآورده میکند.
معیارهای کلی
همه پارتیشنهای بهروزشده ازطریق OTA باید درحین راهاندازی سیستم اصلی قابلبهروزرسانی باشند (و در بازیابی بهروز نشوند).
برای راهاندازی پارتیشن
system، بارکننده مقدار زیر را در خط فرمان هسته ارسال میکند:ro root=/dev/[node] rootwait init=/init.این وظیفه چارچوب Android است که
markBootSuccessfulرا از HAL فراخوانی کند. راهانداز سیستم هرگز نباید پارتیشنی را بهعنوان راهاندازیشده باموفقیت علامتگذاری کند.
پشتیبانی از «لایه انتزاع سختافزار» کنترل راهاندازی
«بارکننده» باید از boot_control HAL که در
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به سیستمعامل اطلاع دهد که کدام اسلات بوت شده است. این ویژگی ازطریق bootconfig برای دستگاههایی که با Android 12 یا بالاتر عرضه میشوند تنظیم میشود.مقدار
slot-retry-countبه مقدار مثبتی (معمولاً3) بازنشانی میشود، یا توسط HAL کنترل راهاندازی ازطریقsetActiveBootSlotفراخوانی برگشتی یا ازطریق فرمانfastboot set_active. هنگام اصلاح پارتیشنی که بخشی از یک جایگاه است، راهانداز سیستم «باموفقیت راهاندازی شد» را پاک میکند و تعداد تلاش مجدد برای جایگاه را بازنشانی میکند.
راهانداز سیستم باید تعیین کند که کدام جایگاه بار شود. این شکل نمونهای از فرایند تصمیمگیری را نشان میدهد.
تعیین کنید کدام جایگاه را امتحان کنید. تلاش نکنید جایگاه علامتگذاریشده
slot-unbootableرا بار کنید. این جایگاه باید با مقادیر برگشتی از fastboot سازگار باشد و بهعنوان جایگاه فعلی از آن یاد میشود.اگر جایگاه کنونی بهعنوان
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 یا فرمان
boot control HAL setActiveBootSlot، بارکننده باید جایگاه فعلی را بهروز کند،
slot-unbootable و slot-successful را پاک کند، و تعداد تلاش مجدد را بازنشانی کند (این تنها راه پاک کردن slot-unbootable است).
دستگاههای بدون بهروزرسانی A/B
برای پشتیبانی از بهروزرسانیهای OTA در دستگاههایی که از بهروزرسانیهای A/B استفاده نمیکنند (به دستگاههای بهروزرسانیشدنی غیر A/B مراجعه کنید)، مطمئن شوید که بارکننده دستگاه معیارهای زیر را برآورده میکند.
بخشبندی
recoveryباید حاوی تصویری باشد که بتواند تصویر سیستم را از بخشبندی پشتیبانیشدهای (cache،userdata) بخواند و آن را در بخشبندیsystemبنویسد.راهانداز باید از راهاندازی مستقیم در حالت بازیابی پشتیبانی کند.
اگر بهروزرسانیهای تصویر رادیو پشتیبانی میشود، بخش
recoveryنیز باید بتواند رادیو را فلش کند. این کار را میتوان به یکی از دو روش زیر انجام داد:راهانداز سیستم، رادیو را فلش میکند. در این حالت، باید بتوانید از پارتیشن بازیابی به bootloader بازگردید و بازراهاندازی کنید تا بهروزرسانی تکمیل شود.
تصویر بازیابی رادیو را چشمک میزند. این عملکرد میتواند بهصورت کتابخانه یا ابزار کمکی دودویی ارائه شود.