يتوافق Android 10 الأقسام الديناميكية، هي عملية تقسيم مساحة المستخدم يمكنه إنشاء أقسام وتغيير حجمها وتدميرها أثناء إجراء التحديثات عبر شبكة غير سلكيّة (OTA).
توضّح هذه الصفحة كيفية تغيير عملاء OTA لحجم الأقسام الديناميكية أثناء تحديث أجهزة A/B التي تم إطلاقها بدون إتاحة الأقسام الديناميكية، وكيفية ترقية عملاء OTA إلى Android 10.
خلفية
أثناء تحديث جهاز A/B لتفعيل الأقسام الديناميكية، يتم الاحتفاظ بجدول تقسيم GUID (GPT) على الجهاز، وبالتالي لا يتوفّر قسم
super
على الجهاز. تم تخزين بيانات التعريف في
system_a
وsystem_b
، ولكن يمكن أن يكون هذا
التي تم تخصيصها عن طريق تغيير BOARD_SUPER_PARTITION_METADATA_DEVICE
.
يتوفر في كل جهاز من أجهزة التجميع خانتان للبيانات الوصفية. لا يتم استخدام سوى واحدة
من خانات البيانات الوصفية في كل جهاز كتل. على سبيل المثال، بيانات التعريف 0 في
system_a
والبيانات الوصفية 1 على 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
- القسم المنطقي (الديناميكي)
- المجموعة
- البيانات الوصفية 1 (غير مستخدَمة)
- البيانات الوصفية 0
- جهاز التخزين المُجمَّع
system_b
- البيانات الوصفية 0 (غير مستخدَمة)
- البيانات الوصفية 1
- مجموعة foo_b
- التقسيم المنطقي (الديناميكي)
system_b
- التقسيم المنطقي (الديناميكي)
product_services_b
- الأقسام الأخرى التي عدّلها فوزي
- التقسيم المنطقي (الديناميكي)
- المجموعة bar_b
- التقسيم المنطقي (الديناميكي)
vendor_b
- القسم المنطقي (الديناميكي)
product_b
- الأقسام الأخرى التي عدّلها Bar
- التقسيم المنطقي (الديناميكي)
- مجموعة foo_b
يمكنك استخدام أداة lpdump
ضمن
system/extras/partition_tools
لتفريغ البيانات الوصفية على
جهازك. مثلاً:
lpdump --slot 0 /dev/block/by-name/system_a
lpdump --slot 1 /dev/block/by-name/system_b
إضافة تحديث لاحقًا
على الأجهزة التي تعمل بنظام التشغيل Android 9 والإصدارات الأقدم، يتم تثبيت برنامج التحديث عبر الهواء على الجهاز لا يتوافق مع تعيين الأقسام الديناميكية قبل التحديث. يتم إنشاء مجموعة إضافية من الرقع لكي يمكن تطبيق عملية الربط مباشرةً على الأقسام المادية الحالية.
ينشئ منشئ 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
) على الأجهزة المحظورة مباشرةً. التحديث
تدفقًا يشبه تحديث عملية مراجعة. اطّلِع على مقالة تعديل تحديث سابق للحصول على التفاصيل.
على سبيل المثال، لنفترض ما يلي:
- الفتحة "أ" هي الفتحة النشطة.
-
يحتوي
system_a
على البيانات الوصفية النشطة في الشريحة 0. -
يتم استخدام
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
في وقت التشغيل
إنشاء حِزم تحديثات
التحديثات المتزايدة عبر الهواء
عند إنشاء تحديثات OTA متزايدة للأجهزة التي تم تركيبها لاحقًا، تعتمد التحديثات
على ما إذا كان الإصدار الأساسي يحدِّد
PRODUCT_USE_DYNAMIC_PARTITIONS
و
PRODUCT_RETROFIT_DYNAMIC_PARTITIONS
أم لا.
-
إذا لم يحدد الإصدار الأساسي المتغيرات، فهذه
تحديث عملية المراجعة. تحتوي حزمة التحديث على التقسيم
ملف
super.img
وإيقاف خطوة ما بعد التثبيت. - إذا كانت البنية الأساسية تحدّد المتغيّرات، يكون ذلك مماثلاً لمحاولة إجراء تحديث عادي باستخدام أقسام ديناميكية. حزمة التحديث يحتوي على صور الأقسام المنطقية (الديناميكية). يمكن تفعيل خطوة ما بعد التثبيت.
التحديث عبر الهواء بالكامل
يتم إنشاء حِزمتَي تحديث كامل عبر الهواء للأجهزة التي تم تركيبها لاحقًا.
-
تحتوي السمة
$(PRODUCT)-ota-retrofit-$(TAG).zip
دائمًا على تقسيمsuper.img
وإيقاف خطوة ما بعد التثبيت لتحديث عملية المراجعة.-
يتم إنشاؤه باستخدام وسيطة إضافية
في
--retrofit_dynamic_partitions
نص برمجي واحد (ota_from_target_files
). - ويمكن تطبيقها على جميع الإصدارات.
-
يتم إنشاؤه باستخدام وسيطة إضافية
في
-
يحتوي
$(PRODUCT)-ota-$(TAG).zip
على صور منطقية للتحديثات المستقبلية.- تطبيق ذلك فقط للإصدارات ذات الأقسام الديناميكية مفعّلة. يمكنك الاطّلاع أدناه على تفاصيل حول فرض هذا الإجراء.
رفض التحديث غير المتوافق مع الإصدارات القديمة
لا تطبِّق حزمة OTA الكاملة العادية إلا على الإصدارات التي تم فيها تفعيل الأقسام الديناميكية. في حال تهيئة خادم "عبر الهواء" بشكل غير صحيح ويرسل هذه الحزم إلى الأجهزة التي تعمل بنظام التشغيل Android 9 أو أقل، يخفق تشغيل الأجهزة. لا يمكن لعميل OTA على الإصدار 9 من Android والإصدارات الأقدم التمييز بين حزمة 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
check_dynamic_partitions
كخطوة بعد التثبيت
يرفض التعديل.