پارتیشن فروشنده و ODM DLKM

اندروید 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 مراجعه کنید.