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