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

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

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

انتشار به‌روزرسانی طرح‌واره مطابقت با GKI نسخه سرایند راه‌اندازی (دستگاه‌های راه‌اندازی) نسخه سرایند راه‌اندازی (درحال ارتقای دستگاه‌ها) روگرفت بازیابی اختصاصی الزامی است
11 A/B,
Virtual A/B
بله ‫۳* موجود نیست نه
آ/ب،
آ/ب مجازی
نه ۲، ۳ ۰، ۱، ۲، ۳ نه
غیر A/B بله 3 موجود نیست بله
غیر A/B نه ۲، ۳ ۰، ۱، ۲، ۳ بله
‫۱۰ (Q) آزمایش آ/ب موجود نیست 2 ۰، ۱، ۲ نه
غیر A/B موجود نیست 2 ۰، ۱، ۲ بله
9 (P) آزمایش آ/ب موجود نیست 1 ۰، ۱ نه
غیر A/B موجود نیست 1 ۰، ۱ بله
8 (O)‎ آزمایش آ/ب موجود نیست ناموجود (۰ درنظر گرفته می‌شود) موجود نیست (۰ درنظر گرفته می‌شود) نه
غیر A/B موجود نیست ناموجود (۰ درنظر گرفته می‌شود) موجود نیست (۰ درنظر گرفته می‌شود) بله

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

نکات کلیدی:

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

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

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

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

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

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

تغییرات تصویر راه‌اندازی

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

بخش تصویر راه‌اندازی تعداد صفحه‌ها
سرایند راه‌اندازی (۱ صفحه) 1
هسته (۱ صفحه) ‫l = (kernel_size + page_size - ۱) / page_size
Ramdisk (m pages) ‫m = (ramdisk_size + page_size - 1) / 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 تنظیم شده باشد. سیستم ساخت Android از این متغیر برای تنظیم پارامتر recovery_dtbo ابزار mkbootimg درطول ایجاد تصویر بازیابی استفاده می‌کند.

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

پیاده‌سازی ACPIO

دستگاه‌های غیر A/B که Android نسخه ۹ یا بالاتر را اجرا می‌کنند می‌توانند از تصویر هم‌پوشانی 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 تنظیم شده باشد. سیستم ساخت Android از این متغیر برای تنظیم recovery_acpio آرگومان ابزار mkbootimg درطول ایجاد تصویر بازیابی استفاده می‌کند.

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