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