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

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

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

رها کنید طرح به روز رسانی انطباق با GKI نسخه هدر بوت (دستگاه های راه اندازی) نسخه هدر بوت (دستگاه های در حال ارتقا) تصویر بازیابی اختصاصی مورد نیاز است
11 A/B،
A/B مجازی
بله 3 * N/A خیر
A/B،
A/B مجازی
خیر 2، 3 0، 1، 2، 3 خیر
غیر A/B بله 3 N/A بله
غیر A/B خیر 2، 3 0، 1، 2، 3 بله
10 (س) A/B N/A 2 0، 1، 2 خیر
غیر A/B N/A 2 0، 1، 2 بله
9 (P) A/B N/A 1 0، 1 خیر
غیر A/B N/A 1 0، 1 بله
8 (O) A/B N/A N/A (0 در نظر گرفته شد) N/A (0 در نظر گرفته شد) خیر
غیر A/B N/A N/A (0 در نظر گرفته شد) N/A (0 در نظر گرفته شد) بله

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

نکات کلیدی:

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

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

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

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

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

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

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

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

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

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

اجرای DTBO

دستگاه‌های غیرA/B دارای نسخه 9 یا بالاتر می‌توانند بخش 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 به درستی تنظیم شده باشند، سیستم ساخت Android شامل DTBO تعیین شده توسط متغیر BOARD_PREBUILT_DTBOIMAGE در recovery.img .

ACPIO را پیاده سازی کنید

دستگاه‌های غیرA/B دارای Android 9 یا بالاتر می‌توانند از یک تصویر همپوشانی 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، متغیر باید بزرگتر یا مساوی 1 باشد.

    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 به درستی تنظیم شده باشند، سیستم ساخت Android شامل ACPIO است که توسط متغیر BOARD_RECOVERY_ACPIO در recovery.img مشخص شده است.