قد لا تحتوي صورة النواة العامة (GKI) على دعم برنامج التشغيل المطلوب
تمكين الجهاز من تثبيت الأقسام. لتمكين الجهاز من تثبيت الأقسام
لمواصلة التشغيل، تم تحسين المرحلة الأولى من init
لتحميل
وحدات نواة موجودة على قرص RAM. ينقسم الجدول إلى مجموعات عامة
البائعون. يتم تخزين وحدات النواة (kernel) للمورِّد في ذاكرة الوصول العشوائي (RAM) للمورد. تشير رسالة الأشكال البيانية
الترتيب الذي يتم به تحميل وحدات النواة قابل للتهيئة.
موقع الوحدة
نظام ramdisk هو نظام ملفات المرحلة الأولى init,
صورة استرداد/Fastbootd على أجهزة A/B وأجهزة A/B الافتراضية إنّه
تتألف initramfs
من أرشيفين بنظام تكلفة الاشتراك يتم إنشاؤه بالتسلسل
برنامج الإقلاع. أرشيف cpio الأول، الذي يتم تخزينه كـ ramdisk للمورّد
في قسم تمهيد المورد، يحتوي على المكونات التالية:
- المرحلة الأولى من وحدات النواة (
init
) الخاصة بالمورِّدين المتوفّرة في/lib/modules/
modprobe
ملف إعداد موجود في/lib/modules/
:modules.dep
،modules.softdep
،modules.alias
،modules.options
.- ملف
modules.load
يشير إلى الوحدات المطلوب تحميلها خلال المرحلة الأولى، وبأي ترتيب،/lib/modules/
- وحدات نواة استرداد المورِّدين، لأجهزة A/B وVirtual A/B، في
/lib/modules/
modules.load.recovery
التي تشير إلى الوحدات المطلوب تحميلها بالترتيب، بالنسبة لأجهزة A/B وA/B الافتراضية،/lib/modules
أرشيف cpio الثاني الذي يتم توفيره مع GKI
كقرص RAM الخاص بـ Boot.img
أولاً، يحتوي على first_stage_init
والمكتبات التي يعتمد عليها.
جارٍ تحميل الوحدة في بداية المرحلة الأولى
تبدأ المرحلة "init
" في المرحلة الأولى من خلال قراءة إعدادات "modprobe".
من /lib/modules/
على الهرم. بعد ذلك، يقرأ قائمة
من الوحدات المحدّدة في /lib/modules/modules.load
(أو في الحالة
من عملية الاسترداد، /lib/modules/modules.load.recovery
) ويحاول
تحميل كل وحدة من هذه الوحدات بالترتيب، وفقًا للإعدادات المحددة في
الملفات المحملة مسبقًا. قد ينحرف الطلب المطلوب من إلى
يلبي التبعيات الصعبة أو الخفيفة.
بناء الدعم من المرحلة الأولى
لتحديد وحدات kernel المراد نسخها إلى وحدة ramdisk cpio للمورد،
في BOARD_VENDOR_RAMDISK_KERNEL_MODULES
. يعمل الإصدار
depmod
على هذه الوحدات ووضع إعدادات modprobe الناتجة
في المورد ramdisk cpio.
ينشئ الإصدار أيضًا ملف modules.load
ويخزّنه في
البائع ramdisk cpio. تتضمّن المجموعة بشكل تلقائي جميع الوحدات المدرَجة في
BOARD_VENDOR_RAMDISK_KERNEL_MODULES
لتجاوز محتويات
هذا الملف، استخدم BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD
، كما هو موضح
في هذا المثال:
BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := \ device/vendor/mydevice-kernel/first.ko \ device/vendor/mydevice-kernel/second.ko \ device/vendor/mydevice-kernel/third.ko
دعم الإصدار الكامل في Android
كما هو الحال في Android 10 والإصدارات الأقدم، وحدات النواة المدرجة في
تم نسخ BOARD_VENDOR_KERNEL_MODULES
من خلال نظام Android الأساسي.
في قسم المورِّد على /vendor/lib/modules
. تشير رسالة الأشكال البيانية
يعمل إصدار النظام الأساسي على depmod
على هذه الوحدات، وينسخ
depmod
ملف إخراج في قسم المورِّد على نفس
الموقع. آلية تحميل وحدات النواة من /vendor
يبقى على حاله كما كان في الإصدارات السابقة من Android. القرار يعود لك
طريقة ووقت تحميل هذه الوحدات، على الرغم من أن ذلك يتم عادةً باستخدام
init.rc
نص برمجي
أحرف البدل وإصدارات النواة المدمَجة
المورّدون الذين يدمجون إصدار نواة أجهزتهم مع إصدار نظام Android الأساسي
مشكلة في استخدام وحدات ماكرو BOARD
المذكورة أعلاه
تحديد وحدات النواة التي سيتم نسخها إلى الجهاز. إذا رغب البائع في تجنب
وإدراج وحدات kernel في ملفات إصدار النظام الأساسي للجهاز، ويمكنهم استخدام حرف بدل
($(wildcard device/vendor/mydevice/*.ko
). لاحظ أن حرف البدل لا
في حالة إصدار نواة مدمجة، لأنه عند استدعاء الأمر
يتم توسيع وحدات الماكرو في ملفات Makefiles، ولم يتم إنشاء وحدات النواة، وبالتالي
فارغة.
للتغلب على هذه المشكلة، قد يطلب البائع من إصدار النواة الذي يملكه إنشاء ملف zip
يحتوي على وحدات النواة التي سيتم نسخها على كل قسم.
ضبط مسار أرشيف ZIP هذا في BOARD_*_KERNEL_MODULES_ARCHIVE
حيث يكون *
هو اسم القسم (مثل
BOARD_VENDOR_KERNEL_MODULES_ARCHIVE
). إصدار نظام Android الأساسي
يقوم باستخراج ملف الأرشيف المضغوط هذا إلى الموقع المناسب وتشغيل depmod
في الوحدات.
يجب أن يحتوي أرشيف ZIP لوحدة النواة على قاعدة إنشاء تضمن النظام الأساسي. إنشاء الأرشيف عند الحاجة.
استعادة الكرة
في إصدارات Android السابقة، كانت وحدات النواة المطلوبة لاسترداد البيانات
المحددة في BOARD_RECOVERY_KERNEL_MODULES
. في Android 12،
لا تزال وحدات النواة (kernel) المطلوبة للاسترداد لا تزال
باستخدام هذا الماكرو. ومع ذلك، يتم نسخ وحدات نواة الاسترداد إلى
للبائع ramdisk cpio، بدلاً من العام ramdisk cpio. كل العناصر تلقائيًا
تم تحميل وحدات النواة (kernel) المُدرجة في BOARD_RECOVERY_KERNEL_MODULES
.
خلال المرحلة الأولى من "init
" إذا كنت تريد فقط مجموعة فرعية من هذه
الوحدات المراد تحميلها، حدد محتويات تلك المجموعة الفرعية في
BOARD_RECOVERY_KERNEL_MODULES_LOAD
مستندات ذات صلة
للتعرف على كيفية إنشاء قسم تشغيل المورد (الذي يحتوي على المورد ذكر ramdisk في هذه الصفحة)، انظر تمهيد الأقسام.