يمكن تحديث وحدتَي 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
" إلى الإصدار:
في
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
قسمًا. ينبغي أن تكون قائمة وحدات 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