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

مشخص کنید که کدام اسلات را امتحان کنید. سعی نکنید اسلاتی را که با عنوان
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 الحاق میکند تا نام پارتیشنی که باید فلش شود ( 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باید بتواند رادیو را نیز فلش کند. این کار را میتوان به یکی از دو روش زیر انجام داد:بوت لودر رادیو را فلش میکند. در این حالت، باید بتوان از پارتیشن ریکاوری دوباره به بوت لودر برگشت تا بهروزرسانی کامل شود.
تصویر بازیابی، رادیو را روشن میکند. این قابلیت میتواند به صورت یک کتابخانه دودویی یا یک ابزار کمکی ارائه شود.