Android 10 از پارتیشنهای پویا، سیستم پارتیشنبندی فضای کاربر که میتواند درطول بهروزرسانیهای ازطریق هوا (OTA) پارتیشنها را ایجاد، تغییر اندازه، و حذف کند، پشتیبانی میکند.
این صفحه توضیح میدهد که چگونه کلاینتهای OTA درطول بهروزرسانی برای دستگاههای A/B که بدون پشتیبانی از پارتیشنهای پویا راهاندازی شدهاند، اندازه پارتیشنهای پویا را تغییر میدهند و چگونه کلاینتهای OTA به Android 10 ارتقا مییابند.
پسزمینه
درطول بهروزرسانی دستگاه A/B برای پشتیبانی از پارتیشنهای پویا،
جدول پارتیشن GUID (GPT) در دستگاه حفظ میشود، بنابراین
پارتیشن super در دستگاه وجود ندارد. فراداده در
system_a و system_b ذخیره میشود، اما با تغییر BOARD_SUPER_PARTITION_METADATA_DEVICE میتوان آن را
سفارشیسازی کرد.
در هریک از دستگاههای بلوکی، دو جایگاه فراداده وجود دارد. فقط یک
جایگاه فراداده در هر دستگاه بلوکی استفاده میشود. برای مثال، «فراداده ۰» در
system_a و «فراداده ۱» در system_b
به ترتیب با پارتیشنهای جایگاههای A و B مطابقت دارند. در
زمان اجرا، مهم نیست کدام جایگاه بهروزرسانی میشود.
در این صفحه، جایگاههای فراداده «فراداده S
(منبع)» و «فراداده T (هدف)» نامیده میشوند. بههمین ترتیب، به پارتیشنها system_s، vendor_t، و غیره گفته میشود.
برای اطلاعات بیشتر درباره پیکربندیهای سیستم ساخت، به ارتقا دادن دستگاهها مراجعه کنید.
برای اطلاعات بیشتر درباره نحوه تعلق پارتیشنها به گروههای بهروزرسانی، به تغییرات پیکربندی بُرد برای دستگاههای جدید مراجعه کنید.
نمونهای از فراداده در دستگاه:
- دستگاه بلوکی فیزیکی
system_a- فراداده 0
- گروه
foo_a- پارتیشن منطقی (پویا)
system_a - بخش منطقی (پویا)
product_services_a - بخشهای دیگر بهروزرسانیشده توسط Foo
- پارتیشن منطقی (پویا)
- گروه
bar_a- پارتیشن منطقی (پویا)
vendor_a - بخش منطقی (پویا)
product_a - سایر پارتیشنها توسط Bar بهروزرسانی شد
- پارتیشن منطقی (پویا)
- گروه
- فراداده ۱ (استفاده نمیشود)
- فراداده 0
- دستگاه بلوکی فیزیکی
system_b- فراداده ۰ (استفاده نشده است)
- فراداده ۱
- گروه foo_b
- بخش منطقی (پویا)
system_b - بخش منطقی (پویا)
product_services_b - بخشهای دیگر بهروزرسانیشده توسط Foo
- بخش منطقی (پویا)
- گروه bar_b
- بخش منطقی (پویا)
vendor_b - بخش منطقی (پویا)
product_b - سایر بخشها توسط Bar بهروزرسانی شد
- بخش منطقی (پویا)
- گروه foo_b
میتوانید از ابزار lpdump در
system/extras/partition_tools برای تخلیه فراداده در
دستگاهتان استفاده کنید. برای مثال:
lpdump --slot 0 /dev/block/by-name/system_alpdump --slot 1 /dev/block/by-name/system_b
بهروزرسانی کردن
در دستگاههایی که Android 9 و نسخههای پایینتر را اجرا میکنند، کارخواه OTA در دستگاه از نگاشت پارتیشنهای پویا قبلاز بهروزرسانی پشتیبانی نمیکند. مجموعه دیگری از وصلهها ایجاد میشود تا نگاشت بتواند مستقیماً روی پارتیشنهای فیزیکی موجود اعمال شود.
تولیدکننده OTA فایل نهایی super.img را میسازد که
حاوی محتوای همه پارتیشنهای پویا است، سپس تصویر را
به چند تصویر تقسیم میکند که با اندازههای دستگاههای بلوک فیزیکی
متناظر با سیستم، فروشنده، و غیره مطابقت دارد. این تصاویر با نامهای
super_system.img، super_vendor.img، و غیره نامگذاری شدهاند.
کارخواه OTA این تصاویر را روی پارتیشنهای فیزیکی اعمال میکند، نه
روی پارتیشنهای منطقی (پویا).
چون کارخواه OTA نمیداند چگونه پارتیشنهای پویا را نگاشت کند، وقتی بسته بهروزرسانی تولید میشود، همه مراحل پساز نصب بهطور خودکار برای این پارتیشنها غیرفعال میشوند. برای جزئیات بیشتر، پیکربندی پساز نصب را ببینید.
جریان بهروزرسانی همانند Android 9 است.
قبلاز بهروزرسانی:
ro.boot.dynamic_partitions= ro.boot.dynamic_partitions_retrofit=
پساز بهروزرسانی:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
بهروزرسانیهای آینده پساز نوسازی
پساز بهروزرسانی مقاومسازی، کارخواه OTA بهروز میشود تا با پارتیشنهای پویا کار کند. گسترههای پارتیشنهای منبع هرگز در سراسر پارتیشنهای فیزیکی مقصد گسترده نمیشود.
بهروزرسانی جریان بااستفاده از بسته بهروزرسانی معمولی
- فراداده پارتیشن
superرا مقداردهی اولیه کنید.-
فراداده جدید M را از فراداده S (فراداده منبع) بسازید.
برای مثال، اگر «فراداده S» از [
system_s،vendor_s،product_s] بهعنوان دستگاههای مسدودشده استفاده کند، فراداده جدید M از [system_t،vendor_t،product_t] بهعنوان دستگاههای مسدودشده استفاده میکند. همه گروهها و پارتیشنها در M دور انداخته میشوند. -
گروههای هدف و بخشها را براساس فیلد
dynamic_partition_metadataدر مانیفست بهروزرسانی اضافه کنید. اندازه هر پارتیشن را میتوانید درnew_partition_infoببینید. - نوشتن M در فراداده T.
- بخشهای اضافه شده را در نگاشتگر دستگاه بهعنوان نوشتنی نگاشت کنید.
-
فراداده جدید M را از فراداده S (فراداده منبع) بسازید.
برای مثال، اگر «فراداده S» از [
- بهروزرسانی را در دستگاههای بلوک اعمال کنید.
- درصورت لزوم، پارتیشنهای منبع را در نگاشتگر دستگاه بهصورت فقط خواندنی نگاشت کنید. این کار برای بارگیری از منابع غیررسمی ضروری است زیرا بخشهای منبع قبلاز بهروزرسانی نگاشت نمیشوند.
- بهروزرسانی کامل یا دلتا را روی همه دستگاههای بلوک در جایگاه هدف اعمال کنید.
- بخشها را سوار کنید تا اسکریپت پساز نصب اجرا شود، و سپس بخشها را پیاده کنید.
- بخشهای هدف را لغو نگاشت کنید.
جریان بهروزرسانی بااستفاده از بسته بهروزرسانی مقاومسازی
اگر بسته بهروزرسانی اصلاحی روی دستگاهی اعمال شود که قبلاً
بخشهای پویا را فعال کرده است، کارخواه OTA فایل super.img را
مستقیماً روی دستگاههای بلوکی اعمال میکند. جریان بهروزرسانی
شبیه به بهروزرسانی پساز نصب است. برای جزئیات،
بهروزرسانی مقاومسازی
را ببینید.
برای مثال، موارد زیر را فرض کنید:
- شیار A شیار فعال است.
-
system_aحاوی فراداده فعال در جایگاه ۰ است. -
system_a،vendor_a، وproduct_aبهعنوان دستگاههای قطعه استفاده میشوند.
وقتی کارخواه OTA بسته بهروزرسانی مقاومسازی را دریافت میکند،
super_system.img را روی system_b فیزیکی،
super_vendor.img را روی vendor_b فیزیکی، و
super_product.img را روی product_b فیزیکی اعمال میکند.
دستگاه بلوک فیزیکی system_b حاوی فراداده صحیح برای
نگاشت system_b منطقی،
vendor_b، و product_b در زمان بوت است.
تولید بستههای بهروزرسانی
بهروزرسانی افزایشی ازطریق هوا
هنگام تولید «بهروزرسانیهای از راه دور» افزایشی برای دستگاههای نوسازیشده، بهروزرسانیها
به این بستگی دارد که ساخت پایه
PRODUCT_USE_DYNAMIC_PARTITIONS و
PRODUCT_RETROFIT_DYNAMIC_PARTITIONS را تعریف میکند یا نه.
-
اگر ساختار پایه متغیرها را تعریف نکند، این یک بهروزرسانی
پسسازگار است. بسته بهروزرسانی حاوی فایل
super.imgتقسیمشده است و مرحله پساز نصب را غیرفعال میکند. - اگر ساختار پایه متغیرها را تعریف نکند، این همان بهروزرسانی معمولی با پارتیشنهای پویا است. بسته بهروزرسانی حاوی تصاویر برای پارتیشنهای منطقی (پویا) است. مرحله پساز نصب را میتوان فعال کرد.
OTA کامل
دو بسته کامل OTA برای دستگاههای اصلاحشده تولید میشود.
-
$(PRODUCT)-ota-retrofit-$(TAG).zipهمیشه شامل تقسیمsuper.imgمیشود و مرحله پساز نصب را برای بهروزرسانی پسساز غیرفعال میکند.-
با یک آرگومان اضافی
--retrofit_dynamic_partitionsبه دستورگانota_from_target_filesتولید میشود. - میتواند برای همه ساختها اعمال شود.
-
با یک آرگومان اضافی
-
$(PRODUCT)-ota-$(TAG).zipحاوی تصاویر منطقی برای بهروزرسانیهای آینده است.- این تنظیم فقط برای ساختارهایی با پارتیشنهای پویا فعال اعمال میشود. جزئیات مربوط به اجرای این سیاست را در زیر ببینید.
رد کردن بهروزرسانی غیربازسازیشده در ساختارهای قدیمی
بسته کامل OTA معمولی را فقط برای ساختهایی اعمال کنید که پارتیشنهای پویا در آنها فعال است. اگر سرور OTA بهدرستی پیکربندی نشده باشد و این بستهها را به دستگاههای دارای Android 9 یا پایینتر ارسال کند، دستگاهها بوت نمیشوند. کارخواه OTA در Android 9 و نسخههای پایینتر نمیتواند بین بسته OTA پسساز و بسته OTA کامل معمولی تفاوت قائل شود، بنابراین کارخواه بسته کامل را رد نمیکند.
برای جلوگیری از پذیرش بسته کامل OTA توسط دستگاه، میتوانید مرحلهای پساز نصب را برای بررسی پیکربندی دستگاه موجود الزامی کنید. برای مثال:
device/device_name/dynamic_partitions/check_dynamic_partitions
#!/system/bin/sh DP_PROPERTY_NAME="ro.boot.dynamic_partitions" DP_RETROFIT_PROPERTY_NAME="ro.boot.dynamic_partitions_retrofit" DP_PROPERTY=$(getprop ${DP_PROPERTY_NAME}) DP_RETROFIT_PROPERTY=$(getprop ${DP_RETROFIT_PROPERTY_NAME}) if [ "${DP_PROPERTY}" != "true" ] || [ "${DP_RETROFIT_PROPERTY}" != "true" ] ; then echo "Error: applied non-retrofit update on build without dynamic" \ "partitions." echo "${DP_PROPERTY_NAME}=${DP_PROPERTY}" echo "${DP_RETROFIT_PROPERTY_NAME}=${DP_RETROFIT_PROPERTY}" exit 1 fi
device/device_name/dynamic_partitions/Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= check_dynamic_partitions LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_SRC_FILES := check_dynamic_partitions LOCAL_PRODUCT_MODULE := true include $(BUILD_PREBUILT)
device/device_name/device.mk
PRODUCT_PACKAGES += check_dynamic_partitions # OPTIONAL=false so that the error in check_dynamic_partitions will be # propagated to OTA client. AB_OTA_POSTINSTALL_CONFIG += \ RUN_POSTINSTALL_product=true \ POSTINSTALL_PATH_product=bin/check_dynamic_partitions \ FILESYSTEM_TYPE_product=ext4 \ POSTINSTALL_OPTIONAL_product=false \
وقتی بسته OTA معمولی روی دستگاهی که پارتیشنهای پویا در آن فعال نیست اعمال میشود، کارخواه OTA check_dynamic_partitions را بهعنوان مرحله پساز نصب اجرا میکند و بهروزرسانی را رد میکند.