يتوافق نظام التشغيل Android 10 مع الأقسام الديناميكية، وهو نظام تقسيم لمساحة المستخدم يتيح إنشاء الأقسام وتغيير حجمها وإزالتها أثناء إجراء التحديثات عبر الهواء (OTA).
توضّح هذه الصفحة كيفية تغيير حجم الأقسام الديناميكية أثناء التحديث لأجهزة A/B التي تم إطلاقها مع إمكانية استخدام الأقسام الديناميكية، وذلك للأجهزة التي تعمل بنظام التشغيل Android 9 والإصدارات الأقدم.
الخلفية
يتوفّر قسم super واحد على الجهاز. هذا القسم غير لاحقته بفتحة. يجب أن يكون جهاز الحظر موجودًا مع الإدخال blk_device الخاص بـ /misc في fstab. على سبيل المثال، إذا كان ملف fstab يتضمّن ما يلي:
/dev/block/bootdevice/by-name/misc /misc # Other fields
بعد ذلك، يجب أن يكون جهاز الحظر الخاص بـ super متوفّرًا في /dev/block/bootdevice/by-name/super، ولكن ليس من الضروري إدراج قسم super في ملف fstab.
في القسم super، يتوفّر خانتا بيانات وصفية، مرقّمتان بـ 0 و1، وهما تتوافقان مع خانات اختبار A/B للأقسام. في هذه الصفحة، تُسمى خانات البيانات الوصفية "البيانات الوصفية S (المصدر)" و"البيانات الوصفية T (الهدف)". وبالمثل، يُشار إلى الأقسام باسم system_s وvendor_t وما إلى ذلك.
قبل الترقية، يحتوي Metadata S على معلومات الأقسام الديناميكية المستخدَمة (عادةً، system_s وvendor_s وproduct_s وما إلى ذلك). يقرأ النظام نطاقات هذه الأقسام أثناء التحديث، لذا لا يمكن حذفها.
تنتمي الأقسام إلى مجموعات التحديث. لمزيد من التفاصيل، يُرجى الاطّلاع على تنفيذ الأقسام الديناميكية.
في ما يلي مثال على البيانات الوصفية على جهاز.
- البيانات الوصفية 0
- المجموعة
foo_a- القسم
system_a - القسم
product_services_a - الأقسام الأخرى التي عدّلها Foo
- القسم
- Group bar_a
- القسم
vendor_a - القسم
product_a - الأقسام الأخرى التي عدّلها Bar
- القسم
- المجموعة
foo_b(متبقية من عملية ترقية سابقة) - المجموعة
bar_b(متبقية من عملية ترقية سابقة)
- المجموعة
- البيانات الوصفية 1
- المجموعة
foo_a(متبقية من عملية ترقية سابقة) - المجموعة
bar_a(متبقية من عملية ترقية سابقة) - المجموعة
foo_b- القسم
system_b - القسم
product_services_b - الأقسام الأخرى التي عدّلها Foo
- القسم
- المجموعة
bar_b- القسم
vendor_b - القسم
product_b - الأقسام الأخرى التي عدّلها Bar
- القسم
- المجموعة
يمكنك استخدام الأداة lpdump (الرمز المصدري ضمن system/extras/partition_tools) لتفريغ البيانات الوصفية على جهازك. مثلاً:
lpdump --slot 0 /dev/block/bootdevice/by-name/superlpdump --slot 1 /dev/block/bootdevice/by-name/super
مسار التحديث
- ابدأ بتهيئة البيانات الوصفية للقسم
super.- حمِّل نطاقات الأقسام الديناميكية المصدر من خدمة Metadata S. لنفترض أنّ M هي البيانات الوصفية التي تم تحميلها.
-
أزِل المجموعات المستهدَفة والأقسام (مثل
foo_tوbar_t) من M، ليحتوي M على الأقسام والمجموعات التي تتضمّن اللاحقة_sفقط. -
أضِف المجموعات المستهدَفة والأقسام وفقًا للحقل
dynamic_partition_metadataفي بيان التحديث.
يمكنك الاطّلاع على حجم كل قسم فيnew_partition_info. - استبدِل M بـ Metadata T.
- ربط الأقسام المُضافة على أداة ربط الأجهزة على أنّها قابلة للكتابة
- طبِّق التحديث على الأجهزة المحظورة.
- إذا لزم الأمر، اربط أقسام المصدر في أداة ربط الأجهزة على أنّها للقراءة فقط. وهذا ضروري للتثبيت الجانبي لأنّه لا يتم ربط أقسام المصدر قبل التحديث.
- تطبيق تحديث كامل أو جزئي على جميع أجهزة الحظر في الفتحة المستهدَفة
- ثبِّت الأقسام لتشغيل البرنامج النصي بعد التثبيت، ثم ألغِ تثبيت الأقسام.
- إلغاء ربط الأقسام المستهدَفة
قبل التحديث وبعده، يجب أن تتضمّن خصائص النظام التالية القيم المحدّدة:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
إضافة مجموعات وأقسام إلى بيان التحديث
عند إجراء تحديث عبر الأثير (OTA) على جهاز A/B يتضمّن أقسامًا ديناميكية، أو على جهاز A/B تتم إضافة إمكانية استخدام الأقسام الديناميكية إليه، عليك إضافة مجموعات وأقسام إلى بيان التحديث. تعرض المقتطفة أدناه معلومات إضافية حول بيان التحديث لدعم الأقسام الديناميكية. يمكنك الاطّلاع على update_metadata.proto للحصول على مستندات تفصيلية حول كل حقل.
message DeltaArchiveManifest {
optional DynamicPartitionMetadata dynamic_partition_metadata;
}
message DynamicPartitionMetadata {
repeated DynamicPartitionGroup groups;
}
message DynamicPartitionGroup {
required string name;
optional uint64 size; // maximum size of group
repeated string partition_names;
}