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

Android 11 مفهوم «تصویر هسته عمومی» و بخش راه‌اندازی فروشنده را معرفی می‌کند. بخش راه‌اندازی فروشنده ماژول‌های هسته سازگار با GKI را ذخیره می‌کند و با init مرحله اول بار می‌شود. «واحدهای هسته» قبل‌از انتشار Android 11 نیز در پارتیشن‌های فروشنده و ODM ذخیره می‌شوند و توسط فرایندهای فروشنده بار می‌شوند.

در Android 11 یا بالاتر، هسته و همه واحدهای هسته را می‌توان به‌طور مستقل از بقیه پارتیشن‌ها به‌روز کرد. برای فعال کردن به‌روزرسانی‌های واحدهای هسته ذخیره‌شده در بخش فروشنده (بدون به‌روزرسانی بخش فروشنده)، همه واحدهای بخش فروشنده را به بخش جدیدی به‌نام 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 و Virtual 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 و Virtual 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 فروشنده است)، به پشتیبانی واحد هسته مراجعه کنید.