به روز رسانی OTA را پیاده سازی کنید

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

بوت لودر باید تعیین کند که کدام اسلات بارگذاری شود. شکل نمونه ای از فرآیند تصمیم گیری را نشان می دهد.

جریان شکاف بوت لودر
شکل 1. جریان شکاف بوت لودر
  1. تعیین کنید که کدام شکاف را امتحان کنید. سعی نکنید شکافی را که با علامت slot-unbootable مشخص شده است، بارگیری نکنید. این اسلات باید با مقادیر بازگردانده شده توسط fastboot مطابقت داشته باشد و به آن اسلات فعلی می گویند.

  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 و غیره) تولید کند.

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

بوت لودر باید تعیین کند که کدام اسلات بارگذاری شود. شکل نمونه ای از فرآیند تصمیم گیری را نشان می دهد.

جریان شکاف بوت لودر
شکل 1. جریان شکاف بوت لودر
  1. تعیین کنید که کدام شکاف را امتحان کنید. سعی نکنید شکافی را که با علامت slot-unbootable مشخص شده است، بارگیری نکنید. این اسلات باید با مقادیر بازگردانده شده توسط fastboot مطابقت داشته باشد و به آن اسلات فعلی می گویند.

  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 و غیره) تولید کند.

هنگام تنظیم شکاف فعلی با استفاده از دستور 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 نیز باید بتواند رادیو را فلش کند. این را می توان به یکی از دو روش انجام داد:

    • بوت لودر رادیو را فلش می کند. در این حالت، باید امکان راه اندازی مجدد از پارتیشن بازیابی به بوت لودر برای تکمیل به روز رسانی وجود داشته باشد.

    • تصویر بازیابی رادیو را چشمک می زند. این قابلیت می تواند به عنوان یک کتابخانه باینری یا ابزار ارائه شود.