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

يقدّم نظام التشغيل Android 11 مفهوم "صورة kernel العامة" وقسم التمهيد الخاص بالمورّد. يخزِّن قسم التمهيد الخاص بالمورّد وحدات ملف kernel المتوافقة مع GKI، ويتم تحميلها من خلال عملية الإعداد في المرحلة الأولى. يتم أيضًا تخزين وحدات kernel قبل إصدار Android 11 في ملفَي ‎partiton vendor وODM، ويتم تحميلها من خلال عمليات المورّد.

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

موقع التقسيم

يقع القسمان vendor_dlkm وodm_dlkm في القسم الفائق كأحد الأقسام الديناميكية الأخرى.

محتوى vendor_dlkm في ‎ /vendor/lib/modules

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

محتوى odm_dlkm في ‎ /odm/lib/modules

  • وحدات نواة المصنّعين الأصليين للأجهزة
  • modprobe ملفات الإعدادات
  • ملف modules.load

اطّلِع على دعم ملفّات برمجة وحدات kernel للحصول على مزيد من التفاصيل عن ملفات ضبط وحدات kernel.

إنشاء الدعم

إنّ إنشاء القسمَين vendor_dlkm وodm_dlkm هو عملية مشابهة لإنشاء غيرها من القسمَين الديناميكيَين.

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

أنشئ 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 وأجهزة A/B الافتراضية، ملف device.mk

AB_OTA_PARTITIONS += vendor_dlkm

fstab

أضِف الإدخال التالي لـ vendor_dlkm إلى fstab. غيِّر العلامات وفقًا للجهاز. استخدِم CL إضافة vendor_dlkm إلى 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 وA/B الافتراضية، device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

أضِف الإدخال التالي لـ odm_dlkm إلى fstab. غيِّر العلامات وفقًا للجهاز. استخدِم CL إضافة odm_dlkm إلى 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 لوحدات مورّدي ونظام التشغيل المفتوح المصدر (ODM) للنواة.

لا تستخدِم مطلقًا ‎ /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 برمجي) تحميل وحدات kernel استنادًا إلى الترتيب المحدّد في modules.load. يمكن أيضًا لعملية المورّد تحميل الوحدات في وقت لاحق، إذا لزم الأمر.

للحصول على مستندات بشأن إنشاء قسم لبدء التشغيل الخاص بالمورّد (الذي يحتوي على ملف RAMDisk الخاص بالمورّد)، يُرجى الرجوع إلى دعم ملف Kernel Module.