يمكن تحديث صورة النواة العامة (GKI) ووحدات GKI بشكل مستقل عن بقية الأقسام، لأنّ وحدات GKI تقع في قسم ديناميكي منفصل في الصورة الفائقة يُسمى system_dlkm
. توقّع Google وحدات GKI باستخدام زوج المفاتيح في وقت إنشاء النواة، ولا تتوافق هذه الوحدات إلا مع GKI التي تم إنشاؤها بها.
لا تتوافق واجهة التطبيق الثنائية (ABI) بين صورة النواة العامة (GKI) ووحدات GKI، ويجب إنشاء صورة النواة العامة ووحدات GKI وتحديثها معًا لكي يتم تحميل الوحدات بشكل صحيح أثناء وقت التشغيل.
تنفيذ دعم تقسيم system_dklm
يقع القسم system_dlkm
في القسم الفائق كقسم ديناميكي آخر. يمكن أن يحتوي هذا القسم على ما يلي:
- وحدات نواة موقَّعة في وقت الإنشاء من Google
depmod
عنصر
الإصدار system_dlkm
إنشاء system_dlkm
هو عملية مشابهة لإنشاء الأقسام الديناميكية الأخرى. اتّبِع الخطوات التالية لإضافة system_dlkm
إلى الإصدار:
في
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
في قائمة الأقسام، أضِف
system_dlkm
:BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(اختياري) بالنسبة إلى أجهزة اختبار 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
الأخرى. يجب أن يشير ماكرو BOARD_SYSTEM_KERNEL_MODULES
إلى قائمة وحدات GKI المطلوبة للجهاز. ويتم تثبيت هذه الوحدات في $ANDROID_PRODUCT_OUT/system_dlkm
أثناء عملية الإنشاء. أي وحدة في القسم vendor_dlkm
تعتمد على الوحدات في القسم system_dlkm
تنشئ مراجع صحيحة في الملف modules.dep
للقسم vendor_dlkm
. بسبب التبعيات بين الأقسام التي يمثّلها modules.dep
، عند تحميل وحدة خاصة بمورّد، يتم تحميل أي وحدة GKI مطلوبة تلقائيًا.
على سبيل المثال، لتثبيت جميع وحدات GKI على القسم system_dlkm
لنواة GKI
arm64
5.15
من الإصدارات المسبقة:
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 حالة اختبار VTS لواجهة GKI للتحقّق من القسم system_dlkm
. لتشغيل الاختبار يدويًا، استخدِم الأمر atest
التالي:
atest -c vts_dlkm_partition_test