يمكن تعديل وحدات GKI وGKI بشكل مستقل عن بقية الأقسام
لأنّ وحدات GKI تقع على قسم ديناميكي منفصل في الصورة الفائقة
التي تُسمى system_dlkm
. يتم توقيع وحدات GKI من قِبل Google باستخدام مفتاحَي التشفير kernel
ووقت الإصدار، وهي متوافقة فقط مع GKI التي تم إنشاؤها باستخدامها.
لا تتوفّر ثبات ABI بين وحدات GKI و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
تحديد وحدات 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
arm64
kernel 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
برمجي، تحميل وحدات kernel
استنادًا إلى الترتيب المحدّد في 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