پارتیشن های ODM

اندروید 10 شامل پشتیبانی از ساخت پارتیشن های odm با استفاده از سیستم ساخت اندروید است.

درباره پارتیشن های ODM

سازندگان طراحی اصلی (ODM) بسته‌های پشتیبانی برد فروشنده (BSPs) سیستم روی تراشه (SoC) را برای دستگاه‌های خاص خود (بردهایشان) سفارشی می‌کنند. این آنها را قادر می‌سازد تا ماژول‌های هسته را برای مؤلفه‌های مخصوص برد، دیمون‌های مخصوص برد یا ویژگی‌های خودشان بر روی لایه‌های انتزاعی سخت‌افزاری (HAL) پیاده‌سازی کنند. آنها همچنین ممکن است بخواهند اجزای SoC را جایگزین یا سفارشی کنند.

در نسخه‌های پایین‌تر اندروید، چنین سفارشی‌سازی‌هایی از استفاده از یک تصویر فروشنده واحد برای دستگاه‌هایی با SoC یکسان (یا با SoCهای مختلف، اما در یک خانواده) جلوگیری می‌کرد. در اندروید 10 و بالاتر، می‌توانید از یک پارتیشن odm جداگانه برای سفارشی‌سازی‌ها استفاده کنید که به شما امکان می‌دهد از یک تصویر فروشنده برای چندین SKU سخت‌افزاری استفاده کنید.

از پارتیشن های محصول و ODM استفاده کنید

اندروید 9 از ساخت پارتیشن‌های product پشتیبانی می‌کند و امکان استفاده از یک تصویر سیستمی را برای SKUهای نرم‌افزاری متعدد ارائه شده توسط تصاویر product.img مختلف فراهم می‌کند. در حالی که پارتیشن product برای SKU های نرم افزاری در نظر گرفته شده است، پارتیشن odm برای SKU های سخت افزاری در نظر گرفته شده است.

با محصول اختصاصی و پارتیشن‌های ODM، می‌توانید از پارتیشن system برای میزبانی کد عمومی برای اشتراک‌گذاری در میان بسیاری از SKUهای نرم‌افزاری و پارتیشن vendor برای میزبانی کد BSP مخصوص SoC برای اشتراک‌گذاری بین چندین دستگاه بر اساس SoC استفاده کنید.

استفاده از پارتیشن های جداگانه دارای معایبی است، مانند مشکل در مدیریت فضای دیسک (به عنوان مثال، شما باید فضای محدودی را برای رشد آینده رزرو کنید). با این حال، پشتیبانی اندروید 10 از پارتیشن‌های پویا مشکل دیسک را برطرف می‌کند و پارتیشن‌بندی مجدد دستگاه را در حین به‌روزرسانی هوایی (OTA) ممکن می‌سازد.

اجزای ODM

پارتیشن odm شامل مولفه‌های اختصاصی ODM زیر است (مشابه پارتیشن vendor ) که در جدول زیر فهرست شده‌اند.

جزء خاص ODM محل
ماژول های هسته قابل بارگیری (LKM) /odm/lib/modules/*.ko
کتابخانه های بومی /odm/lib[64]
HAL ها /odm/lib[64]/hw
SEPolicy /odm/etc/selinux
داده های شی VINTF /odm/etc/vintf
فایل های init.rc /odm/etc/init
خصوصیات سیستم /odm/build.prop
همپوشانی منابع زمان اجرا (RRO) /odm/overlay/*.apk
برنامه ها /odm/app/*.apk
برنامه های خصوصی /odm/priv-app/*.apk
کتابخانه های جاوا /odm/framework/*.jar
تنظیمات سیستم Android Framework /odm/etc/sysconfig/* و /odm/etc/permissions/*

بدون تصاویر سفارشی

از تصاویر سفارشی استفاده نکنید زیرا از موارد زیر پشتیبانی نمی کنند:

  • نصب یک ماژول به یک هدف خاص تصاویر سفارشی از کپی کردن مصنوعات در یک تصویر پشتیبانی می کنند، اما نمی توانند یک ماژول را در یک پارتیشن خاص با تعیین پارتیشن هدف به عنوان بخشی از یک قانون ساخت، نصب کنند.
  • سونگ. custom_images را نمی توان با استفاده از سیستم ساخت Soong ساخت.
  • به روز رسانی OTA. تصاویر سفارشی به عنوان تصاویر رام کارخانه ای استفاده می شوند که نمی توانند OTA-ed شوند.

ABI ها را بین پارتیشن ها حفظ کنید

پارتیشن odm پسوند پارتیشن vendor است. هنگام در نظر گرفتن پایداری رابط باینری برنامه (ABI)، معماری زیر را در نظر داشته باشید.

حفظ ABI بین پارتیشن ها

شکل 1. نگهداری ABI بین پارتیشن ها.

  • هیچ ثبات ABI بین پارتیشن های odm و vendor وجود ندارد. هر دو پارتیشن باید به طور همزمان ارتقا داده شوند.
  • پارتیشن های odm و vendor می توانند به یکدیگر وابسته باشند، اما پارتیشن vendor باید بدون پارتیشن odm کار کند.
  • ABI بین odm و system مانند ABI بین vendor و system است.

تعامل مستقیم بین پارتیشن product و vendor یا پارتیشن odm مجاز نیست . (این توسط SEpolicy اجرا می شود.)

پیاده سازی پارتیشن های ODM

قبل از اجرای یک پارتیشن جدید، تغییرات مربوط به AOSP را بررسی کنید.

پارتیشن های ODM را تنظیم کنید

برای راه اندازی پارتیشن های odm ، این پرچم های ساخت را وارد کنید:

  • BOARD_ODMIMAGE_PARTITION_SIZE برای اندازه پارتیشن ثابت
  • PRODUCT_USE_DYNAMIC_PARTITIONS و BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE برای اندازه پارتیشن پویا
  • نوع سیستم فایل BOARD_ODMIMAGE_FILE_SYSTEM_TYPE مورد استفاده برای تصویر ODM
  • PRODUCT_ODM_PROPERTIES برای /odm/build.prop برای استفاده در $(call inherit-product path/to/device.mk) مانند PRODUCT_ODM_PROPERTIES += product.abc=ok

یک ماژول را در یک پارتیشن ODM نصب کنید

برای نصب یک ماژول در یک پارتیشن odm از این پرچم های ساخت استفاده کنید:

  • device_specific: true در Android.bp
  • LOCAL_ODM_MODULE := true در Android.mk

بوت تایید شده را فعال کنید

برای جلوگیری از دستکاری نرم افزارهای مخرب در پارتیشن های odm ، Android Verified Boot (AVB) را برای آن پارتیشن ها فعال کنید (همانطور که برای vendor و پارتیشن های system انجام می دهید).

برای فعال کردن AVB، پرچم ساخت BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS را اضافه کنید. برای جزئیات در مورد پیکربندی AVB در پارتیشن های پویا، به تغییرات پیکربندی AVB مراجعه کنید.

odm را به عنوان پارتیشن /vendor دیگر در نظر بگیرید

برای اطمینان از اینکه سیستم پارتیشن odm را به‌عنوان یک پارتیشن vendor مدیریت می‌کند، هر مرجع vendor سخت‌کد شده را با مجموعه‌ای از پارتیشن‌های سخت‌افزاری (در حال حاضر odm و vendor ) جایگزین کنید. مکان‌های مرجع vendor قابل توجه در پلتفرم شامل پیوند دهنده پویا ، مدیر بسته و shell/libc است.