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