تنفيذ قسم وحدة GKI

يمكن تعديل وحدات GKI وGKI بشكل مستقل عن بقية الأقسام لأنّ وحدات GKI تقع على قسم ديناميكي منفصل في الصورة الفائقة التي تُسمى system_dlkm. يتم توقيع وحدات GKI من قِبل Google باستخدام النواة مفتاحا التشفير المتاحان في وقت الإصدار وهما متوافقان فقط مع واجهة GKI التي تم إنشاؤها باستخدامهما. ليس هناك ثبات في واجهة التطبيق الثنائية (ABI) بين وحدتَي GKI وGKI. للوحدات على التحميل بشكل صحيح أثناء وقت التشغيل، يجب إنشاء وتحديث وحدات GKI وGKI.

تنفيذ دعم قسم System_dklm

يقع القسم system_dlkm في القسم الفائق كقسم ديناميكي آخر. يمكن أن يحتوي هذا القسم على ما يلي:

  • وحدات النواة الموقَّعة في وقت الإصدار من Google
  • depmod عنصر

الإصدار system_dlkm

يُعد إنشاء system_dlkm عملية مشابهة لإنشاء نماذج ديناميكية أخرى الأقسام. نفِّذ الخطوات التالية لإضافة "system_dlkm" إلى الإصدار:

  1. في BoardConfig.mk، أضِف الإدخالات التالية:

    BOARD_USES_SYSTEM_DLKMIMAGE := true
    BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)
    TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
    
  2. في قائمة الأقسام، أضِف system_dlkm: BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm

  3. (اختياري) بالنسبة إلى أجهزة اختبار A/B وأجهزة اختبار A/B الافتراضي، أضِف السطر التالي في ملف device.mk لجهازك:

    AB_OTA_PARTITIONS += system_dlkm
    

تحديد وحدات kernel المطلوب نسخها إلى system_dlkm

لكي يتم تحميل الوحدات بنجاح في وقت التشغيل، يجب إنشاء وحدتَي GKI وGKI. وبالتالي، يجب تحديد وحدات النواة في إصدار GKI من أجل البنية المستهدفة وتوفير ذلك كمصدر للقسم system_dlkm أثناء إنشاء المنصة.

لنظام التشغيل Android 13

اضبط العنصر BOARD_SYSTEM_DLKM_SRC على مجلد يحتوي على وحدات GKI المطلوبة وملفات مثيل kernel للجهاز كمدخل لنظام الإنشاء لإنشاء القسم system_dlkm. مثلاً:

قدِّم مصدر وحدات GKI في مجلد وأشِر إلىBOARD_SYSTEM_DLKM_SRC هذا المجلد. مثلاً:

  BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging

في وقت الإصدار، يتم تثبيت الوحدات المدرجة في BOARD_SYSTEM_DLKM_SRC في $ANDROID_PRODUCT_OUT/system_dlkm

على نظام التشغيل Android 14

تم تبسيط عملية التنفيذ باستخدام وحدات الماكرو يتم استخدام (BOARD_*_KERNEL_MODULES) لأغراض أخرى *_dlkm قسمًا. يجب أن تتم الإشارة إلى قائمة وحدات GKI المطلوبة للجهاز باستخدام الماكرو BOARD_SYSTEM_KERNEL_MODULES. في وقت الإنشاء، يتم تثبيت هذه الوحدات في $ANDROID_PRODUCT_OUT/system_dlkm. أي وحدة في قسم vendor_dlkm الذي يعتمد على الوحدات في system_dlkm ينشئ هذا القسم مراجع صحيحة في ملف modules.dep قسم واحد (vendor_dlkm). بسبب التبعيات على مستوى الأقسام المختلفة التي يمثّلهاmodules.dep، عند تحميل ملف وحدة المورّد، يتم تحميل أي وحدة GKI مطلوبة تلقائيًا.

على سبيل المثال، لتثبيت جميع وحدات GKI في قسم system_dlkm في GKI. نواة 5.15 من نوع arm64 من بنية مسبقة الإنشاء:

 BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)

تركيب system_dlkm أثناء التشغيل

استنادًا إلى نظام الملفات المستخدم كنظام ملفات للقراءة فقط، أضف ما يلي في fstab لتثبيت القسم system_dlkm في وقت التشغيل:

ext4 كنظام ملفات للقراءة فقط

  system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

erofs كنظام ملفات للقراءة فقط

  system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb

تركيب التقسيم وتحميل الوحدة

أثناء عملية first_stage_init، يتم تركيب قسم system_dlkm في /system_dlkm كنظام ملفات للقراءة فقط. وعند تثبيت الجهاز بنجاح، غالبًا ما يكون هناك روابط في /system/lib/modules تشير إلى /system_dlkm/lib/modules المتوفرة.

بعد ذلك، يمكن لعملية تابعة للمورّد، مثل نص برمجي .rc، تحميل وحدات النواة. استنادًا إلى الطلب المحدّد في modules.load. ينبغي أن تستخدم عملية البائع الرابط الرمزي /system/lib/modules لتحميل الوحدات. إذا لزم الأمر، يمكن لعملية المورّد أيضًا تحميل الوحدات في وقت لاحق.

SELinux

يتم تصنيف كل ملف في قسم system_dlkm بسياق الملف system_dlkm_file لتحميل ملف وحدات GKI في قسم "system_dlkm"، اتّبِع الخطوات التالية: عملية المورِّد المسؤولة عن تحميل الوحدات تحتاج إلى sepolicy في مجال البائع.

على سبيل المثال، يحتوي dlkm_loader الذي يستخدمه Cuttlefish لتحميل وحدات GKI على الأذونات التالية في ملف السياسة على shared/sepolicy/vendor/dlkm_loader.te:

allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;

التحقّق من صحة القسم System-dlkm

توفّر Google نموذج اختبار GKI VTS للتحقّق من قسم system_dlkm. إلى عليك استدعاء الاختبار يدويًا، وذلك باستخدام الأمر atest التالي:

  atest -c vts_dlkm_partition_test