في نظام التشغيل Android 12، تحتوي صورة boot
العامة، والمُشار إليها باسم
صورة النواة العامة (GKI)،
على رمز القرص العام ونواة GKI.
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 13، تتم إزالة قرص ذاكرة التخزين المؤقت العام من صورة boot
ووضعه في صورة init_boot
منفصلة. يؤدي هذا التغيير إلى إزالة كل المكونات من صورة boot
باستثناء قلب GKI.
بالنسبة إلى ترقية الأجهزة التي تستمر في استخدام Android 12
أو إصدارات أقدم من kernel، سيظل ملف ramdisk العام في مكانه بدون
حاجة إلى صورة init_boot
جديدة.
لإنشاء ذاكرة وصول عشوائي (RAM) عامة، عليك نقل الموارد الخاصة بالمورّد خارج ذاكرة الوصول العشوائي (RAM)
كي لا تحتوي ذاكرة الوصول العشوائي (RAM) العامة إلا على المرحلة الأولى init
وملف
موقع يحتوي على معلومات الطابع الزمني.
على الأجهزة التي:
لا تستخدِم قسمًا مخصّصًا لـ
recovery
، فسيتم نقل كل أجزاء الاسترداد من ملف ramdisk العام إلى ملف ramdisk لـvendor_boot
.استخدِم قسمًا مخصّصًا لنظام التشغيل
recovery
، ولا حاجة إلى إجراء أي تغيير في ملف ramdisk لنظام التشغيلrecovery
لأنّه مكتفٍ ذاتيًا.recovery
هندسة معمارية
توضّح المخطّطات التالية بنية الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android والإصدارات الأحدث.
تحتوي الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android على نسخة
init_boot
جديدة تحتوي على ملف ramdisk العام.
تستخدم الأجهزة التي يتم ترقيتها من Android 12 إلى Android
13 البنية نفسها المستخدَمة في
Android 12.
الإطلاق باستخدام Android 13 بدون وضع استرداد مخصّص
الشكل 1: سيتم تشغيل الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو ترقيتها إلى الإصدار 13 من نظام التشغيل Android، والتي لا تتضمّن أي عمليات استرداد مخصَّصة.
بدء التشغيل باستخدام Android 13 ووضع الاسترداد المخصّص ووضع A/B (مساحة تخزين مؤقتة مخصّصة)
الشكل 2. الأجهزة التي تعمل بنظام التشغيل Android 13 أو التي تم ترقيتها إليه، والتي تتضمّن واجهة برمجة التطبيقات GKI ووضع الاسترداد المخصّص ووضع A/B
راجِع هذا الشكل إذا كان الجهاز يتضمّن قسمَي recovery_a
وrecovery_b
.
إطلاق الموقع الإلكتروني بالإصدار 13 من نظام التشغيل Android، بشكل مخصّص واسترداد البيانات من خلال نظام التشغيل A/B (قرص RAMD مخصَّص)
الشكل 3: الأجهزة التي تعمل بالإصدار 13 من Android أو التي تم ترقيتها إليه، مع واجهة GKI وميزة الاسترداد المخصّصة وغير المستندة إلى ميزة A/B
راجِع هذا الشكل إذا كان الجهاز يحتوي على قسم باسم recovery
بدون لاحقة
فتحة.
تشغيل الإصدار 12 من نظام التشغيل Android أو الترقية إليه بدون وضع استرداد مخصّص
الشكل 4: سيتم تشغيل الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android أو ترقيتها إلى الإصدار 12 من نظام التشغيل Android، بدون الحاجة إلى استرداد مخصّص للبيانات.
تشغيل نظام التشغيل Android 12 أو الترقية إليه، وبدء وضع الاسترداد المخصّص ووضع الاسترداد (A/B) (شريحة ذاكرة وصول عشوائي مخصّصة)
الشكل 5. الأجهزة التي تعمل بنظام التشغيل Android 12 أو التي تم ترقيتها إليه، والتي تتضمّن واجهة GKI ووضع الاسترداد المخصّص ووضع A/B
يُرجى الرجوع إلى هذا الشكل إذا كان الجهاز يتضمّن قسمَي recovery_a
وrecovery_b
.
تشغيل أو ترقية نظام التشغيل Android 12، المخصص والمخصص لاسترداد البيانات من النوع A/B (قرص RAM مخصَّص)
الشكل 6: الأجهزة التي سيتم إطلاقها أو ترقيتها إلى الإصدار 12 من نظام التشغيل Android، والتي تتضمّن مفاتيح التشفير GKI، والمخصصة والاسترداد غير A/B
راجِع هذا الشكل إذا كان الجهاز يحتوي على قسم باسم recovery
بدون لاحقة
فتحة.
الترقية إلى Android 12، واستخدام وضع الاسترداد كوضع التشغيل (recovery-as-ramdisk)
الشكل 7: الأجهزة التي يتم ترقيتها إلى Android 12، بدون GKI، ووضع الاسترداد كوضع التشغيل
الترقية إلى Android 12، وضع الاسترداد المخصّص (مساحة تخزين مؤقت مخصّصة)
الشكل 8. الأجهزة التي يتم ترقيتها إلى Android 12، بدون GKI، وضع الاسترداد المخصّص
محتوى صور التشغيل
تحتوي صور تمهيد Android على ما يلي:
صورة
init_boot
تمت إضافتها للأجهزة التي تعمل بنظام التشغيل Android 13- إصدار العنوان V4
- صورة ذاكرة وصول عشوائي (RAM) عامة
صورة
boot
عامة- إصدار العنوان V3 أو
V4
-
boot_signature
لشهادة boot.img الخاصة ببرنامج GKI (الإصدار 4 فقط) ملف GKIboot.img
المعتمَد غير موقَّع للتشغيل المُتحقّق منه. على المصنّعين الأصليين للأجهزة توقيعboot.img
المُنشئ مسبقًا باستخدام مفتاح AVB خاص بالجهاز. - عامة
cmdline
(GENERIC_KERNEL_CMDLINE
) - نواة GKI
-
- صورة ramdisk عامة
- لا يتم تضمينه إلا في صور يبلغ عددها
boot
من نظام التشغيل Android 12 والإصدارات الأقدم
- لا يتم تضمينه إلا في صور يبلغ عددها
- إصدار العنوان V3 أو
V4
vendor_boot
صورة (للحصول على التفاصيل، يُرجى الاطّلاع على أقسام بوت المورّد)vendor_boot
العنوانcmdline
خاص بالجهاز (BOARD_KERNEL_CMDLINE
)
vendor_boot
صورة ذاكرة وصول عشوائي (RAM)lib/modules
- موارد الاسترداد (في حال عدم توفّر فريق استرداد مخصّص)
- صورة
dtb
صورة
recovery
- الإصدار 2 من العنوان
cmdline
خاص بالجهاز لاسترداد البيانات، إذا لزم الأمر- بالنسبة إلى قسم الاسترداد غير A/B، يجب أن تكون محتويات الرأس مستقلة، راجِع صور الاسترداد. مثلاً:
- لا يتم تسلسل
cmdline
معboot
وvendor_boot
cmdline
. - يحدِّد العنوان DTBO للاسترداد، إذا لزم الأمر.
- بالنسبة إلى قسم استرداد A/B، يمكن إنشاء تسلسل للمحتوى أو استنتاجه من
boot
وvendor_boot
. مثلاً: - يتم تسلسل
cmdline
معboot
وvendor_boot
cmdline
. - يمكن استنتاج DTBO من عنوان
vendor_boot
.
recovery
صورة ذاكرة وصول عشوائي (RAM)- موارد الاسترداد
- بالنسبة إلى قسم الاسترداد بخلاف A/B، يجب أن يكون محتوى قرص ذاكرة التخزين مستقلاً، ويمكنك الاطّلاع على صور الاسترداد. مثلاً:
- يجب أن يحتوي
lib/modules
على جميع وحدات النواة المطلوبة لتشغيل وضع الاسترداد. - يجب أن يحتوي ملف ramdisk الخاص بعملية الاسترداد على
init
. - بالنسبة إلى قسم الاسترداد A/B، يتمّ وضع ملف ramdisk الخاص بعملية الاسترداد في بداية ملفَي ramdisk الخاصَّين بالنظام العام و
vendor_boot
، وبالتالي لا يلزم أن يكون ملف ramdisk الخاص بعملية الاسترداد مستقلاً. مثلاً: - قد لا يحتوي
lib/modules
إلا على وحدات إضافية للنواة مطلوبة لبدء تشغيل وضع الاسترداد، بالإضافة إلى وحدات النواة فيvendor_boot
ramdisk. - قد يكون الرابط الرمزي في
/init
متوفّرًا، ولكنّه يُخفَّض من شأنه مقارنةً بملف/init
الثنائي في المرحلة الأولى من ملف التمهيد.
- الإصدار 2 من العنوان
محتوى صورة ذاكرة الوصول العشوائي (RAM) العام
يحتوي ملف ramdisk العام على المكوّنات التالية.
init
system/etc/ramdisk/build.prop
ro.PRODUCT.bootimg.* build
الأدوات- الدلائل الفارغة لنقاط الربط:
debug_ramdisk/
وmnt/
وdev/
وsys/
proc/
وmetadata/
first_stage_ramdisk/
- أدلة فارغة مكرّرة لنقاط الربط:
debug_ramdisk/
وmnt/
dev/
وsys/
وproc/
وmetadata/
- أدلة فارغة مكرّرة لنقاط الربط:
دمج صورة التشغيل
تتحكّم علامات الإنشاء في كيفية إنشاء صور init_boot
وboot
وrecovery
وvendor_boot
. يجب أن تكون قيمة متغيّر لوحة منطقي هي السلسلة
true
أو فارغة (وهي القيمة التلقائية).
TARGET_NO_KERNEL
. يشير هذا المتغيّر إلى ما إذا كان الإصدار يستخدم ملف booted image مُعدّ مسبقًا. إذا تم ضبط هذا المتغيّر علىtrue
، اضبطBOARD_PREBUILT_BOOTIMAGE
على موقع صورة التمهيد المُنشأة مسبقًا (BOARD_PREBUILT_BOOTIMAGE:= device/${company}/${board}/boot.img
).BOARD_USES_RECOVERY_AS_BOOT
: يشير هذا المتغيّر إلى ما إذا كان الجهاز يستخدم صورةrecovery
على أنّها صورةboot
. عند استخدام GKI، يكون هذا المتغيّر فارغًا ويجب نقل موارد الاسترداد إلىvendor_boot
.BOARD_USES_GENERIC_KERNEL_IMAGE
: يشير هذا المتغيّر إلى أنّ اللوحة تستخدم GKI. لا يؤثر هذا المتغيّر في sysprops أوPRODUCT_PACKAGES
.هذا هو مفتاح GKI على مستوى اللوحة، وجميع المتغيّرات التالية محدودة بهذا المتغيّر.
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
. يتحكّم هذا المتغيّر في ما إذا كان سيتم إنشاء موارد استرداد ذاكرة الوصول العشوائي على الجهازvendor_boot
.عند ضبط هذه السياسة على
true
، يتم إنشاء موارد استرداد الحساب علىvendor-ramdisk/
فقط، ولا تكون مصمَّمة علىrecovery/root/
.عندما تكون فارغة، يتم إنشاء موارد الاسترداد لـ
recovery/root/
فقط ولا يتم إنشاؤها لـvendor-ramdisk/
.
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT
: يتحكّم هذا المتغيّر في ما إذا كان سيتم إنشاء مفاتيح GSI AVB لتكونvendor_boot
.عند ضبط القيمة على
true
، إذا كانتBOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
:تم ضبطه، يتم إنشاء مفاتيح AVB في GSI لتعمل على
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb
.لم يتم ضبطه، يتم إنشاء مفاتيح AVB في GSI لتعمل على
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avb
.
عندما يكون الحقل فارغًا، إذا كان
BOARD_RECOVERY_AS_ROOT
:يتم ضبطها، يتم إنشاء مفاتيح AVB في GSI لتعمل على
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb
.لم يتم ضبطه، يتم إنشاء مفاتيح AVB في GSI لتعمل على
$ANDROID_PRODUCT_OUT/ramdisk/avb
.
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE
: يتحكّم هذا المتغيّر في ما إذا كانت صورةrecovery
تحتوي على نواة أم لا. في الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android وتستخدم قسم A/Brecovery
، يجب ضبط هذه المتغيّرة علىtrue
. بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 12 وتستخدم نظامًا غير A/B، يجب ضبط هذا المتغيّر علىfalse
للحفاظ على اكتمال صورة الاسترداد.BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES
. يتحكّم هذا المتغيّر في ما إذا كان سيتم نسخ$OUT/boot*.img
إلىIMAGES/
ضمن الملفات الهدف.يجب أن يضبط
aosp_arm64
هذا المتغيّر علىtrue
.ويجب أن تترك الأجهزة الأخرى هذا المتغيّر فارغًا.
BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE
. يتحكّم هذا المتغيّر في ما إذا كان سيتم إنشاءinit_boot.img
ويضبط الحجم. عند ضبطه، تتم إضافة ملف ramdisk العميق إلىinit_boot.img
بدلاً منboot.img
ويتطلب ضبط المتغيراتBOARD_AVB_INIT_BOOT*
لملف vbmeta المتسلسل.
المجموعات المسموح بها
المكوّن أو المتغيّر | ترقية الجهاز بدون قسم الاسترداد | ترقية الجهاز باستخدام قسم الاسترداد | تشغيل الجهاز بدون قسم الاسترداد | تشغيل الجهاز باستخدام قسم الاسترداد A/B | تشغيل الجهاز باستخدام قسم الاسترداد غير A/B | aosp_arm64 |
---|---|---|---|---|---|---|
تحتوي على boot |
نعم | نعم | نعم | نعم | نعم | نعم |
يتضمّن init_boot (Android 13) |
لا | لا | نعم | نعم | نعم | نعم |
تحتوي على vendor_boot |
اختياري | اختياري | نعم | نعم | نعم | لا |
تحتوي على recovery |
لا | نعم | لا | نعم | نعم | لا |
BOARD_USES_RECOVERY_AS_BOOT |
true |
فارغ | فارغ | فارغ | فارغ | فارغ |
BOARD_USES_GENERIC_KERNEL_IMAGE |
فارغ | فارغ | true |
true |
true |
true |
PRODUCT_BUILD_RECOVERY_IMAGE |
فارغ | true أو فارغ |
فارغ | true أو خالية |
true أو فارغ |
فارغ |
BOARD_RECOVERYIMAGE_PARTITION_SIZE |
فارغ | > 0 | فارغ | > 0 | أكبر من 0 | فارغ |
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT |
فارغ | فارغ | true |
فارغ | فارغ | فارغ |
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT |
فارغ | فارغ | true |
true |
true |
فارغ |
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE |
فارغ | فارغ | فارغ | true |
فارغ | فارغ |
BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES |
فارغ | فارغ | فارغ | فارغ | فارغ | true |
يمكن للأجهزة المزوَّدة بقسم recovery
ضبط الإعدادات
PRODUCT_BUILD_RECOVERY_IMAGE
على true
أو تركها فارغة. بالنسبة إلى هذه الأجهزة، في حال ضبط
BOARD_RECOVERYIMAGE_PARTITION_SIZE
، يتم إنشاء صورة recovery
.
تفعيل vbmeta المتسلسل لبدء التشغيل
يجب تفعيل رموز vbmeta المتسلسلة للصورتَين boot
وinit_boot
. حدد ما يلي:
BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA4096
BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_INIT_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_INIT_BOOT_ALGORITHM := SHA256_RSA2048
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX_LOCATION := 3
على سبيل المثال، يمكنك الرجوع إلى هذا التغيير.
النظام بصفتها الجذر
لا تتوفّر ميزة "النظام بصفتها الجذر" للأجهزة التي تستخدم GKI. على
هذه الأجهزة، يجب أن يكون الحقل BOARD_BUILD_SYSTEM_ROOT_IMAGE
فارغًا. لا تتوفّر أيضًا ميزة "النظام بصفتها الجذر"
للأجهزة التي تستخدم أقسامًا ديناميكية.
إعدادات المنتجات
على الأجهزة التي تستخدم ذاكرة التخزين المؤقت النموذجية تثبيت قائمة بالملفات التي
يُسمح بتثبيتها في ذاكرة التخزين المؤقت. لإجراء ذلك، حدِّد ما يلي في
device.mk
:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
يمنع ملف generic_ramdisk.mk
أيضًا ملفات makefiles الأخرى من
تثبيت ملفات أخرى عن طريق الخطأ في ملف ramdisk (يمكنك نقل هذه الملفات إلى vendor_ramdisk
بدلاً من ذلك).
إعداد الأجهزة
تختلف تعليمات الإعداد بين الأجهزة التي تعمل بنظام Android 13 والأجهزة التي تم ترقيتها إلى Android 12 والأجهزة التي تعمل بنظام Android 12. يتم إعداد Android 13 بالطريقة نفسها المتّبعة في Android 12.
الأجهزة التي يتم ترقيتها إلى Android 12:
يمكنه الاحتفاظ بقيمة
BOARD_USES_RECOVERY_AS_BOOT
. وفي حال إجراء ذلك، يعني ذلك أنّه يتم استخدام إعدادات قديمة ويجب أن تكون متغيّرات الإصدار الجديدة فارغة. إذا كانت هذه الأجهزة:يمكن ضبط
BOARD_USES_RECOVERY_AS_BOOT
على فارغ. وإذا فعلوا ذلك، يعني ذلك أنّهم يستخدمون إعدادات جديدة. في حال كانت هذه الأجهزة:لا تستخدِم قسمًا مخصّصًا
recovery
، فالبنية كما هو موضّح في الشكل 1 وخيار إعداد الجهاز هو الخيار 1.استخدِم قسمًا مخصّصًا بسعة
recovery
، وتكون البنية كما هو موضّح في الشكل 2(أ) أو الشكل 2(ب)، ويكون خيار إعداد الجهاز الخيار 2(أ) أو الخيار 2(ب).
يجب ضبط قيمة
BOARD_USES_RECOVERY_AS_BOOT
على "فارغ" واستخدام الإعدادات الجديدة على الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android. إذا كانت هذه الأجهزة:لا تستخدِم قسمًا مخصّصًا لـ
recovery
، فالبنية كما هو موضّح في الشكل 1 وخيار إعداد الجهاز هو الخيار 1.استخدِم قسمًا مخصّصًا بسعة
recovery
، وتكون البنية كما هو موضّح في الشكل 2(أ) أو الشكل 2(ب)، ويكون خيار إعداد الجهاز الخيار 2(أ) أو الخيار 2(ب).
وبما أنّ aosp_arm64
ينشئ GKI فقط (وليس vendor_boot
أو الاسترداد)، فهو ليس هدفًا كاملاً. للاطّلاع على aosp_arm64
إعدادات الإصدار، راجِع
generic_arm64
.
الخيار 1: عدم توفُّر قسم استرداد مخصّص
تحتوي الأجهزة التي لا تتضمّن قسم recovery
على صورة boot
العامة في القسم
boot
. يحتوي القرص vendor_boot
على جميع موارد الاسترداد،
بما في ذلك lib/modules
(مع وحدات النواة الخاصة بالمورِّدين). على هذه الأجهزة، يتم اكتساب إعدادات المنتج من
generic_ramdisk.mk
.
ضبط قيم BOARD
اضبط القيم التالية:
BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT := true
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE :=
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
بدء البرامج الثنائية والروابط الرمزية
يمكن أن يحتوي ملف ذاكرة الوصول العشوائي vendor_boot
على رابط رمزي من /init
إلى /system/bin/init
،
وinit_second_stage.recovery
في /system/bin/init
. ومع ذلك، بما أنّه يتم تسلسل ملف التمهيد المؤقت
العام بعد ملف التمهيد المؤقت vendor_boot
، يتم استبدال الرابط الرمزي/init
. عند بدء تشغيل الجهاز لعملية الاسترداد، يجب استخدام برنامج /system/bin/init
الثنائي لإتاحة تنفيذ المرحلة الثانية. في ما يلي محتوى vendor_boot
+ وحدات التخزين المؤقت للذاكرة العشوائية العامة:
/init
(من ملف ramdisk عام تم إنشاؤه منinit_first_stage
)/system/bin/init
(منvendor_ramdisk
، تم إنشاؤه منinit_second_stage.recovery
)
نقل ملفات fstab
انقل أي ملفات fstab
تم تثبيتها على ذاكرة الوصول العشوائي (RAM) العامة إلى
vendor_ramdisk
. على سبيل المثال، يمكنك الرجوع إلى هذا
التغيير.
تثبيت الوحدات
يمكنك تثبيت وحدات خاصة بالجهاز على vendor_ramdisk
(تخطّي
هذه الخطوة إذا لم يكن لديك أي وحدات خاصة بالجهاز لتثبيتها).
استخدِم الصيغة
vendor_ramdisk
للوحدة عند تثبيت الوحدة على/first_stage_ramdisk
. من المفترض أن تكون هذه الوحدة متاحة بعد أن يبدّلinit
الجذر إلى/first_stage_ramdisk
ولكن قبل أن يبدّلinit
الجذر إلى/system
. للاطّلاع على أمثلة، يمكنك الاطّلاع على رموز تحقّق البيانات الوصفية والضغط الافتراضي لاختبار أ/ب.استخدِم الصيغة
recovery
للوحدة عند تثبيت الوحدة على/
. يجب أن تكون هذه الوحدة متاحة قبل أن يبدّلinit
الجذر إلى/first_stage_ramdisk
. لمعرفة تفاصيل عن تثبيت الوحدات على/
، يُرجى الاطّلاع على وحدة تحكّم مرحلة الأولى.
وحدة تحكّم من المرحلة الأولى
بما أنّ وحدة التحكّم في المرحلة الأولى تبدأ قبل أن يحوّل init
الجذر إلى /first_stage_ramdisk
، يجب تثبيت صيغة recovery
من الوحدات.
يتم تلقائيًا تثبيت صيغتَي الوحدتَين على build/make/target/product/base_vendor.mk
، وبالتالي إذا كان ملف التصميم للجهاز موروثًا من ذلك الملف، لن تحتاج إلى تثبيت الصيغة recovery
بشكل صريح.
لتثبيت وحدات الاسترداد بشكل صريح، استخدِم ما يلي:
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
يضمن ذلك تثبيت linker
وsh
وtoybox
على
$ANDROID_PRODUCT_OUT/recovery/root/system/bin
، ثم تثبيته على
/system/bin
ضمن vendor_ramdisk
.
لإضافة الوحدات اللازمة لوحدة تحكّم المرحلة الأولى (على سبيل المثال، adbd)، استخدِم ما يلي.
PRODUCT_PACKAGES += adbd.recovery
يضمن ذلك تثبيت الوحدات المحدّدة على $ANDROID_PRODUCT_OUT/recovery/root/system/bin
، والتي يتم تثبيتها بعد ذلك في /system/bin
ضمن vendor_ramdisk
.
المجاميع الاختبارية للبيانات الوصفية
لإتاحة المجاميع الاختبارية
للبيانات الوصفية أثناء تثبيت المرحلة الأولى، ستثبّت الأجهزة التي لا تتوافق مع أداة GKI متغيّر قرص ذاكرة التخزين المؤقت للوحدات التالية: لإضافة إمكانية استخدام GKI، عليك نقل الوحدات إلى
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
على سبيل المثال، يمكنك الرجوع إلى هذه قائمة التغييرات.
ضغط A/B الافتراضي
لتفعيل ميزة ضغط A/B الافتراضي، يجب تثبيت snapuserd
على
vendor_ramdisk
. من المفترض أن يكتسب الجهاز الإعدادات من
virtual_ab_ota/compression.mk
،
الذي يُثبِّت نوع vendor_ramdisk
من snapuserd
.
التغييرات في عملية التشغيل
لن تتغير عملية تمهيد تشغيل الجهاز في وضع الاسترداد أو في نظام التشغيل Android، مع الاستثناء التالي:
- ينتقل تطبيق Ramdisk
build.prop
إلى/second_stage_resources
كي تتمكن المرحلة الثانيةinit
من قراءة الطابع الزمني للإصدار عند التشغيل.
وبما أنّ الموارد تنتقل من ذاكرة التخزين المؤقت النموذجية إلى ذاكرة التخزين المؤقت vendor_boot
، لا تتغيّر نتيجة
تسلسل ذاكرة التخزين المؤقت النموذجية إلى ذاكرة التخزين المؤقت vendor_boot
.
إتاحة e2fsck
يمكن أن تكتسب ملفات إنشاء الجهاز من ما يلي:
virtual_ab_ota/launch_with_vendor_ramdisk.mk
إذا كان الجهاز يتيح اختبار A/B الافتراضي ولكن لا يتيح ميزة الضغطvirtual_ab_ota/compression.mk
إذا كان الجهاز يتيح ميزة التجميع الافتراضي لاختبار A/B
تثبِّت ملفات الإنشاء الخاصة بالمنتج
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck
. أثناء وقت التشغيل، تبدّل المرحلة الأولى init
الجذر إلى /first_stage_ramdisk
ثم تُنفِّذ /system/bin/e2fsck
.
الخيار 2(أ): قسم استرداد مخصّص وقسم استرداد A/B
استخدِم هذا الخيار للأجهزة المزوّدة بأقسام A/B recovery
، أي أنّ الجهاز يحتوي على recovery_a
وrecovery_b partition
. وتشمل هذه الأجهزة
أجهزة A/B وVirtual A/B التي يمكن تحديث قسم الاسترداد فيها، مع
الإعدادات التالية:
AB_OTA_PARTITIONS += recovery
يحتوي ملف vendor_boot
ramdisk على أجزاء المصنّع لملف ramdisk ووحدات ملف
النواة الخاصة بالمصنّع، بما في ذلك ما يلي:
ملفات
fstab
خاصة بالجهازlib/modules
(تتضمّن وحدات نواة المورّد)
يحتوي ملف ramdisk على recovery
على جميع موارد الاسترداد. على هذه الأجهزة، يتم اكتساب إعدادات المنتج من
generic_ramdisk.mk
.
ضبط قيم BOARD
اضبط القيم التالية للأجهزة التي تتضمّن قسمًا A/B recovery
:
BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :=
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE := true
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
بدء البرامج الثنائية والروابط الرمزية
يمكن أن يحتوي رمز القرص recovery
على رابط رمزي /init -> /system/bin/init
، و
init_second_stage.recovery
على /system/bin/init
. ومع ذلك، يتم استبدال الرابط الرمزي /init
لأنّه يتم ربط قرص بدء التشغيل بعد الجدول الزمني للرمز recovery
. عند تشغيل الجهاز في وضع الاسترداد، يجب توفُّر /system/bin/init
الثنائي لدعم بدء المرحلة الثانية.
عند تشغيل الجهاز في recovery
، سيكون محتوى recovery
+
vendor_boot
+ الملفات الشخصية العامة كما يلي:
/init
(من ذاكرة الوصول العشوائي المؤقت، تم إنشاؤها منinit_first_stage
)/system/bin/init
(منrecovery
ramdisk، تم إنشاؤه منinit_second_stage.recovery
، وتم تنفيذه من/init
)
عند تشغيل الجهاز على نظام التشغيل Android، تكون محتويات vendor_boot
+ ملف
ramdisks العام على النحو التالي:
/init
(من ملف ramdisk عام تم إنشاؤه منinit_first_stage
)
نقل ملفات fstab
انقل أي ملفات fstab
تم تثبيتها على ذاكرة الوصول العشوائي (RAM) العامة إلى
vendor_ramdisk
. على سبيل المثال، يمكنك الرجوع إلى هذا
التغيير.
تثبيت الوحدات
يمكنك اختياريًا تثبيت وحدات خاصة بالأجهزة على vendor_ramdisk
(تخطّى
هذه الخطوة إذا لم يكن لديك أي وحدات خاصة بالأجهزة لتثبيتها). Init
لا يؤدي إلى تبديل الجذر. يتم تثبيت الصيغة vendor_ramdisk
من الوحدات على جذر vendor_ramdisk
. للحصول على أمثلة عن تثبيت الوحدات في
vendor_ramdisk
، اطّلِع على وحدة تحكّم المرحلة الأولى ورموز تحقّق ملف المحتوى الوصفي والتصغير الافتراضي لاختبار أ/ب.
وحدة تحكّم من المرحلة الأولى
لتثبيت الإصدار vendor_ramdisk
من الوحدات، استخدِم ما يلي:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
shell_and_utilities_vendor_ramdisk \
يضمن ذلك تثبيت linker
وsh
وtoybox
على
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
، ثم تثبيته على
/system/bin
ضمن vendor_ramdisk
.
لإضافة الوحدات المطلوبة لوحدة تحكّم المرحلة الأولى (مثل adbd)، فعِّل
الصيغة vendor_ramdisk
من هذه الوحدات عن طريق تحميل الرقع ذات الصلة إلى
AOSP، ثم استخدِم ما يلي:
PRODUCT_PACKAGES += adbd.vendor_ramdisk
يضمن ذلك تثبيت الوحدات المحدّدة في
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
. في حال تحميل vendor_boot
ramdisk
في وضع الاسترداد، تتوفّر الوحدة أيضًا في recovery
. إذا لم يتم تحميل ملف vendor_boot
ramdisk في وضع الاسترداد، يمكن للجهاز اختياريًا
إلغاء تثبيت adbd.recovery
أيضًا.
المجاميع الاختبارية للبيانات الوصفية
لإتاحة التحقّق من صحة
البيانات الوصفية
أثناء مرحلة التثبيت الأولى، تُثبِّت الأجهزة التي لا تتوافق مع GKI إصدار ملف ramdisk
الخاص بالوحدات التالية. لإتاحة استخدام GKI، يمكنك نقل الوحدات إلى
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
على سبيل المثال، يمكنك الرجوع إلى هذه قائمة التغييرات.
ضغط A/B الافتراضي
لتفعيل ميزة "الضغط الافتراضي لاختبار أ/ب"، يجب تثبيت snapuserd
على
vendor_ramdisk
. من المفترض أن يكتسب الجهاز الإعدادات من
virtual_ab_ota/compression.mk
،
الذي يُثبِّت نوع vendor_ramdisk
من snapuserd
.
التغييرات في عملية التشغيل
عند التمهيد إلى نظام التشغيل Android، لا تتغيّر عملية التمهيد. تشبه vendor_boot
+
أداة ramdisk العامة عملية التمهيد الحالية، باستثناء أنّ fstab
يتم تحميلها من vendor_boot
. بسبب عدم توفّر system/bin/recovery
،
يعالجه first_stage_init
كعملية تشغيل عادية.
عند التمهيد إلى وضع الاسترداد، تتغيّر عملية التمهيد. إنّ عملية الاسترداد +
vendor_boot
+ ذاكرة التخزين المؤقت العامة مماثلة لعملية الاسترداد الحالية،
ولكن يتم تحميل النواة من صورة boot
بدلاً من صورة recovery
.
في ما يلي خطوات تشغيل وضع الاسترداد:
يبدأ مُحمِّل بدء التشغيل، ثم ينفِّذ ما يلي:
- تُرسِل عملية الاسترداد +
vendor_boot
+ ذاكرة الوصول العشوائي العامة إلى/
. (إذا نسخ المصنّع الأصلي للجهاز وحدات kernel في ذاكرة RAMD المخصَّصة لاسترداد البيانات من خلال إضافتها إلىBOARD_RECOVERY_KERNEL_MODULES
)، تكون السمةvendor_boot
اختيارية. - تشغيل النواة من قسم "
boot
"
- تُرسِل عملية الاسترداد +
يُثبِّت "النواة" ذاكرة الوصول العشوائي المؤقتة على
/
ثم تنفِّذ/init
من ذاكرة الوصول العشوائي المؤقتة العامة.تبدأ مرحلة الإعداد الأولى، ثمّ تُجري ما يلي:
- يتم ضبط السياسة على
IsRecoveryMode() == true
وForceNormalBoot() == false
. - تحمِّل هذه الوحدة وحدات نواة المورِّد من
/lib/modules
. - يتم الاتصال بـ
DoFirstStageMount()
ولكن يتم تخطّي التثبيت بسببIsRecoveryMode() == true
. (لا يُفرِّغ الجهاز ذاكرة التخزين المؤقت (لأنّ/
لا يزال كما هو) ولكنه يستدعيSetInitAvbVersionInRecovery()
). - بدء مرحلة الإعداد الثانية من
/system/bin/init
منrecovery
رام ديسك
- يتم ضبط السياسة على
إتاحة e2fsck
يمكن أن تكتسب ملفات إنشاء الجهاز من ما يلي:
virtual_ab_ota/launch_with_vendor_ramdisk.mk
إذا كان الجهاز يتيح اختبار A/B الافتراضي ولكن لا يتيح ميزة الضغطvirtual_ab_ota/compression.mk
إذا كان الجهاز يتيح ضغط A/B الافتراضي.
تثبِّت ملفات الإنشاء الخاصة بالمنتج
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck
. في
وقت التشغيل، تنفذ المرحلة الأولى init
من تنفيذ /system/bin/e2fsck
.
الخيار 2(ب): قسم استرداد مخصّص وغير مخصّص لميزة A/B
استخدِم هذا الخيار للأجهزة التي تحتوي على قسم recovery
غير A/B، أي أنّه
يحتوي الجهاز على قسم باسم recovery
بدون إضافة خانة. وتشمل هذه الأجهزة
ما يلي:
- الأجهزة غير المزوّدة بميزة "التحديث التجريبي"
- أجهزة A/B وأجهزة A/B الافتراضية التي لا يمكن تعديل قسم الاسترداد فيها (هذا أمر غير معتاد).
يحتوي ملف vendor_boot
ramdisk على أجزاء المصنّع لملف ramdisk ووحدات ملف
النواة الخاصة بالمصنّع، بما في ذلك ما يلي:
- ملفات
fstab
خاصة بالجهاز lib/modules
(تتضمّن وحدات نواة المورّد)
يجب أن تكون صورة recovery
مستقلة. يجب أن يحتوي على جميع الموارد المطلوبة لتشغيل وضع الاسترداد، بما في ذلك:
- صورة النواة
- صورة DTBO
- وحدات النواة في
lib/modules
- بدء المرحلة الأولى كرابط رمزي
/init -> /system/bin/init
- ملف ثنائي لبدء المرحلة الثانية
/system/bin/init
- ملفات
fstab
خاصة بالجهاز - جميع موارد الاسترداد الأخرى، بما في ذلك البرنامج الثنائي لنظام
recovery
على هذه الأجهزة، يكتسِب إعداد المنتج قيمه من generic_ramdisk.mk
.
ضبط قيم BOARD
اضبط القيم التالية للأجهزة غير المُدرَجة في اختبار A/B:
BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :=
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE :=
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
بدء البرامج الثنائية والروابط الرمزية
يجب أن يحتوي ملف ذاكرة الوصول العشوائي recovery
على رابط رمزي /init -> /system/bin/init
وملف init_second_stage.recovery
في /system/bin/init
. عند تشغيل الجهاز في
وضع الاسترداد، يجب توفُّر ملف /system/bin/init
الثنائي لدعم كل من مرحلتَي
الإعداد الأولى والثانية.
عند تشغيل الجهاز في recovery
، يتم نقل محتويات recovery
ramdisks
على النحو التالي:
/init -> /system/bin/init
(منrecovery
ramdisk)/system/bin/init
(منrecovery
ramdisk، تم إنشاؤه منinit_second_stage.recovery
، وتم تنفيذه من/init
)
عند تشغيل الجهاز على نظام التشغيل Android، تكون محتويات vendor_boot
+ ملف
ramdisks العام على النحو التالي:
/init
(من قرص RAM، تم إنشاؤه منinit_first_stage
)
نقل ملفات fstab
انقل أي ملفات fstab
تم تثبيتها على ذاكرة التخزين المؤقت النموذجية إلى ذاكرتَي التخزين المؤقت
vendor_ramdisk
وrecovery
. على سبيل المثال، يمكنك الرجوع إلى هذا
التغيير.
تثبيت الوحدات
يمكنك تثبيت الوحدات الخاصة بالجهاز على vendor_ramdisk
و
recovery
ramdisk (تخطّى
هذه الخطوة إذا لم يكن لديك أي وحدات خاصة بالجهاز لتثبيتها). init
لا يؤدي إلى تبديل الجذر. يتم تثبيت الصيغة vendor_ramdisk
من الوحدات على جذر vendor_ramdisk
. يتم تثبيت الصيغة recovery
من الوحدات في
جذر ملف ramdisk في recovery
. للحصول على أمثلة عن تثبيت الوحدات في ملف ذاكرة التخزين المؤقت للتشغيل
vendor_ramdisk
وrecovery
، اطّلِع على
وحدة تحكّم المرحلة الأولى والمرجحَات
للبيانات الوصفية.
وحدة تحكّم من المرحلة الأولى
لتثبيت الإصدار vendor_ramdisk
من الوحدات، استخدِم ما يلي:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
shell_and_utilities_vendor_ramdisk \
يضمن ذلك تثبيت linker
وsh
وtoybox
على
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
، ثم تثبيته على
/system/bin
ضمن vendor_ramdisk
.
لإضافة الوحدات المطلوبة لوحدة تحكّم المرحلة الأولى (مثل adbd)، فعِّل
الصيغة vendor_ramdisk
من هذه الوحدات عن طريق تحميل الرقع ذات الصلة إلى
AOSP، ثم استخدِم ما يلي:
PRODUCT_PACKAGES += adbd.vendor_ramdisk
يضمن ذلك تثبيت الوحدات المحدّدة على
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
.
لتثبيت الإصدار recovery
من الوحدات، استبدِل vendor_ramdisk
ب
recovery
:
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
adbd.recovery \
المجاميع الاختبارية للبيانات الوصفية
لإتاحة المجاميع الاختبارية
للبيانات الوصفية أثناء تثبيت المرحلة الأولى، ستثبّت الأجهزة التي لا تتوافق مع أداة GKI متغيّر قرص ذاكرة التخزين المؤقت للوحدات التالية: لإتاحة استخدام GKI، يمكنك نقل الوحدات إلى
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
لإتاحة المجاميع الاختبارية للبيانات الوصفية أثناء المرحلة الأولى من التثبيت في مرحلة الاسترداد، فعِّل صيغة الاسترداد لهذه الوحدات ثم ثبِّتها أيضًا.
التغييرات في عملية التشغيل
عند التمهيد إلى نظام التشغيل Android، لا تتغيّر عملية التمهيد. تشبه vendor_boot
+
أداة ramdisk العامة عملية التمهيد الحالية، باستثناء أنّ fstab
يتم تحميلها من vendor_boot
. بما أنّ system/bin/recovery
غير متوفّر، يتعامل
first_stage_init
معه على أنّه عملية تشغيل عادية.
عند التمهيد إلى وضع الاسترداد، لا تتغيّر عملية التمهيد. يتم تحميل ملف recovery
ramdisk بالطريقة نفسها المتّبعة في عملية الاسترداد الحالية.
يتم تحميل النواة من صورة recovery
. في ما يلي خطوات التمهيد إلى وضع الاسترداد:
يبدأ مُحمِّل بدء التشغيل، ثم ينفِّذ ما يلي:
- تُرسِل وحدة تخزين عشوائي (RAM) لإعادة الاسترداد إلى
/
. - يشغِّل هذا النوع من الأنظمة الأساسية النواة من قسم
recovery
.
- تُرسِل وحدة تخزين عشوائي (RAM) لإعادة الاسترداد إلى
يُثبِّت نواة نظام التشغيل ملف ramdisk في
/
ثم تنفِّذ/init
، وهو رابط رمزي يؤدي إلى/system/bin/init
من ملف ramdiskrecovery
.تبدأ المرحلة الأولى، ثم يتم تنفيذ ما يلي:
- يتم ضبط السياسة على
IsRecoveryMode() == true
وForceNormalBoot() == false
. - تحمِّل هذه الوحدة وحدات نواة المورِّد من
/lib/modules
. - يتم الاتصال بـ
DoFirstStageMount()
ولكن يتم تخطّي التثبيت بسببIsRecoveryMode() == true
. (لا يُفرِّغ الجهاز ذاكرة التخزين المؤقت (لأنّ/
لا يزال كما هو) ولكنه يستدعيSetInitAvbVersionInRecovery()
). - بدء مرحلة الإعداد الثانية من
/system/bin/init
منrecovery
رام ديسك
- يتم ضبط السياسة على
الطوابع الزمنية لصورة التشغيل
التعليمة البرمجية التالية هي مثال على ملف الطابع الزمني لصورة boot
:
####################################
# from generate-common-build-props
# These properties identify this partition image.
####################################
ro.product.bootimage.brand=Android
ro.product.bootimage.device=generic_arm64
ro.product.bootimage.manufacturer=unknown
ro.product.bootimage.model=AOSP on ARM64
ro.product.bootimage.name=aosp_arm64
ro.bootimage.build.date=Mon Nov 16 22:46:27 UTC 2020
ro.bootimage.build.date.utc=1605566787
ro.bootimage.build.fingerprint=Android/aosp_arm64/generic_arm64:S/MASTER/6976199:userdebug/test-keys
ro.bootimage.build.id=MASTER
ro.bootimage.build.tags=test-keys
ro.bootimage.build.type=userdebug
ro.bootimage.build.version.incremental=6976199
ro.bootimage.build.version.release=11
ro.bootimage.build.version.release_or_codename=S
ro.bootimage.build.version.sdk=30
# Auto-added by post_process_props.py
persist.sys.usb.config=none
# end of file
في وقت الإنشاء، تتم إضافة ملف
system/etc/ramdisk/build.prop
إلى ملف ramdisk العام. يحتوي هذا الملف على معلومات الطابع الزمني للإصدار.أثناء التشغيل، تُجري المرحلة الأولى
init
عمليات نسخ للملفات من ملف ramdisk إلىtmpfs
قبل تحرير ملف ramdisk حتى تتمكّن الخطوة الثانيةinit
من قراءة هذا الملف لضبط سمات الطابع الزمني للصورةboot
.