أقسام DLKM الخاصة بالمورّد والمصنّع الأصلي للجهاز

يقدّم نظام التشغيل Android 11 مفهوم "صورة النواة العامة" وقسم التشغيل الخاص بالمورّد. يخزّن قسم التشغيل الخاص بالمورّد وحدات النواة المتوافقة مع GKI، ويتم تحميله من خلال عملية init في المرحلة الأولى. يتم أيضًا تخزين وحدات النواة التي تم إنشاؤها قبل إصدار Android 11 في أقسام المورّد والمصنّع الأصلي للجهاز، ويتم تحميلها من خلال عمليات المورّد.

في نظام التشغيل Android 11 والإصدارات الأحدث، يمكن تعديل النواة وجميع وحدات النواة بشكل مستقل عن بقية الأقسام. لتفعيل التحديثات لوحدات النواة المخزَّنة في قسم المورّد (بدون تحديث قسم المورّد)، عليك نقل جميع وحدات قسم المورّد إلى قسم جديد يُسمى وحدة نواة قابلة للتحميل ديناميكيًا خاصة بالمورّد. يمكنك بعد ذلك تعديل هذا القسم بشكل مستقل. وبالمثل، يمكنك نقل جميع وحدات النواة المخزَّنة في قسم ODM إلى قسم جديد يُسمى ODM DLKM. ويمكن أيضًا تعديل هذا القسم بشكل مستقل.

موقع القسم

يقع القسمان vendor_dlkm وodm_dlkm في القسم الفائق كقسم ديناميكي آخر.

محتويات vendor_dlkm في /vendor/lib/modules

  • وحدات نواة المورّد
  • modprobe ملفات الإعداد
  • ملف modules.load

محتويات odm_dlkm في /odm/lib/modules

  • وحدات نواة ODM
  • modprobe ملفات الإعداد
  • ملف modules.load

راجِع توافق وحدات النواة لمزيد من التفاصيل حول ملفات إعداد وحدات النواة.

إنشاء تطبيق دعم

إنشاء vendor_dlkm وodm_dlkm هو عملية مشابهة لإنشاء الأقسام الديناميكية الأخرى.

vendor_dlkm build example

أنشئ vendor_dlkm كما هو موضّح في الأمثلة التالية.

BoardConfig.mk

BOARD_USES_VENDOR_DLKMIMAGE := true
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
BOARD_<GROUP_NAME>_PARTITION_LIST += vendor_dlkm

استبدِل <GROUP_NAME> بالاسم المناسب لمجموعة التحديث. يجب أن تكون مجموعة التعديل هي المجموعة التي يقع فيها قسم المورّد.

بالنسبة إلى أجهزة A/B وVirtual A/B، ملف device.mk

AB_OTA_PARTITIONS += vendor_dlkm

fstab

أضِف الإدخال التالي لـ vendor_dlkm إلى fstab. غيِّر العلامات وفقًا للجهاز. استخدِم الأمر CL Add vendor_dlkm to CF كمثال.

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

مثال على إنشاء odm_dlkm

أنشئ odm_dlkm كما هو موضّح في الأمثلة التالية.

BoardConfig.mk

BOARD_USES_ODM_DLKIMAGE := true
BOARD_ODM_DLKIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_ODM_DLKM := odm_dlkm
BOARD_<group_name>_PARTITION_LIST += odm_dlkm

بالنسبة إلى الأجهزة التي تتوافق مع اختبارات A/B وVirtual A/B، device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

أضِف الإدخال التالي لـ odm_dlkm إلى fstab. غيِّر العلامات وفقًا للجهاز. استخدِم الأمر CL Add odm_dlkm to CF كمثال.

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

نسخ وحدات kernel إلى قسم

لاختيار وحدات kernel التي تريد نسخها إلى القسم vendor_dlkm، أدرِجها في BOARD_VENDOR_KERNEL_MODULES.

إذا أردت تجاهل محتوى modules.load، يمكنك تحديده في BOARD_VENDOR_KERNEL_MODULES_LOAD.

أثناء وقت الإنشاء، يتم تثبيت الوحدات المدرَجة في BOARD_VENDOR_KERNEL_MODULES في $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules. يتم إنشاء رابط رمزي في /vendor/lib/modules يؤدي إلى /vendor_dlkm/lib/modules.

وبالمثل، لاختيار وحدات kernel التي تريد نسخها إلى القسم odm_dlkm، أدرِجها في BOARD_ODM_KERNEL_MODULES. يتم تنفيذ إصدار النظام الأساسي depmod على الوحدات ويتم نسخ ملفات الإخراج depmod إلى الصورة. تنشئ عملية الإنشاء ملف modules.load وتخزّنه في الصورة. يحتوي هذا الملف على جميع الوحدات المُدرَجة في BOARD_ODM_KERNEL_MODULES.

إذا أردت تجاهل محتوى modules.load، يمكنك تحديده في BOARD_ODM_KERNEL_MODULES_LOAD.

أثناء وقت الإنشاء، يتم تثبيت الوحدات المدرَجة في BOARD_ODM_KERNEL_MODULES في $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules. يتم إنشاء رابط رمزي في /odm/lib/modules يؤدي إلى /odm_dlkm/lib/modules.

استخدِم /vendor/lib/modules و/odm/lib/modules دائمًا لوحدات نواة المورّد والمصنّع الأصلي للجهاز.

لا تستخدِم /vendor_dlkm/lib/modules مطلقًا. تثبّت الأجهزة التي لا تتضمّن قسم vendor_dlkm الإصدار BOARD_VENDOR_KERNEL_MODULES إلى /vendor/lib/modules مباشرةً. وهذا يمثّل مشكلة لأنّ /vendor_dlkm/lib/modules غير متوفر.

لا تستخدِم /odm_dlkm/lib/modules مطلقًا. الأجهزة التي لا تتضمّن قسم odm_dlkm تثبّت BOARD_ODM_KERNEL_MODULES مباشرةً في /odm/lib/modules. وهذا يمثّل مشكلة لأنّ /odm_dlkm/lib/modules غير متوفر.

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

أثناء first_stage_init، يتم تحميل القسمَين vendor_dlkm وodm_dlkm في الدليلَين /vendor_dlkm و/odm_dlkm على التوالي. عند حدوث ذلك، ستصبح الروابط الرمزية في /vendor/lib/modules و/odm/lib/modules متاحة.

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

للحصول على مستندات بشأن إنشاء قسم vendor-boot (الذي يحتوي على vendor RAMDisk)، يُرجى الرجوع إلى دعم وحدات النواة.