اندروید 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 بین پارتیشن ها](https://source.android.com/static/docs/core/architecture/bootloader/images/build_sys_to_prod_odm_partitions.png?authuser=1&hl=fa)
شکل 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
است.