تنفيذ قسم لوحدة 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
    

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

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

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

وجِّه BOARD_SYSTEM_DLKM_SRC إلى مجلد يحتوي على وحدات GKI المطلوبة. ملفات نواة الجهاز كإدخال في نظام التصميم لإنشاء قسم 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