اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
صور الاسترداد
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
في الأجهزة غير المزوّدة بميزة A/B، يجب أن تحتوي صورة الاسترداد على معلومات من ملف
جهاز شجرة البيانات (DTB) أو صورة تركيبة
Advanced Configuration and Power Interface (ACPI). عند تشغيل هذه
الأجهزة في وضع الاسترداد، يمكن لبرنامج التمهيد تحميل الصورة المتراكبة التي
تتوافق مع صورة الاسترداد. إنّ الأجهزة المتوافقة مع تحديثات A/B (سلسة) يجب أن تستخدم وضع الاسترداد لبدء التشغيل بدلاً من استخدام مشاركة ملف شخصي
منفصلة للاسترداد (للاطّلاع على التفاصيل، يُرجى الاطّلاع على مقالة تنفيذ تحديثات A/B).
تختلف خيارات تضمين DTBO/ACPIO للاسترداد كجزء من ملف التمهيد/ملف الاسترداد
حسب إصدارات Android.
الإصدار |
تعديل المخطّط |
الامتثال لمعايير GKI |
إصدار عنوان الإقلاع (أجهزة التشغيل) |
إصدار عنوان الإقلاع (ترقية الأجهزة) |
يجب توفُّر صورة استرداد مخصّصة. |
11 |
اختبار A/B، اختبار A/B الافتراضي |
نعم |
3* |
لا ينطبق |
لا |
اختبار A/B، اختبار A/B الافتراضي |
لا |
2، 3 |
0 و1 و2 و3 |
لا |
غير اختبار أ/ب |
نعم |
3 |
لا ينطبق |
نعم |
غير اختبار أ/ب |
لا |
2، 3 |
0 و1 و2 و3 |
نعم |
10 (Q) |
أ/ب |
لا ينطبق |
2 |
0 و1 و2 |
لا |
غير اختبار أ/ب |
لا ينطبق |
2 |
0 و1 و2 |
نعم |
9 (P) |
أ/ب |
لا ينطبق |
1 |
0, 1 |
لا |
غير اختبار أ/ب |
لا ينطبق |
1 |
0, 1 |
نعم |
8 (O) |
أ/ب |
لا ينطبق |
لا ينطبق (يتم اعتباره 0) |
لا ينطبق (يتم اعتباره 0) |
لا |
غير اختبار أ/ب |
لا ينطبق |
لا ينطبق (يتم اعتباره 0) |
لا ينطبق (يتم اعتباره 0) |
نعم |
* يجب أن تستخدم أجهزة A/B التي تعمل بالإصدار 11 من نظام التشغيل Android
أو إصدارًا أحدث وتستخدم صورة Kernel Generic
(GKI) إصدارًا أساسيًا من عنوان التمهيد هو
3 لتكون
متوافقة مع قسم التمهيد الخاص بالمورّد.
النقاط الرئيسية:
لا تحتاج أجهزة A/B إلى تحديد صورة استرداد لأنّ تحديثات A/B تستخدم مجموعتَين
من الأقسام (بما في ذلك boot
وdtbo
) وتتبدّل بينهما أثناء
التحديثات، ما يزيل الحاجة إلى صورة الاسترداد. يمكن لأجهزة A/B
استخدام صورة استرداد مخصّصة.
بالنسبة إلى الأجهزة غير المزوّدة بميزة A/B والتي تعمل بالإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث
وتستخدم الإصدار 3 من ملف "عنوان التمهيد"، يجب تحديد الإصدار 2 من ملف "عنوان التمهيد"
لصورة الاسترداد بشكل منفصل. مثلاً:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
بالنسبة إلى التصاميم التي لا تتوافق مع أشجار الأجهزة، يمكن أن تشمل صورة الاسترداد
صورة ACPIO بدلاً من صورة DTBO.
لمحة عن حالات تعذُّر التحديث عبر شبكة غير سلكية (OTA) وصور الاسترداد
لمنع حدوث أعطال في عملية التحديث عبر شبكة غير سلكية (OTA) على الأجهزة غير المزوّدة بميزة A/B، يجب أن تكون ملفّات استرداد البيانات
مستقلة عن الملفات الأخرى. أثناء عملية التحديث عبر الهواء،
إذا حدثت مشكلة بعد تحديث الصورة المتراكبة (ولكن قبل
إكمال التحديث الكامل)، يحاول الجهاز التمهيد إلى وضع الاسترداد لإكمال التحديث عبر الهواء. ومع ذلك، بما أنّه سبق أن تم تعديل القسم المتراكب، قد يحدث تعارض مع صورة الاسترداد (التي لم يتم تعديلها بعد).
لمنع الاعتماد على قسم DTBO/ACPIO أثناء التحديث، يمكن للأجهزة غير المزوّدة بميزة A/B التي تعمل بنظام التشغيل Android 9 أو إصدار أحدث تحديد صورة DTBO/ACPIO لميزة الاسترداد تحتوي على معلومات من الصورة المتراكبة كقسم منفصل في تنسيق صورة التمهيد (يجب استخدام الإصدار 1 أو 2 من عنوان التمهيد).
التغييرات في صورة التشغيل
للسماح لصورة الاسترداد بتضمين DTBO أو ACPIO لميزة الاسترداد على الأجهزة غير المزوّدة بميزة A/B
والتي تعمل بالإصدار 9 من نظام التشغيل Android أو إصدار أحدث، عليك تعديل بنية
صورة التمهيد على النحو التالي.
قسم صورة التشغيل |
عدد الصفحات |
رأس التمهيد (صفحة واحدة) |
1 |
النواة (الصفحات الطويلة) |
l = (kernel_size + page_size -
1) / page_size |
ذاكرة الوصول العشوائي (ملفات بحجم 1 ميغابايت) |
m = (ramdisk_size + page_size -
1) / page_size |
برنامج إقلاع المرحلة الثانية (n صفحة) |
n = (second_size + page_size -
1) / page_size |
استرداد DTBO أو ACPIO (للصفحات) |
o = (recovery_[dtbo|acpio]_size + page_size -
1) / page_size |
للحصول على تفاصيل حول مَعلمات أداة mkbootimg
لتحديد إصدار عنوان
صورة التمهيد ومسارات الصور المتراكبة، يُرجى الاطّلاع على إصدار عنوان
صورة التمهيد.
تنفيذ ميزة "المعالجة المحدودة للبيانات"
يمكن للأجهزة غير المزوّدة بميزة 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. يستخدم نظام إنشاء Android المتغيّر لضبط الوسيطة
recovery_dtbo
لأداة mkbootimg
أثناء إنشاء
صورة الاسترداد.
في حال ضبط المتغيّرات BOARD_INCLUDE_RECOVERY_DTBO
وBOARD_MKBOOTIMG_ARGS
و
BOARD_PREBUILT_DTBOIMAGE
بشكلٍ صحيح، يتضمّن نظام إنشاء Android
ملف DTBO الذي يحدّده المتغيّر BOARD_PREBUILT_DTBOIMAGE
في
recovery.img
.
تنفيذ ميزة "الإعلانات التي تستهدف الأطفال على الإنترنت"
يمكن للأجهزة غير المزوّدة بميزة 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
لتحديد إصدار عنوان
صورة التشغيل. يجب أن يكون المتغيّر أكبر من أو يساوي 1 لتفعيل ميزة الاسترداد
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
.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","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-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],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`."]]