یک تصویر هسته عمومی (GKI) ممکن است شامل پشتیبانی درایور مورد نیاز برای فعال کردن دستگاه برای نصب پارتیشن ها نباشد. برای فعال کردن دستگاه برای نصب پارتیشنها و ادامه راهاندازی، init
مرحله اول برای بارگذاری ماژولهای هسته موجود در ramdisk بهبود مییابد. ramdisk به دو دسته عمومی و فروشنده تقسیم می شود. ماژول های هسته فروشنده در ramdisk فروشنده ذخیره می شوند. ترتیب بارگذاری ماژول های هسته قابل تنظیم است.
مکان ماژول
ramdisk سیستم فایلی برای مرحله اول init,
و برای بازیابی/تصویر فست بوت در A/B و A/B مجازی است. این یک initramfs
متشکل از دو آرشیو cpio است که توسط بوت لودر به هم متصل می شوند. اولین بایگانی cpio، که به عنوان ramdisk فروشنده در پارتیشن vendor-boot ذخیره میشود، شامل این اجزا است:
- ماژولهای هسته فروشنده
init
مرحله اول، واقع در/lib/modules/
. - فایلهای پیکربندی
modprobe
، واقع در/lib/modules/
:modules.dep
،modules.softdep
،modules.alias
،modules.options
. - یک فایل
modules.load
که نشان میدهد کدام ماژولها در مرحله اول بارگیری شوند، و به ترتیب در/lib/modules/
. - ماژولهای هسته بازیابی فروشنده، برای دستگاههای A/B و مجازی A/B، در
/lib/modules/
-
modules.load.recovery
که نشاندهنده ماژولهایی است که باید بارگیری شوند، و به ترتیب، برای دستگاههای A/B و Virtual A/B، در/lib/modules
.
آرشیو cpio دوم که با GKI به عنوان ramdisk boot.img ارائه می شود و در بالای اولین مورد اعمال می شود، شامل first_stage_init
و کتابخانه هایی است که به آن بستگی دارد.
بارگذاری ماژول در مرحله اول init
init
مرحله اول با خواندن فایل های پیکربندی modprobe از /lib/modules/
روی ramdisk شروع می شود. سپس، فهرست ماژولهای مشخصشده در /lib/modules/modules.load
(یا در مورد بازیابی، /lib/modules/modules.load.recovery
) را میخواند و سعی میکند هر یک از آن ماژولها را به ترتیب بارگذاری کند. پیکربندی مشخص شده در فایل های بارگذاری شده قبلی. دستور درخواستی ممکن است برای ارضای وابستگی های سخت یا نرم از آن منحرف شود.
ساخت پشتیبانی، مرحله اول شروع
برای تعیین ماژولهای هسته برای کپی شدن در cpio ramdisk فروشنده، آنها را در BOARD_VENDOR_RAMDISK_KERNEL_MODULES
فهرست کنید. بیلد روی این ماژولها depmod
را اجرا میکند و فایلهای پیکربندی modprobe را در cpio ramdisk فروشنده قرار میدهد.
این بیلد همچنین یک فایل 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 10 و نسخههای پایینتر وجود دارد، ماژولهای هسته فهرستشده در BOARD_VENDOR_KERNEL_MODULES
توسط پلتفرم Android در پارتیشن فروشنده در /vendor/lib/modules
کپی میشوند. ساخت پلتفرم depmod
روی این ماژول ها اجرا می کند و فایل های خروجی depmod
را در پارتیشن فروشنده در همان مکان کپی می کند. مکانیسم بارگیری ماژولهای هسته از /vendor
مانند نسخههای قبلی اندروید باقی میماند. این تصمیم شماست که چگونه و چه زمانی این ماژول ها را بارگیری کنید، اگرچه معمولاً این کار با استفاده از اسکریپت های init.rc
انجام می شود.
Wildcards و ساختن هسته یکپارچه
فروشندگانی که ساخت هسته دستگاه خود را با ساخت پلتفرم Android ترکیب میکنند، ممکن است با استفاده از ماکروهای BOARD
ذکر شده در بالا برای تعیین ماژولهای هسته برای کپی شدن در دستگاه، با مشکل مواجه شوند. اگر فروشنده بخواهد از فهرست کردن ماژولهای هسته در فایلهای ساخت پلتفرم دستگاه خودداری کند، میتواند از یک علامت عام ( $(wildcard device/vendor/mydevice/*.ko
) استفاده کند. توجه داشته باشید که در مورد یکپارچهسازی، علامت عام کار نمیکند. ساخت هسته، زیرا هنگامی که make فراخوانی می شود و ماکروها در فایل های make-فایل گسترش می یابند، ماژول های هسته ساخته نشده اند، بنابراین ماکروها خالی هستند.
برای حل این مشکل، ممکن است فروشنده از ساخت هسته خود بخواهد یک بایگانی فشرده حاوی ماژول های هسته برای کپی شدن در هر پارتیشن ایجاد کند. مسیر آن بایگانی فشرده را در BOARD_*_KERNEL_MODULES_ARCHIVE
تنظیم کنید که *
نام پارتیشن است (مانند BOARD_VENDOR_KERNEL_MODULES_ARCHIVE
). پلتفرم اندروید این آرشیو فشرده را در مکان مناسب استخراج می کند و depmod
روی ماژول ها اجرا می کند.
آرشیو فشرده ماژول هسته باید دارای یک قانون ساخت باشد که تضمین کند ساخت پلتفرم می تواند در صورت لزوم آرشیو ایجاد کند.
بازیابی
در نسخههای قبلی اندروید، ماژولهای هسته مورد نیاز برای بازیابی در BOARD_RECOVERY_KERNEL_MODULES
مشخص شدهاند. در اندروید 12، ماژولهای هسته مورد نیاز برای بازیابی همچنان با استفاده از این ماکرو مشخص میشوند. با این حال، ماژولهای هسته بازیابی در cpio ramdisk فروشنده، به جای cpio ramdisk عمومی کپی میشوند. بهطور پیشفرض، همه ماژولهای هسته فهرستشده در BOARD_RECOVERY_KERNEL_MODULES
در مرحله اول init
میشوند. اگر میخواهید فقط زیر مجموعهای از این ماژولها بارگیری شود، محتویات آن زیر مجموعه را در BOARD_RECOVERY_KERNEL_MODULES_LOAD
مشخص کنید.
مستندات مرتبط
برای آشنایی با ایجاد یک پارتیشن بوت فروشنده (که حاوی ramdisk فروشنده ذکر شده در این صفحه است)، به Boot partitions مراجعه کنید.