اندروید ۱۱ مفهوم تصویر عمومی هسته (Generic Kernel Image) و پارتیشن بوت فروشنده (vendor boot partition) را معرفی میکند. پارتیشن بوت فروشنده، ماژولهای هسته سازگار با GKI را ذخیره میکند و توسط init مرحله اول بارگذاری میشود. ماژولهای هسته قبل از انتشار اندروید ۱۱ نیز در پارتیشنهای فروشنده و ODM ذخیره میشوند و توسط فرآیندهای فروشنده بارگذاری میشوند.
برای اندروید ۱۱ یا بالاتر، هسته و تمام ماژولهای هسته میتوانند مستقل از بقیه پارتیشنها بهروزرسانی شوند. برای فعال کردن بهروزرسانیها برای ماژولهای هسته ذخیره شده در پارتیشن فروشنده (بدون بهروزرسانی پارتیشن فروشنده)، تمام ماژولهای پارتیشن فروشنده را به یک پارتیشن جدید به نام Vendor DLKM (ماژول هسته قابل بارگذاری پویا) منتقل کنید. سپس میتوانید این پارتیشن را بهطور مستقل بهروزرسانی کنید. بهطور مشابه، میتوانید تمام ماژولهای هسته ذخیره شده در پارتیشن ODM را به یک پارتیشن جدید به نام ODM DLKM منتقل کنید. این پارتیشن نیز میتواند بهطور مستقل بهروزرسانی شود.
محل پارتیشن
پارتیشنهای vendor_dlkm و odm_dlkm به عنوان یک پارتیشن پویای دیگر در پارتیشن super قرار دارند.
محتویات vendor_dlkm در /vendor/lib/modules
- ماژولهای هسته فروشنده
- فایلهای پیکربندی
modprobe - یک فایل
modules.load
محتویات odm_dlkm در /odm/lib/modules
- ماژولهای هسته ODM
- فایلهای پیکربندی
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> نام مناسب گروه بهروزرسانی را قرار دهید. گروه بهروزرسانی باید گروهی باشد که پارتیشن vendor در آن قرار دارد.
برای دستگاههای A/B و A/B مجازی، device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
ورودی زیر را برای vendor_dlkm به fstab اضافه کنید. پرچمها را مطابق با دستگاه تغییر دهید. به عنوان مثال از CL Add vendor_dlkm to 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 Add odm_dlkm to 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 ) میتواند ماژولهای هسته را بر اساس ترتیب مشخص شده در modules.load بارگذاری کند. فرآیند فروشنده همچنین میتواند در صورت لزوم، ماژولها را در زمان دیگری بارگذاری کند.
مستندات مرتبط
برای مستندات مربوط به ایجاد پارتیشن بوت فروشنده (که شامل RAMDisk فروشنده است)، به پشتیبانی ماژول هسته مراجعه کنید.