بررسی اجمالی

دستگاه های اندرویدی شامل چندین پارتیشن هستند که عملکردهای مختلفی را در فرآیند بوت انجام می دهند.

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

  • پارتیشن boot این پارتیشن حاوی یک تصویر هسته است و با استفاده از mkbootimg ایجاد شده است. شما می توانید از یک پارتیشن مجازی برای فلش مستقیم هر یک از تصاویر بدون فلش کردن پارتیشن بوت جدید استفاده کنید. این پارتیشن همچنین حاوی ramdisk عمومی در دستگاه هایی است که قبل از اندروید 13 راه اندازی شده اند.

    • هسته پارتیشن kernel مجازی با نوشتن تصویر هسته جدید روی تصویر هسته قدیمی، هسته را بازنویسی می کند ( zImage , zImage-dtb , Image.gz-dtb ). اگر هسته توسعه ارائه شده ناسازگار است، ممکن است لازم باشد vendor ، system یا پارتیشن dtb (در صورت وجود) را با ماژول های هسته مرتبط به روز کنید.

    • رام دیسک پارتیشن ramdisk مجازی با نوشتن تصویر ramdisk جدید روی تصویر ramdisk قدیمی، ramdisk را بازنویسی می کند.

    عملیات رونویسی محل شروع تصویر موجود در eMMC را تعیین می کند و تصویر جدید را در آن مکان کپی می کند. تصویر جدید (هسته یا ramdisk) ممکن است بزرگتر از تصویر موجود باشد. برای ایجاد فضا، بوت لودر می تواند داده ها را به دنبال تصویر جابجا کند یا با یک خطا از عملیات رها شود.

  • پارتیشن init_boot . این پارتیشن حاوی ramdisk عمومی برای دستگاه هایی است که با اندروید 13 و بالاتر راه اندازی می شوند.

  • پارتیشن system این پارتیشن شامل فریم ورک اندروید می باشد.

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

  • پارتیشن odm_dlkm . این پارتیشن به ذخیره سازی ماژول های هسته ODM اختصاص یافته است. ذخیره سازی ماژول های هسته ODM در پارتیشن odm_dlkm (بر خلاف پارتیشن odm ) امکان به روز رسانی ماژول های هسته ODM را بدون به روز رسانی پارتیشن odm فراهم می کند.

  • پارتیشن recovery این پارتیشن تصویر بازیابی را ذخیره می کند که در طی فرآیند OTA بوت می شود. دستگاه‌هایی که از به‌روزرسانی‌های یکپارچه پشتیبانی می‌کنند، می‌توانند تصاویر بازیابی را به‌عنوان یک ramdisk موجود در تصویر boot یا init_boot (به جای یک تصویر جداگانه) ذخیره کنند.

  • پارتیشن cache این پارتیشن داده‌های موقتی را ذخیره می‌کند و اگر دستگاهی از به‌روزرسانی‌های یکپارچه استفاده می‌کند اختیاری است. پارتیشن کش نیازی به نوشتن از بوت لودر ندارد، اما باید قابل پاک شدن باشد. اندازه پارتیشن به نوع دستگاه و در دسترس بودن فضا در userdata بستگی دارد. معمولاً 50 تا 100 مگابایت کافی است.

  • پارتیشن misc این پارتیشن توسط پارتیشن بازیابی استفاده می شود و 4 کیلوبایت یا بزرگتر است.

  • پارتیشن userdata این پارتیشن شامل برنامه ها و داده های نصب شده توسط کاربر، از جمله داده های سفارشی سازی است.

  • پارتیشن metadata هنگامی که دستگاه از رمزگذاری ابرداده استفاده می کند، از این پارتیشن برای ذخیره کلید رمزگذاری فراداده استفاده می شود. اندازه 16 مگابایت یا بزرگتر است. رمزگذاری نشده است و داده های آن عکس فوری نیست. هنگامی که دستگاه به تنظیمات کارخانه بازنشانی می شود، پاک می شود. استفاده از این پارتیشن به شدت محدود است.

  • پارتیشن vendor این پارتیشن حاوی هر باینری است که قابل توزیع در AOSP نیست. اگر دستگاه حاوی اطلاعات اختصاصی نیست، می توانید این پارتیشن را حذف کنید.

  • پارتیشن vendor_dlkm . این پارتیشن به ذخیره سازی ماژول های هسته فروشنده اختصاص داده شده است. ذخیره سازی ماژول های هسته فروشنده در پارتیشن vendor_dlkm (برخلاف پارتیشن vendor ) امکان به روز رسانی ماژول های هسته را بدون به روز رسانی پارتیشن vendor فراهم می کند.

  • پارتیشن radio این پارتیشن حاوی تصویر رادیویی است و فقط برای دستگاه هایی که دارای رادیو با نرم افزار مخصوص رادیو در یک پارتیشن اختصاصی هستند مورد نیاز است.

  • پارتیشن tos این پارتیشن تصویر باینری سیستم عامل Trusty را ذخیره می کند و تنها در صورتی استفاده می شود که دستگاه دارای Trusty باشد. برای جزئیات، به پارتیشن‌های TOS مراجعه کنید.

  • پارتیشن pvmfw . این پارتیشن Firmware ماشین مجازی محافظت شده (pvmfw) را ذخیره می کند که اولین کدی است که در VM های محافظت شده اجرا می شود. برای جزئیات بیشتر به Firmware ماشین مجازی محافظت شده مراجعه کنید.

پارتیشن های پویا

