از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
تصاویر بازیابی
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
در دستگاههای غیر 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
مشخص شده است.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Recovery images\n\nOn non-A/B devices, the recovery image should contain information from a\n[device tree blob (DTB)](/docs/core/architecture/bootloader/dtb-images) or\n[Advanced Configuration and Power Interface\n(ACPI)](https://uefi.org/acpi/specs) overlay image. When such\ndevices boot into recovery, the bootloader can then load the overlay image that\nis compatible with the recovery image. Devices that support [A/B (seamless)\nupdates](/docs/core/ota/ab) should use recovery as boot instead of a\nseparate recovery partition (for details, see [Implementing A/B\nUpdates](/docs/core/ota/ab/ab_implement)).\n\nThe options for including a recovery DTBO/ACPIO as part of the boot/recovery\nimage differ between Android releases.\n\n| Release | Update scheme | GKI compliance | Boot header version (launching devices) | Boot header version (upgrading devices) | Dedicated recovery image required |\n|---------|------------------|----------------|-----------------------------------------|-----------------------------------------|-----------------------------------|\n| 11 | A/B, Virtual A/B | Yes | 3^\\*^ | N/A | No |\n| 11 | A/B, Virtual A/B | No | 2, 3 | 0, 1, 2, 3 | No |\n| 11 | non-A/B | Yes | 3 | N/A | Yes |\n| 11 | non-A/B | No | 2, 3 | 0, 1, 2, 3 | Yes |\n| 10 (Q) | A/B | N/A | 2 | 0, 1, 2 | No |\n| 10 (Q) | non-A/B | N/A | 2 | 0, 1, 2 | Yes |\n| 9 (P) | A/B | N/A | 1 | 0, 1 | No |\n| 9 (P) | non-A/B | N/A | 1 | 0, 1 | Yes |\n| 8 (O) | A/B | N/A | N/A (considered 0) | N/A (considered 0) | No |\n| 8 (O) | non-A/B | N/A | N/A (considered 0) | N/A (considered 0) | Yes |\n\n**\\*** *A/B devices running Android\n11 or higher and using the [Generic Kernel Image\n(GKI)](/docs/core/architecture/kernel/generic-kernel-image) must use a\nprimary [boot header version of\n3](/docs/core/architecture/bootloader/boot-image-header#header-v3) to be\ncompatible with the [vendor boot\npartition](/docs/core/architecture/bootloader/partitions/vendor-boot-partitions).*\n\nKey points:\n\n- A/B devices don't need to specify a recovery image as A/B updates use two sets\n of partitions (including `boot` and `dtbo`) and switch between them during\n updates, removing the need for a recovery image. A/B devices can\n still use a dedicated recovery image.\n\n- Non-A/B devices launching with Android 11 or higher\n and using a boot header version of 3 must explicitly specify a [boot header\n version of 2](/docs/core/architecture/bootloader/boot-image-header#header-v2)\n for the recovery image separately. For example:\n\n BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2\n\n- For architectures that don't support device trees, the recovery image can\n include an ACPIO image instead of a DTBO image.\n\nAbout OTA failures and recovery images\n--------------------------------------\n\nTo prevent over-the-air (OTA) failures on non-A/B devices, the recovery image\nshould be self-sufficient and independent of other images. During an OTA update,\nif a problem occurs after the overlay image has been updated (but prior to\ncompleting the full update), the device tries to boot into recovery mode to\ncomplete the OTA update. However, because the overlay partition has already been\nupdated, a mismatch could occur with the recovery image (which hasn't been\nupdated yet).\n\nTo prevent recovery from depending on the DTBO/ACPIO partition during an\nupdate, non-A/B devices running Android 9 or higher\ncan specify a recovery DTBO/ACPIO image containing information from the overlay\nimage as a separate section in the boot image format (must use a boot header\nversion of 1 or 2).\n\nBoot image changes\n------------------\n\nTo allow the recovery image to contain the recovery DTBO or ACPIO on non-A/B\ndevices running Android 9 or higher, update the boot\nimage structure as follows.\n\n| Boot image section | Number of pages |\n|-----------------------------------|--------------------------------------------------------------------|\n| Boot header (1 page) | 1 |\n| Kernel (l pages) | l = (`kernel_size` + `page_size` - 1) / `page_size` |\n| Ramdisk (m pages) | m = (`ramdisk_size` + `page_size` - 1) / `page_size` |\n| Second stage bootloader (n pages) | n = (`second_size` + `page_size` - 1) / `page_size` |\n| Recovery DTBO or ACPIO (o pages) | o = (`recovery_[dtbo|acpio]_size` + `page_size` - 1) / `page_size` |\n\nFor details on the `mkbootimg` tool arguments for specifying the boot image\nheader version and overlay image paths, see [Boot Image Header\nVersioning](/docs/core/architecture/bootloader/boot-image-header#implementing-versioning).\n\nImplement DTBO\n--------------\n\nNon-A/B devices running 9 or higher can populate the\n`recovery_dtbo` section of the recovery image. To include the `recovery_dtbo`\nimage in `recovery.img`, in the device `BoardConfig.mk`:\n\n- Set the config `BOARD_INCLUDE_RECOVERY_DTBO` to `true`:\n\n BOARD_INCLUDE_RECOVERY_DTBO := true\n\n- Extend the `BOARD_MKBOOTIMG_ARGS` variable to specify the boot image header\n version:\n\n BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)\n\n- Ensure that the `BOARD_PREBUILT_DTBOIMAGE` variable is set to the path of the\n DTBO image. The Android build system uses the variable to set the\n `recovery_dtbo` argument of the `mkbootimg` tool during the creation of\n recovery image.\n\nIf the `BOARD_INCLUDE_RECOVERY_DTBO`, `BOARD_MKBOOTIMG_ARGS`, and\n`BOARD_PREBUILT_DTBOIMAGE` variables are set correctly, the Android build system\nincludes the DTBO specified by the `BOARD_PREBUILT_DTBOIMAGE` variable in\n`recovery.img`.\n\nImplement ACPIO\n---------------\n\nNon-A/B devices running Android 9 or higher can use\nan ACPIO overlay image (instead of a DTBO image) and can populate the\n`recovery_acpio` section (instead of the `recovery_dtbo` section) of the\nrecovery image. To include the `recovery_acpio` image in `recovery.img`, in the\ndevice `BoardConfig.mk`:\n\n- Set the config `BOARD_INCLUDE_RECOVERY_ACPIO` to `true`:\n\n BOARD_INCLUDE_RECOVERY_ACPIO := true\n\n- Extend the `BOARD_MKBOOTIMG_ARGS` variable to specify the boot image header\n version. The variable must be greater than or equal to 1 to support recovery\n ACPIO.\n\n BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)\n\n- Ensure that the `BOARD_RECOVERY_ACPIO` variable is set to the path of the\n ACPIO image. The Android build system uses the variable to set the\n `recovery_acpio` argument of the `mkbootimg` tool during the creation of the\n recovery image.\n\nIf the `BOARD_INCLUDE_RECOVERY_ACPIO`, `BOARD_MKBOOTIMG_ARGS`, and\n`BOARD_RECOVERY_ACPIO` variables are set correctly, the Android build system\nincludes the ACPIO specified by the `BOARD_RECOVERY_ACPIO` variable in\n`recovery.img`."]]