قسم التشغيل العام

في نظام التشغيل 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 بدون أي عمليات استرداد مخصّصة

تشغيل/ترقية الجهاز، GKI، بدون استرداد مخصّص

الشكل 1. سيتم تشغيل الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو ترقيتها إلى الإصدار 13 من نظام التشغيل Android، والتي لا تتضمّن أي عمليات استرداد مخصَّصة.

إطلاق الموقع الإلكتروني بالإصدار 13 من نظام التشغيل Android، بشكل مخصَّص واسترداد A/B (ملف ramdisk مخصّص)

تشغيل/ترقية الجهاز وGKI المخصّص واسترداد A/B

الشكل 2. الأجهزة التي سيتم إطلاقها أو ترقيتها إلى Android 13، مع تضمين البيانات المخصصة للمفاتيح العامة (GKI) والتخصيص واسترداد A/B

ارجع إلى هذا الشكل إذا كان الجهاز يحتوي على قسمَين (recovery_a) وrecovery_b.

إطلاق الموقع الإلكتروني بالإصدار 13 من نظام التشغيل Android، بشكل مخصّص واسترداد البيانات من خلال نظام معالجة أ/ب (ذاكرة وصول عشوائي)

تشغيل/ترقية الجهاز، مع نظام GKI، المخصص والاسترداد غير A/B

الشكل 3. الأجهزة التي تعمل بنظام التشغيل Android 13 أو تعمل على ترقيتها ومزودة بميزة GKI ، وهي سياسة مخصصة للاسترداد من خلال نظام A/B وغير A/B

وضِّح هذا الشكل إذا كان الجهاز يحتوي على قسم اسمه "recovery" بدون لاحقة خانة.

إطلاق نظام التشغيل Android أو ترقيته إلى الإصدار 12 من نظام التشغيل Android، بدون تخصيص عملية استرداد مخصّصة

تشغيل/ترقية الجهاز، GKI، بدون استرداد مخصّص

الشكل 4. سيتم تشغيل الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android أو ترقيتها إلى الإصدار 12 من نظام التشغيل Android، بدون الحاجة إلى استرداد مخصّص للبيانات.

تشغيل أو ترقية نظام التشغيل Android 12، المخصص واسترداد A/B (قرص ramdisk مخصص)

تشغيل/ترقية الجهاز وGKI المخصّص واسترداد A/B

الشكل 5. الأجهزة التي سيتم إطلاقها أو ترقيتها إلى الإصدار 12 من نظام التشغيل Android، والتي تتضمّن مفاتيح التشفير المعروفة باسم "GKI" المخصَّصة وميزة استرداد A/B

ارجع إلى هذا الشكل إذا كان الجهاز يحتوي على قسمَين (recovery_a) وrecovery_b.

تشغيل نظام التشغيل Android 12 أو الترقية إليه، مع وضع استرداد بيانات مخصّص وغير مخصَّص من نوع A/B

تشغيل/ترقية الجهاز، مع نظام GKI، المخصص والاسترداد غير A/B

الشكل 6. الأجهزة التي سيتم إطلاقها أو ترقيتها إلى الإصدار 12 من نظام التشغيل Android، والتي تتضمّن مفاتيح التشفير GKI، والمخصصة والاسترداد غير A/B

وضِّح هذا الشكل إذا كان الجهاز يحتوي على قسم اسمه "recovery" بدون لاحقة خانة.

الترقية إلى Android 12، عملية الاسترداد كتمهيد (recovery-as-ramdisk)

تشغيل/ترقية الجهاز، بدون GKI، الاسترداد كتمهيد

الشكل 7. الأجهزة التي تتم ترقيتها إلى Android 12، بدون GKI، الاسترداد كتمهيد

الترقية إلى الإصدار 12 من نظام التشغيل Android، استرداد مخصّص (قرص RAMD مخصَّص)

تشغيل/ترقية الجهاز، بدون GKI، الاسترداد المخصّص

