تصاویر بازیابی

در دستگاه‌های غیر A/B، تصویر بازیابی باید حاوی اطلاعاتی از یک لکه درخت دستگاه (DTB) یا تصویر پوششی رابط پیکربندی و برق پیشرفته (ACPI) باشد. هنگامی که چنین دستگاه‌هایی در حالت بازیابی بوت می‌شوند، بوت لودر می‌تواند تصویر پوششی را که با تصویر بازیابی سازگار است، بارگذاری کند. دستگاه‌هایی که از به‌روزرسانی‌های A/B (یکپارچه) پشتیبانی می‌کنند، باید از بازیابی به عنوان بوت به جای یک پارتیشن بازیابی جداگانه استفاده کنند (برای جزئیات بیشتر، به پیاده‌سازی به‌روزرسانی‌های A/B مراجعه کنید).

گزینه‌های مربوط به گنجاندن DTBO/ACPIO بازیابی به عنوان بخشی از تصویر بوت/بازیابی، در نسخه‌های مختلف اندروید متفاوت است.

انتشار طرح به‌روزرسانی انطباق با GKI نسخه هدر بوت (دستگاه‌های راه‌اندازی) نسخه هدر بوت (ارتقاء دستگاه‌ها) تصویر بازیابی اختصاصی مورد نیاز است
۱۱ الف/ب،
الف/ب مجازی
بله ۳ * ناموجود خیر
الف/ب،
الف/ب مجازی
خیر ۲، ۳ ۰، ۱، ۲، ۳ خیر
غیر A/B بله ۳ ناموجود بله
غیر A/B خیر ۲، ۳ ۰، ۱، ۲، ۳ بله
۱۰ (س) الف/ب ناموجود ۲ ۰، ۱، ۲ خیر
غیر A/B ناموجود ۲ ۰، ۱، ۲ بله
۹ (پ) الف/ب ناموجود ۱ ۰، ۱ خیر
غیر A/B ناموجود ۱ ۰، ۱ بله
۸ (او) الف/ب ناموجود ناموجود (0 در نظر گرفته می‌شود) ناموجود (0 در نظر گرفته می‌شود) خیر
غیر A/B ناموجود ناموجود (0 در نظر گرفته می‌شود) ناموجود (0 در نظر گرفته می‌شود) بله

* دستگاه‌های A/B که اندروید ۱۱ یا بالاتر را اجرا می‌کنند و از تصویر هسته عمومی (GKI) استفاده می‌کنند، باید از نسخه ۳ هدر بوت اصلی استفاده کنند تا با پارتیشن بوت فروشنده سازگار باشند.

نکات کلیدی:

  • دستگاه‌های A/B نیازی به مشخص کردن یک تصویر بازیابی ندارند زیرا به‌روزرسانی‌های A/B از دو مجموعه پارتیشن (شامل boot و dtbo ) استفاده می‌کنند و در طول به‌روزرسانی‌ها بین آنها جابجا می‌شوند و نیاز به یک تصویر بازیابی را از بین می‌برند. دستگاه‌های A/B همچنان می‌توانند از یک تصویر بازیابی اختصاصی استفاده کنند.

  • دستگاه‌های غیر A/B که با اندروید ۱۱ یا بالاتر راه‌اندازی می‌شوند و از نسخه ۳ هدر بوت استفاده می‌کنند، باید صریحاً نسخه ۲ هدر بوت را برای تصویر بازیابی به طور جداگانه مشخص کنند. به عنوان مثال:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • برای معماری‌هایی که از درخت‌های دستگاه پشتیبانی نمی‌کنند، تصویر بازیابی می‌تواند به جای تصویر DTBO شامل یک تصویر ACPIO باشد.

درباره خطاهای OTA و تصاویر بازیابی

برای جلوگیری از خرابی‌های OTA (از طریق هوا) در دستگاه‌های غیر A/B، تصویر بازیابی باید خودکفا و مستقل از سایر تصاویر باشد. در طول به‌روزرسانی OTA، اگر مشکلی پس از به‌روزرسانی تصویر پوششی (اما قبل از تکمیل به‌روزرسانی کامل) رخ دهد، دستگاه سعی می‌کند برای تکمیل به‌روزرسانی OTA به حالت بازیابی بوت شود. با این حال، از آنجا که پارتیشن پوششی قبلاً به‌روزرسانی شده است، ممکن است عدم تطابق با تصویر بازیابی (که هنوز به‌روزرسانی نشده است) رخ دهد.

