در دستگاههای غیر 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
مشخص شده است.