الشكل 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 وأكثر من ذلك
  • صورة واحدة (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، يجب أن يكون محتوى RAMdisk مستقلّ؛ الرؤية صور استرداد الحساب: مثلاً:
      • يجب أن يحتوي lib/modules على جميع وحدات النواة المطلوبة لتشغيله. وضع الاسترداد
      • يجب أن يحتوي قرص ذاكرة التخزين المؤقت لاسترداد البيانات على init.
      • بالنسبة إلى قسم استرداد A/B، يتم إلحاق قرص ذاكرة التخزين المؤقت لاسترداد البيانات عامة وvendor_boot، ومن ثم ليس من الضروري أن تكون مستقل. مثلاً:
      • قد يحتوي lib/modules فقط على وحدات نواة إضافية مطلوبة وضع الاسترداد أثناء التشغيل إلى جانب وحدات النواة في ذاكرة الوصول العشوائي vendor_boot.
      • قد يكون الرابط الرمزي في /init موجودًا، ولكن يطغى عليه الرمز البرنامج الثنائي المرحلة الأولى /init في صورة التشغيل.

محتوى صورة قرص تخزين عام

يحتوي القرص العام على المكونات التالية.

  • 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 على true، تكون البنية على النحو التالي كما هو موضح في الشكل 3.

      • ضبط BOARD_USES_RECOVERY_AS_BOOT على قيمة فارغة، وسيتم عرض البنية على النحو الموضّح الشكل 4.

    • يمكن ضبط 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. تتم عملية التمهيد لوضع الاسترداد كما يلي.

  1. يبدأ برنامج الإقلاع، ثم ينفّذ ما يلي:

    1. يؤدي هذا الإجراء إلى دفع عملية الاسترداد + vendor_boot + رمز ذاكرة وصول عشوائي عام إلى /. (إذا كان المصنّع الأصلي للجهاز يتم تكرار وحدات النواة في ذاكرة التخزين المؤقت لاسترداد البيانات من خلال إضافتها إلى BOARD_RECOVERY_KERNEL_MODULESvendor_boot اختيارية.)
    2. تشغيل النواة من قسم "boot"
  2. تثبِّت النواة Kernel في إطار RAMD على /، ثم تنفّذ /init من قرص ذاكرة التخزين المؤقت العام.

  3. تبدأ المرحلة الأولى، ثم يتم تنفيذ ما يلي:

    1. يتم ضبط السياسة على IsRecoveryMode() == true وForceNormalBoot() == false.
    2. يتم تحميل وحدات النواة الخاصة بالمورّدين من /lib/modules.
    3. يتم الاتصال بالرقم DoFirstStageMount() ولكن يتم تخطّي التثبيت للأسباب التالية: IsRecoveryMode() == true (لا يعرض الجهاز قرص تخزين عشوائي (لأنّ / لا يزال كما هو) ولكنه يطلب SetInitAvbVersionInRecovery().)
    4. يبدأ إعداد المرحلة الثانية من /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. تشير رسالة الأشكال البيانية عملية التمهيد لوضع الاسترداد كما يلي.

  1. يبدأ برنامج الإقلاع، ثم ينفّذ ما يلي:

    1. يدفع قرص الاسترداد إلى /.
    2. تشغيل النواة من قسم "recovery"
  2. تثبِّت النواة Kernel على RAMD في / ثم تنفّذ /init، وهو رابط رمزي. /system/bin/init من الهرم في recovery.

  3. تبدأ المرحلة الأولى، ثم يتم تنفيذ ما يلي:

    1. يتم ضبط السياسة على IsRecoveryMode() == true وForceNormalBoot() == false.
    2. يتم تحميل وحدات النواة الخاصة بالمورّدين من /lib/modules.
    3. يتم الاتصال بالرقم DoFirstStageMount() ولكن يتم تخطّي التثبيت للأسباب التالية: IsRecoveryMode() == true (لا يعرض الجهاز قرص تخزين عشوائي (لأنّ / لا يزال كما هو) ولكنه يطلب SetInitAvbVersionInRecovery().)
    4. يبدأ إعداد المرحلة الثانية من /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.