برای جلوگیری از وابستگی بازیابی به پارتیشن DTBO/ACPIO در حین به‌روزرسانی، دستگاه‌های غیر A/B که اندروید ۹ یا بالاتر را اجرا می‌کنند، می‌توانند یک تصویر بازیابی DTBO/ACPIO حاوی اطلاعات تصویر پوششی را به عنوان یک بخش جداگانه در قالب تصویر بوت مشخص کنند (باید از نسخه هدر بوت ۱ یا ۲ استفاده شود).

تغییرات تصویر بوت

برای اینکه ایمیج ریکاوری در دستگاه‌های غیر A/B که اندروید ۹ یا بالاتر دارند، حاوی DTBO یا ACPIO ریکاوری باشد، ساختار ایمیج بوت را به شرح زیر به‌روزرسانی کنید.

بخش تصویر بوت تعداد صفحات
هدر بوت (۱ صفحه) ۱
هسته (l صفحه) l = ( kernel_size + page_size - ۱) / page_size
رم‌دیسک (m صفحه) m = ( ramdisk_size + page_size - ۱) / page_size
بوت لودر مرحله دوم (n صفحه) n = ( second_size + page_size - ۱) / page_size
بازیابی DTBO یا ACPIO (صفحات o) o = ( recovery_[dtbo|acpio]_size + page_size - 1) / page_size

برای جزئیات بیشتر در مورد آرگومان‌های ابزار mkbootimg برای تعیین نسخه هدر تصویر بوت و مسیرهای تصویر پوششی، به بخش «نسخه‌بندی هدر تصویر بوت» مراجعه کنید.

پیاده‌سازی DTBO

دستگاه‌های غیر A/B که از نسخه ۹ یا بالاتر استفاده می‌کنند، می‌توانند بخش recovery_dtbo از تصویر بازیابی را پر کنند. برای گنجاندن تصویر recovery_dtbo در recovery.img ، در BoardConfig.mk دستگاه:

  • مقدار پیکربندی BOARD_INCLUDE_RECOVERY_DTBO را روی true تنظیم کنید:

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • متغیر BOARD_MKBOOTIMG_ARGS را برای مشخص کردن نسخه هدر تصویر بوت، گسترش دهید:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • مطمئن شوید که متغیر BOARD_PREBUILT_DTBOIMAGE در مسیر تصویر DTBO تنظیم شده باشد. سیستم ساخت اندروید از این متغیر برای تنظیم آرگومان recovery_dtbo ابزار mkbootimg در حین ایجاد تصویر بازیابی استفاده می‌کند.

اگر متغیرهای BOARD_INCLUDE_RECOVERY_DTBO ، BOARD_MKBOOTIMG_ARGS و BOARD_PREBUILT_DTBOIMAGE به درستی تنظیم شده باشند، سیستم ساخت اندروید، DTBO مشخص شده توسط متغیر BOARD_PREBUILT_DTBOIMAGE در recovery.img را شامل می‌شود.

پیاده‌سازی ACPIO

دستگاه‌های غیر A/B که اندروید ۹ یا بالاتر را اجرا می‌کنند می‌توانند از یک تصویر پوششی ACPIO (به جای تصویر DTBO) استفاده کنند و می‌توانند بخش recovery_acpio (به جای بخش recovery_dtbo ) از تصویر بازیابی را پر کنند. برای گنجاندن تصویر recovery_acpio در recovery.img ، در BoardConfig.mk دستگاه:

  • مقدار پیکربندی BOARD_INCLUDE_RECOVERY_ACPIO را روی true تنظیم کنید:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • متغیر BOARD_MKBOOTIMG_ARGS را برای مشخص کردن نسخه هدر تصویر بوت گسترش دهید. این متغیر باید بزرگتر یا مساوی ۱ باشد تا از ACPIO بازیابی پشتیبانی کند.

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • مطمئن شوید که متغیر BOARD_RECOVERY_ACPIO در مسیر تصویر ACPIO تنظیم شده باشد. سیستم ساخت اندروید از این متغیر برای تنظیم آرگومان recovery_acpio ابزار mkbootimg در حین ایجاد تصویر بازیابی استفاده می‌کند.

اگر متغیرهای BOARD_INCLUDE_RECOVERY_ACPIO ، BOARD_MKBOOTIMG_ARGS و BOARD_RECOVERY_ACPIO به درستی تنظیم شده باشند، سیستم ساخت اندروید شامل ACPIO مشخص شده توسط متغیر BOARD_RECOVERY_ACPIO در recovery.img می‌شود.