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