OTA لأجهزة A/B ذات الأقسام الديناميكية

يدعم 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

تحديث التدفق

  1. تهيئة بيانات تعريف القسم super .
    1. قم بتحميل نطاقات الأقسام الديناميكية المصدر من Metadata S. دع M هي البيانات التعريفية المحملة.
    2. قم بإزالة المجموعات والأقسام المستهدفة (على سبيل المثال، foo_t ، bar_t ) من M بحيث يحتوي M فقط على الأقسام والمجموعات ذات اللاحقة _s .
    3. قم بإضافة المجموعات والأقسام المستهدفة وفقًا لحقل dynamic_partition_metadata في بيان التحديث.
      يمكن العثور على حجم كل قسم في new_partition_info .
    4. اكتب M إلى البيانات الوصفية T.
    5. قم بتعيين الأقسام المضافة على مخطط الجهاز على أنها قابلة للكتابة.
  2. قم بتطبيق التحديث على الأجهزة المحظورة.
    1. إذا لزم الأمر، قم بتعيين الأقسام المصدر على مخطط الجهاز للقراءة فقط. يعد هذا ضروريًا للتحميل الجانبي لأنه لم يتم تعيين أقسام المصدر قبل التحديث.
    2. قم بتطبيق تحديث كامل أو تحديث دلتا على جميع الأجهزة المحظورة في الفتحة المستهدفة.
    3. قم بتحميل الأقسام لتشغيل البرنامج النصي بعد التثبيت، ثم قم بإلغاء تحميل الأقسام.
  3. قم بإلغاء تحديد الأقسام المستهدفة.

قبل التحديث وبعده، يجب أن تحتوي خصائص النظام التالية على القيم المناسبة:

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;
}