يدعم 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 للأقسام. في هذه الصفحة، تُسمى فتحات البيانات التعريفية Metadata S (المصدر) وMetadata T (الهدف). وبالمثل، تتم الإشارة إلى الأقسام باسم system_s
، و vendor_t
، وما إلى ذلك.
قبل الترقية، تحتوي بيانات التعريف S على المعلومات الخاصة بالأقسام الديناميكية المستخدمة (عادةً، system_s
، و vendor_s
، و product_s
، وما إلى ذلك). يقرأ النظام نطاقات هذه الأقسام أثناء التحديث، لذلك لا يمكن حذفها.
الأقسام تنتمي إلى مجموعات التحديث . راجع تنفيذ الأقسام الديناميكية للحصول على التفاصيل.
مثال على البيانات الوصفية على الجهاز هو كما يلي.
- البيانات الوصفية 0
- المجموعة
foo_a
-
system_a
التقسيم_أ - قسم
product_services_a
- تم تحديث الأقسام الأخرى بواسطة Foo
-
- شريط المجموعة_أ
-
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/super
lpdump --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 إلى البيانات الوصفية T.
- قم بتعيين الأقسام المضافة على مخطط الجهاز على أنها قابلة للكتابة.
- قم بتطبيق التحديث على الأجهزة المحظورة.
- إذا لزم الأمر، قم بتعيين الأقسام المصدر على مخطط الجهاز للقراءة فقط. يعد هذا ضروريًا للتحميل الجانبي لأنه لم يتم تعيين أقسام المصدر قبل التحديث.
- قم بتطبيق تحديث كامل أو تحديث دلتا على جميع الأجهزة المحظورة في الفتحة المستهدفة.
- قم بتحميل الأقسام لتشغيل البرنامج النصي بعد التثبيت، ثم قم بإلغاء تحميل الأقسام.
- قم بإلغاء تحديد الأقسام المستهدفة.
قبل التحديث وبعده، يجب أن تحتوي خصائص النظام التالية على القيم المناسبة:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
أضف مجموعات وأقسام إلى بيان التحديث
عند إجراء تحديث عبر الهواء على جهاز أ/ب مزود بأقسام ديناميكية، أو جهاز أ/ب الذي يضيف دعمًا للأقسام الديناميكية، فإنك تحتاج إلى إضافة مجموعات وأقسام إلى بيان التحديث. يعرض المقتطف أدناه معلومات إضافية حول بيان التحديث لدعم الأقسام الديناميكية. راجع 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; }