اندروید 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)، معماری زیر را در نظر داشته باشید.

شکل 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 است.