دستگاه‌های دارای Android 11 و بالاتر می‌توانند از پارتیشن‌های پویا پشتیبانی کنند، این پارتیشن‌ها یک سیستم پارتیشن‌بندی فضای کاربران برای Android هستند که امکان ایجاد، تغییر اندازه یا تخریب پارتیشن‌ها را در طول به‌روزرسانی‌های هوایی (OTA) فراهم می‌کند. برای جزئیات، به پارتیشن‌های پویا مراجعه کنید.

تعیین پارتیشن های بحرانی

اگر دستگاه برای اجرا به پارتیشن‌ها یا داده‌های خاصی نیاز دارد، باید آن پارتیشن‌ها/داده‌ها را به‌عنوان کاملاً محافظت‌شده یا قابل فلش‌شدن مجدد تعیین کنید، به این معنی که با استفاده از دستور fastboot oem قابل بازسازی، ارائه یا استخراج هستند. این شامل داده هایی مانند تنظیمات کارخانه خاص هر دستگاه، شماره سریال، داده های کالیبراسیون و موارد دیگر می شود.

تغییرات اندروید 11

اندروید 11 شامل تغییرات متعددی در پارتیشن‌ها می‌شود، از جمله محدودیت‌هایی در پیوند دادن به کتابخانه‌ها و انواع جدید تصویر Soong.

طرح بندی پارتیشن اندروید

شکل 1. طرح پارتیشن در اندروید 11

  • تصویر سیستم واحد (SSI). یک تصویر مفهومی جدید که شامل تصاویر system و system_ext است. وقتی این پارتیشن‌ها برای مجموعه‌ای از دستگاه‌های هدف مشترک هستند، آن دستگاه‌ها می‌توانند SSI را به اشتراک بگذارند و از ساختن تصاویر system و system_ext صرفنظر کنند.

  • پارتیشن system_ext . یک پارتیشن جدید که می تواند از منابع system استفاده کند و می تواند شامل ماژول های سیستم باشد که:

    • ماژول های سیستم AOSP را در پارتیشن system گسترش دهید. ما توصیه می کنیم چنین ماژول هایی را به AOSP آپدیت کنید تا بعداً بتوان آنها را در پارتیشن system نصب کرد.

    • بسته‌بندی ماژول‌های OEM یا SoC خاص. ما توصیه می کنیم چنین ماژول هایی را جدا کنید تا بتوان آنها را در پارتیشن product یا vendor نصب کرد.

  • پارتیشن system تصویر سیستم رایج مورد استفاده برای محصولات OEM. ما توصیه می‌کنیم که ماژول‌های اختصاصی را از پارتیشن system خارج کنید، یا با بالادستی آنها به AOSP یا با انتقال آنها به پارتیشن system_ext .

  • پارتیشن product این پارتیشن اکنون می‌تواند از رابط‌های مجاز برای نصب ماژول‌های خاص محصول استفاده کند که با هیچ پارتیشن دیگری همراه نیستند.

VNDK تغییر می کند

Vendor Native Development Kit (VNDK) مجموعه ای از کتابخانه های نصب شده در پارتیشن system است و منحصراً برای فروشندگان طراحی شده است تا HAL های خود را پیاده سازی کنند.

  • در اندروید 10 و پایین‌تر، پارتیشن vendor می‌تواند به کتابخانه‌های VNDK در پارتیشن system پیوند دهد، اما نمی‌تواند به کتابخانه‌های دیگر در پارتیشن system پیوند دهد. ماژول های بومی در پارتیشن product می توانند به هر کتابخانه ای در پارتیشن system پیوند دهند.

  • در اندروید 11 و بالاتر، پارتیشن‌های product و vendor می‌توانند به کتابخانه‌های VNDK در پارتیشن system پیوند داده شوند، اما نمی‌توانند به کتابخانه‌های دیگر در پارتیشن system پیوند داده شوند.

انواع محصول سونگ

سیستم ساخت Soong از انواع تصویر برای تقسیم وابستگی های ساخت استفاده می کند. ماژول‌های بومی ( /build/soong/cc ) می‌توانند ماژول‌های فرآیند سیستم را به نوع اصلی و ماژول‌های فرآیند فروشنده را به نوع فروشنده تغییر دهند. یک ماژول در یک نوع تصویر نمی تواند به ماژول های دیگر در یک نوع تصویر متفاوت پیوند داده شود.

  • در اندروید 10 یا پایین تر، یک ماژول سیستم به طور خودکار انواع اصلی را ایجاد می کند. همچنین می‌تواند انواع فروشنده را با تعریف vendor_available: true در فایل‌های Android.bp خود ایجاد کند. این ماژول های فروشنده را قادر می سازد تا به ماژول های سیستم پیوند بخورند. کتابخانه‌های VNDK که انواع فروشنده کتابخانه‌های system هستند، همچنین می‌توانند با تعریف vendor_available: true در فایل‌های Android.bp خود، انواع فروشنده برای ماژول‌های فروشنده ایجاد کنند (به مثال مراجعه کنید).

  • در اندروید 11، یک ماژول سیستم می‌تواند با تعریف vendor_available: true یک نوع محصول (علاوه بر انواع اصلی و فروشنده) ایجاد کند.

  • در Android 12 یا بالاتر، یک ماژول سیستم با vendor_available: true یک نوع فروشنده را علاوه بر نوع اصلی ایجاد می‌کند. برای ایجاد یک نوع محصول، product_available: true باید تعریف شود. برخی از کتابخانه های VNDK بدون product_available: true برای ماژول های محصول در دسترس نیستند.