برای پیادهسازی بهروزرسانیهای هوایی (OTA) ، بوتلودر باید بتواند به دیسک RAM بازیابی در هنگام بوت دسترسی داشته باشد. اگر دستگاه از یک تصویر بازیابی AOSP اصلاح نشده استفاده کند، بوت لودر 32 بایت اول پارتیشن 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 بر عهده چارچوب Android است. بوت لودر هرگز نباید پارتیشنی را به عنوان بوت شده با موفقیت علامت گذاری کند.
پشتیبانی از کنترل بوت 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
یا فرمان بوت کنترل HAL setActiveBootSlot
، بوت لودر باید شکاف فعلی را بهروزرسانی کند، slot-unbootable
و slot-successful
را پاک کند و تعداد تلاش مجدد را بازنشانی کند (این تنها راه برای پاک کردن slot-unbootable
است. slot-unbootable
).
دستگاههای بدون بهروزرسانی A/B
برای پشتیبانی از بهروزرسانیهای OTA در دستگاههایی که از بهروزرسانیهای A/B استفاده نمیکنند (به دستگاههای غیرقابل بهروزرسانی A/B مراجعه کنید)، مطمئن شوید که بوتلودر دستگاه دارای معیارهای زیر است.
پارتیشن
recovery
باید حاوی تصویری باشد که قادر به خواندن تصویر سیستم از برخی پارتیشن های پشتیبانی شده (cache
،userdata
) و نوشتن آن در پارتیشنsystem
باشد.بوت لودر باید از بوت شدن مستقیم به حالت بازیابی پشتیبانی کند.
اگر بهروزرسانیهای تصویر رادیویی پشتیبانی میشوند، پارتیشن
recovery
نیز باید بتواند رادیو را فلش کند. این را می توان به یکی از دو روش انجام داد:بوت لودر رادیو را فلش می کند. در این حالت، باید امکان راه اندازی مجدد از پارتیشن بازیابی به بوت لودر برای تکمیل به روز رسانی وجود داشته باشد.
تصویر بازیابی رادیو را چشمک می زند. این قابلیت می تواند به عنوان یک کتابخانه باینری یا ابزار ارائه شود.
برای پیادهسازی بهروزرسانیهای هوایی (OTA) ، بوتلودر باید بتواند به دیسک RAM بازیابی در هنگام بوت دسترسی داشته باشد. اگر دستگاه از یک تصویر بازیابی AOSP اصلاح نشده استفاده کند، بوت لودر 32 بایت اول پارتیشن 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 بر عهده چارچوب Android است. بوت لودر هرگز نباید پارتیشنی را به عنوان بوت شده با موفقیت علامت گذاری کند.
پشتیبانی از کنترل بوت 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
یا فرمان بوت کنترل HAL setActiveBootSlot
، بوت لودر باید شکاف فعلی را بهروزرسانی کند، slot-unbootable
و slot-successful
را پاک کند و تعداد تلاش مجدد را بازنشانی کند (این تنها راه برای پاک کردن slot-unbootable
است. slot-unbootable
).
دستگاههای بدون بهروزرسانی A/B
برای پشتیبانی از بهروزرسانیهای OTA در دستگاههایی که از بهروزرسانیهای A/B استفاده نمیکنند (به دستگاههای غیرقابل بهروزرسانی A/B مراجعه کنید)، مطمئن شوید که بوتلودر دستگاه دارای معیارهای زیر است.
پارتیشن
recovery
باید حاوی تصویری باشد که قادر به خواندن تصویر سیستم از برخی پارتیشن های پشتیبانی شده (cache
،userdata
) و نوشتن آن در پارتیشنsystem
باشد.بوت لودر باید از بوت شدن مستقیم به حالت بازیابی پشتیبانی کند.
اگر بهروزرسانیهای تصویر رادیویی پشتیبانی میشوند، پارتیشن
recovery
نیز باید بتواند رادیو را فلش کند. این را می توان به یکی از دو روش انجام داد:بوت لودر رادیو را فلش می کند. در این حالت، باید امکان راه اندازی مجدد از پارتیشن بازیابی به بوت لودر برای تکمیل به روز رسانی وجود داشته باشد.
تصویر بازیابی رادیو را چشمک می زند. این قابلیت می تواند به عنوان یک کتابخانه باینری یا ابزار ارائه شود.