قسم البائع / ODM DLKM

يقدم Android 11 مفهوم صورة Kernel العامة وقسم تمهيد البائع. يقوم قسم تمهيد البائع بتخزين وحدات kernel المتوافقة مع GKI، ويتم تحميله بواسطة المرحلة الأولى من init. يتم أيضًا تخزين وحدات Kernel قبل إصدار Android 11 في أقسام البائع وODM، ويتم تحميلها بواسطة عمليات البائع.

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

موقع التقسيم

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

محتويات بائع_دلكم في /vendor/lib/modules

  • وحدات نواة البائع
  • ملفات التكوين modprobe
  • ملف modules.load

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

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

راجع دعم وحدة Kernel لمزيد من التفاصيل حول ملفات تكوين وحدة kernel.

بناء الدعم

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

مثال على بناء البائع_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

com.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

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