يقدم 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 .