أقسام المورّد وODM DLKM

يقدّم نظام التشغيل Android 11 مفهوم "صورة kernel العامة" وقسم التمهيد الخاص بالمورّد. يخزِّن قسم التمهيد الخاص بالمورّد وحدات برمجية للنواة متوافقة مع GKI، ويتم تحميلها من خلال مرحلة الإعداد الأولى. يتم أيضًا تخزين وحدات النواة (Kernel) السابقة لإصدار Android 11 في أقسام 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

يمكنك الاطّلاع على دعم وحدة النواة للحصول على مزيد من التفاصيل حول ملفات إعداد وحدات النواة.

تقديم الدعم

إنّ إنشاء القسمَين 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

نسخ وحدات النواة في قسم

لاختيار وحدات النواة التي تريد نسخها إلى قسم "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.

وبالمثل، لاختيار وحدات النواة التي تريد نسخها إلى القسم 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.