في نظام التشغيل Android 12، يُشار إلى الصورة العامة boot
باسم
صورة Kernel عامة (GKI)،
يحتوي على القرص العام ونواة GKI.
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 13، يتم تضمين السمات العامة
تتم إزالة رمز التخزين المؤقت من صورة boot
ووضعه في مساحة init_boot
منفصلة.
. يؤدي هذا التغيير إلى ترك صورة boot
مع
نواة GKI.
بالنسبة إلى ترقية الأجهزة التي تواصل استخدام Android 12
أو إصدارات نواة قديمة، يظل القرص العام في مكانه مع
ما مِن متطلبات للحصول على صورة init_boot
جديدة.
لإنشاء قرص تخزين عام، انقل الموارد الخاصة بالمورّد من المكان
بحيث يحتوي الدليل العام على المرحلة الأولى فقط init
بالإضافة إلى سمة
يحتوي على معلومات الطابع الزمني.
على الأجهزة التي:
لا تستخدم قسم
recovery
مخصصًا، حيث تنتقل جميع وحدات بت الاسترداد من RAMD عامة إلىvendor_boot
RAMD.استخدام قسم
recovery
مخصص، بدون أي تغيير في ذاكرة الوصول العشوائيrecovery
مطلوبة لأنّ قرص الهرمrecovery
مستقل.
هندسة معمارية
توضّح المخططات التالية بنية الأجهزة التي تعمل بنظام التشغيل Android.
12 وأعلى.
سيحصل الجهاز الذي يعمل بنظام التشغيل Android 13 على
صورة واحدة (init_boot
) تحتوي على رمز القرص العام.
الأجهزة التي ستتم ترقيتها من Android 12 إلى Android
13 مستخدمًا نفس البنية كما استخدموها مع
الإصدار 12 من نظام التشغيل Android.
إطلاق الموقع الإلكتروني بالإصدار 13 من نظام التشغيل Android بدون أي عمليات استرداد مخصّصة
الشكل 1. سيتم تشغيل الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو ترقيتها إلى الإصدار 13 من نظام التشغيل Android، والتي لا تتضمّن أي عمليات استرداد مخصَّصة.
إطلاق الموقع الإلكتروني بالإصدار 13 من نظام التشغيل Android، بشكل مخصَّص واسترداد A/B (ملف ramdisk مخصّص)
الشكل 2. الأجهزة التي سيتم إطلاقها أو ترقيتها إلى Android 13، مع تضمين البيانات المخصصة للمفاتيح العامة (GKI) والتخصيص واسترداد A/B
ارجع إلى هذا الشكل إذا كان الجهاز يحتوي على قسمَين (recovery_a
) وrecovery_b
.
إطلاق الموقع الإلكتروني بالإصدار 13 من نظام التشغيل Android، بشكل مخصّص واسترداد البيانات من خلال نظام معالجة أ/ب (ذاكرة وصول عشوائي)
الشكل 3. الأجهزة التي تعمل بنظام التشغيل Android 13 أو تعمل على ترقيتها ومزودة بميزة GKI ، وهي سياسة مخصصة للاسترداد من خلال نظام A/B وغير A/B
وضِّح هذا الشكل إذا كان الجهاز يحتوي على قسم اسمه "recovery
" بدون
لاحقة خانة.
إطلاق نظام التشغيل Android أو ترقيته إلى الإصدار 12 من نظام التشغيل Android، بدون تخصيص عملية استرداد مخصّصة
الشكل 4. سيتم تشغيل الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android أو ترقيتها إلى الإصدار 12 من نظام التشغيل Android، بدون الحاجة إلى استرداد مخصّص للبيانات.
تشغيل أو ترقية نظام التشغيل Android 12، المخصص واسترداد A/B (قرص ramdisk مخصص)
الشكل 5. الأجهزة التي سيتم إطلاقها أو ترقيتها إلى الإصدار 12 من نظام التشغيل Android، والتي تتضمّن مفاتيح التشفير المعروفة باسم "GKI" المخصَّصة وميزة استرداد A/B
ارجع إلى هذا الشكل إذا كان الجهاز يحتوي على قسمَين (recovery_a
) وrecovery_b
.
تشغيل نظام التشغيل Android 12 أو الترقية إليه، مع وضع استرداد بيانات مخصّص وغير مخصَّص من نوع A/B
الشكل 6. الأجهزة التي سيتم إطلاقها أو ترقيتها إلى الإصدار 12 من نظام التشغيل Android، والتي تتضمّن مفاتيح التشفير GKI، والمخصصة والاسترداد غير A/B
وضِّح هذا الشكل إذا كان الجهاز يحتوي على قسم اسمه "recovery
" بدون
لاحقة خانة.
الترقية إلى Android 12، عملية الاسترداد كتمهيد (recovery-as-ramdisk)
الشكل 7. الأجهزة التي تتم ترقيتها إلى Android 12، بدون GKI، الاسترداد كتمهيد
الترقية إلى الإصدار 12 من نظام التشغيل Android، استرداد مخصّص (قرص RAMD مخصَّص)
الشكل 8. سيتم تحديث الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android بدون استخدام GKI، الاسترداد المخصّص.
تشغيل محتوى الصور
تحتوي صور تمهيد Android على ما يلي:
تمّت إضافة صورة واحدة (
init_boot
) للأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android.- إصدار العنوان V4
- صورة ramdisk عامة
صورة
boot
عامة- إصدار العنوان V3 أو
الإصدار 4
- شهادة
boot_signature
لشهادة Boot.img في GKI (الإصدار 4 فقط) تشير رسالة الأشكال البيانية لم يتم توقيع نظام التشغيلboot.img
المعتمد من GKI لتشغيله المتحقَّق منه. لا يزال على المصنّعين الأصليين للأجهزة توقيعboot.img
التي تم إنشاؤها مسبقًا باستخدام جهاز خاص AVB المفتاح. - قيم
cmdline
عامة (GENERIC_KERNEL_CMDLINE
) - نواة GKI
- شهادة
- صورة ramdisk عامة
- لا يتوفّر إلا في
boot
صورة من نظام التشغيل Android 12 وأكثر من ذلك
- لا يتوفّر إلا في
- إصدار العنوان V3 أو
الإصدار 4
صورة واحدة (
vendor_boot
) (لمعرفة التفاصيل، يُرجى الاطّلاع على مقالة التشغيل للمورّد) الأقسام)- عنوان واحد (
vendor_boot
)cmdline
خاصة بالجهاز (BOARD_KERNEL_CMDLINE
)
- صورة واحدة (
vendor_boot
) على قرص RAMlib/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، يجب أن يكون محتوى RAMdisk مستقلّ؛ الرؤية صور استرداد الحساب: مثلاً:
- يجب أن يحتوي
lib/modules
على جميع وحدات النواة المطلوبة لتشغيله. وضع الاسترداد - يجب أن يحتوي قرص ذاكرة التخزين المؤقت لاسترداد البيانات على
init
. - بالنسبة إلى قسم استرداد A/B، يتم إلحاق قرص ذاكرة التخزين المؤقت لاسترداد البيانات
عامة و
vendor_boot
، ومن ثم ليس من الضروري أن تكون مستقل. مثلاً: - قد يحتوي
lib/modules
فقط على وحدات نواة إضافية مطلوبة وضع الاسترداد أثناء التشغيل إلى جانب وحدات النواة في ذاكرة الوصول العشوائيvendor_boot
. - قد يكون الرابط الرمزي في
/init
موجودًا، ولكن يطغى عليه الرمز البرنامج الثنائي المرحلة الأولى/init
في صورة التشغيل.
- الإصدار 2 من العنوان
محتوى صورة قرص تخزين عام
يحتوي القرص العام على المكونات التالية.
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
يشير هذا المتغيّر إلى ما إذا كان الإصدار يستخدم عملية تمهيد مُعدَّة مسبقًا. . إذا تم ضبط هذا المتغيّر على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). ولا يؤثر هذا المتغير في عناصر النظام أو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
:عند ضبطها، تم تصميم مفاتيح GSI AVB
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb
بدون ضبط، صُممت مفاتيح GSI AVB
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avb
عندما تكون القيمة فارغة، إذا كانت
BOARD_RECOVERY_AS_ROOT
:عند ضبطها، تم تصميم مفاتيح GSI AVB
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb
بدون ضبط، صُممت مفاتيح GSI AVB
$ANDROID_PRODUCT_OUT/ramdisk/avb
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE
ويتحكم هذا المتغير في ما إذا كان تحتوي صورة واحدة (recovery
) على نواة أم لا. الأجهزة التي تعمل بنظام التشغيل Android عند إطلاقها 12 واستخدام قسم A/B منrecovery
يجب ضبط هذا الإعداد إلى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
وتعيين الحجم. عند الضبط، يحتوي القرص العام تتم إضافتها إلى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
فارغًا. النظام كجذر
غير متاح أيضًا على الأجهزة التي تستخدم أقسامًا ديناميكية.
تكوينات المنتج
يجب أن تثبّت الأجهزة التي تستخدم قرص RAM العام قائمة بالملفات
السماح بتثبيته في الهرم. ولإجراء ذلك، حدد ما يلي في
device.mk
:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
يمنع ملف generic_ramdisk.mk
أيضًا ملفات makefiles الأخرى عن طريق الخطأ
تثبيت ملفات أخرى في ذاكرة الوصول العشوائي (RAM) (نقل هذه الملفات إلى vendor_ramdisk
)
بدلاً من ذلك).
إعداد الأجهزة
تختلف تعليمات الإعداد بين الأجهزة التي تعمل بنظام التشغيل Android عند إطلاقها 13، جارٍ الترقية إلى الإصدار 12 من Android، وإطلاقه بالإصدار Android 12. يتم إعداد نظام التشغيل Android 13 بطريقة مماثلة لتلك التي كانت عليه في نظام Android 12.
الأجهزة التي تتم ترقيتها إلى الإصدار 12 من نظام التشغيل Android:
ويمكن أن تحتفظ بقيمة
BOARD_USES_RECOVERY_AS_BOOT
. إذا فعلوا ذلك، يستخدم إعدادات قديمة ويجب أن تكون متغيرات الإصدار الجديدة فارغة. في هذه الحالة الأجهزة:يمكن ضبط
BOARD_USES_RECOVERY_AS_BOOT
على "فارغ". إذا فعلوا ذلك، فإنه يستخدم والتكوينات الجديدة. في حال كانت هذه الأجهزة:
يجب ضبط الإعدادات في الأجهزة التي تعمل بنظام التشغيل Android 12
BOARD_USES_RECOVERY_AS_BOOT
لإفراغ المهملات واستخدام الإعدادات الجديدة. في هذه الحالة الأجهزة:
بما أنّ ميزة "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
. ومع ذلك، نظرًا لأن
يتم دمج قرص RAM العام بعد الهرم vendor_boot
، وهو /init
يتم استبدال الرابط الرمزي. عند بدء تشغيل الجهاز لعملية الاسترداد،
يجب توفير النظام الثنائي لـ /system/bin/init
لإتاحة بدء المرحلة الثانية. المحتوى
من vendor_boot
بالإضافة إلى أكواب عامة كالتالي:
/init
(من قرص عام عام، تم إنشاؤه منinit_first_stage
)/system/bin/init
(منvendor_ramdisk
، تم التشييد منinit_second_stage.recovery
)
نقل ملفات fstab
انقل أي ملفات fstab
تم تثبيتها إلى القرص العام إلى
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
، فإن النتيجة
لا يتغير تسلسل قرص RAM العام مع ذاكرة وصول عشوائي واحدة (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 والمورِّد
kernel، بما في ذلك ما يلي:
ملفات
fstab
خاصة بالجهازlib/modules
(بما في ذلك وحدات النواة للمورِّد)
يحتوي ذاكرة الوصول العشوائي على 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
. ومع ذلك، ونظرًا لأن تشغيل
يتم تجميع قرص ramdisk بعد الهرم recovery
، ويكون الرابط الرمزي /init
استبداله. عند تشغيل الجهاز في وضع الاسترداد، لا يعمل /system/bin/init
برنامج ثنائي مطلوب لدعم تنفيذ المرحلة الثانية.
عند تمهيد الجهاز لـ recovery
، تتم متابعة محتوى recovery
+
فيما يلي vendor_boot
+ الأصناف العامة:
/init
(من رامديسك، منinit_first_stage
)/system/bin/init
(منrecovery
RAMD، مبنية منinit_second_stage.recovery
، وتم تنفيذها من/init
)
عند تشغيل الجهاز لنظام التشغيل Android، ستلاحظ أنّ محتوى vendor_boot
+ العام
الرمضان هي على النحو التالي:
/init
(من قرص عام عام، تم إنشاؤه منinit_first_stage
)
نقل ملفات fstab
انقل أي ملفات fstab
تم تثبيتها في القرص العام إلى القرص
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
في ذاكرة التخزين المؤقت
في وضع الاسترداد، فستتاح الوحدة أيضًا في recovery
. إذا كانت
لم يتم تحميل ذاكرة وصول عشوائي (RAM) بسعة vendor_boot
في وضع الاسترداد، ويمكن للجهاز اختياريًا.
تثبيت adbd.recovery
أيضًا.
المجاميع الاختبارية للبيانات الوصفية
لإتاحة استخدام البيانات الوصفية
المجاميع الاختبارية
أثناء تثبيت المرحلة الأولى، تثبّت الأجهزة التي لا تتوافق مع GKI قرص ذاكرة التخزين المؤقت
من الوحدات التالية. لإتاحة استخدام GKI، يمكنك نقل الوحدات إلى
$ANDROID_PRODUCT_OUT/vendor-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، لا تتغيّر عملية التشغيل. تتيح لك علامة التبويب "vendor_boot
"
يشبه رمز القرص العام عملية التشغيل الحالية، باستثناء أن fstab
يتم تحميله من vendor_boot
. بسبب عدم وجود system/bin/recovery
،
ويعالج first_stage_init
ذلك كعملية تشغيل عادية.
عند بدء تشغيل وضع الاسترداد، تتغير عملية التمهيد. يُعد الاسترداد +
إنّ vendor_boot
+ رمز RAM العام مشابه لعملية الاسترداد الحالية، ولكنّه
يتم تحميل النواة من صورة boot
بدلاً من صورة recovery
.
تتم عملية التمهيد لوضع الاسترداد كما يلي.
يبدأ برنامج الإقلاع، ثم ينفّذ ما يلي:
- يؤدي هذا الإجراء إلى دفع عملية الاسترداد +
vendor_boot
+ رمز ذاكرة وصول عشوائي عام إلى/
. (إذا كان المصنّع الأصلي للجهاز يتم تكرار وحدات النواة في ذاكرة التخزين المؤقت لاسترداد البيانات من خلال إضافتها إلىBOARD_RECOVERY_KERNEL_MODULES
)،vendor_boot
اختيارية.) - تشغيل النواة من قسم "
boot
"
- يؤدي هذا الإجراء إلى دفع عملية الاسترداد +
تثبِّت النواة Kernel في إطار RAMD على
/
، ثم تنفّذ/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 وA/B الافتراضية التي لا يتوفر قسم الاسترداد فيها قابلة للتحديث. (هذا أمر غير عادي).
يحتوي القرص vendor_boot
على بتات البائع الخاصة بـ ramdisk والمورِّد
kernel، بما في ذلك ما يلي:
- ملفات
fstab
خاصة بالجهاز lib/modules
(بما في ذلك وحدات النواة للمورِّد)
يجب أن تكون صورة recovery
مستقلة. يجب أن يحتوي على
جميع الموارد المطلوبة لتشغيل وضع الاسترداد، بما في ذلك:
- صورة النواة (kernel)
- صورة 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
، يصبح محتوى ملفات RAMD الخاصة بـ recovery
على النحو التالي:
/init -> /system/bin/init
(منrecovery
RAM)/system/bin/init
(منrecovery
RAMD، مبنية منinit_second_stage.recovery
، وتم تنفيذها من/init
)
عند تشغيل الجهاز لنظام التشغيل Android، ستلاحظ أنّ محتوى vendor_boot
+ العام
الرمضان هي على النحو التالي:
/init
(من رامديسك، منinit_first_stage
)
نقل ملفات fstab
انقل أي ملفات fstab
تم تثبيتها في القرص العام إلى القرص
vendor_ramdisk
وrecovery
رمي القرص. على سبيل المثال، يمكنك الرجوع إلى هذه
التغيير.
تثبيت الوحدات
يمكنك تثبيت وحدات خاصة بالجهاز على vendor_ramdisk
recovery
RAM (تخطّي)
هذه الخطوة إذا لم تكن لديك أي وحدات خاصة بالجهاز لتثبيتها). init
لا يقوم بتبديل الجذر. يتم تثبيت الصيغة vendor_ramdisk
من الوحدات على
جذر vendor_ramdisk
. يتم تثبيت الصيغة recovery
من الوحدات على
جذر recovery
رامديسك. للاطلاع على أمثلة حول تثبيت وحدات
vendor_ramdisk
وrecovery
ramdisk، se
وحدة تحكّم المرحلة الأولى والبيانات الوصفية
المجاميع الاختبارية
وحدة تحكّم من المرحلة الأولى
لتثبيت الإصدار 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
"
يشبه رمز القرص العام عملية التشغيل الحالية، باستثناء أن fstab
يتم تحميله من vendor_boot
. بسبب عدم وجود system/bin/recovery
،
ويعالج first_stage_init
ذلك كعملية تشغيل عادية.
عند بدء تشغيل وضع الاسترداد (Recovery mode)، لا تتغيّر عملية التشغيل. عملية الاسترداد
يتم تحميل ramdisk بالطريقة نفسها التي يتم بها تحميل عملية الاسترداد الحالية.
يتم تحميل النواة من صورة recovery
. تشير رسالة الأشكال البيانية
عملية التمهيد لوضع الاسترداد كما يلي.
يبدأ برنامج الإقلاع، ثم ينفّذ ما يلي:
- يدفع قرص الاسترداد إلى
/
. - تشغيل النواة من قسم "
recovery
"
- يدفع قرص الاسترداد إلى
تثبِّت النواة Kernel على RAMD في
/
ثم تنفّذ/init
، وهو رابط رمزي./system/bin/init
من الهرم فيrecovery
.تبدأ المرحلة الأولى، ثم يتم تنفيذ ما يلي:
- يتم ضبط السياسة على
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
إلى الملف العام. رمكس. يحتوي هذا الملف على معلومات الطابع الزمني للإصدار.في وقت التشغيل، المرحلة الأولى
init
نُسخ من رامديسك إلىtmpfs
قبل تحرير القرص حتى المرحلةinit
التي يمكن قراءتها هذا الملف لضبط خصائص الطابع الزمني للصورةboot
.