يقدّم Android 10 نقطة التحقّق من بيانات المستخدمين (UDC)، والتي
تسمح لنظام التشغيل Android بالعودة إلى حالته السابقة عند إجراء بث من جهاز Android عبر شبكة غير سلكيّة.
تعذّر إجراء تحديث (OTA). باستخدام UDC، في حال تعذُّر تحديث الجهاز عبر الهواء، يمكن للجهاز
العودة بأمان إلى حالته السابقة. رغم
تحل تحديثات A/B هذه المشكلة في مرحلة التشغيل المبكر، العودة إلى الإصدارات السابقة
غير متاحة عند تعديل قسم بيانات المستخدمين (المثبت على /data
).
يتيح UDC للجهاز إمكانية إعادة قسم بيانات المستخدمين حتى بعد تم تعديله. وتحقق ميزة UDC ذلك من خلال إمكانات نقاط التحقق نظام ملفات، وهو طريقة تنفيذ بديلة عندما لا يدعم نظام الملفات نقاط التحقق والتكامل مع آلية A/B لبرنامج الإقلاع مع إتاحة التحديثات غير A/B، ودعم ربط إصدار المفتاح وإمكانية العودة إلى الإصدار السابق من المفتاح للوقاية منها.
التأثير في المستخدم
تحسّن ميزة UDC من تجربة تحديث OTA للمستخدمين نظرًا لخسارة عدد أقل من المستخدمين بياناتها عند فشل تحديث OTA. يمكن أن يؤدي ذلك إلى تقليل عدد مكالمات الدعم من المستخدمين الذين واجهوا مشاكل أثناء عملية التحديث ومع ذلك، عندما يتم عبر الهواء تعذّر التحديث، فقد يلاحظ المستخدمون إعادة تشغيل الجهاز عدة مرات.
آلية العمل
وظائف النقطة المرجعية في أنظمة الملفات المختلفة
بالنسبة إلى نظام ملفات F2FS، يضيف UDC وظيفة نقطة التحقق إلى التسليم النواة 4.20 Linux وتعيد نقلها إلى جميع النواة الشائعة التي تدعمها الأجهزة يعمل بنظام Android 10.
بالنسبة إلى أنظمة الملفات الأخرى، يستخدم UDC جهازًا افتراضيًا لمصمم خرائط الأجهزة يُسمى dm_bow
لوظائف النقاط المرجعية. يتم وضع "dm_bow
" بين الجهاز والملف.
. عند تثبيت أحد الأقسام، يتم إصدار عملية اقتطاع مما يؤدي إلى
أوامر القطع على جميع الأجزاء الحرة. يعترض dm_bow
عمليات القطع والاستخدام هذه
لإعداد قائمة منع مجانية. يتم بعد ذلك إرسال عمليات القراءة والكتابة إلى الجهاز.
غير معدل، ولكن قبل السماح بالكتابة، يتم نسخ البيانات اللازمة للاستعادة
قطعة تصل إلى كتلة مجانية.
عملية نقطة تفتيش
عند تثبيت قسم يحمل علامة checkpoint=fs/block
، يطلب نظام التشغيل Android.
restoreCheckpoint
على محرك الأقراص للسماح للجهاز باستعادة أي بيانات حالية
نقطة تفتيش. تستدعي الدالة init
بعد ذلك الدالة needsCheckpoint
لتحديد ما إذا كان
إذا كان الجهاز في حالة A/B من برنامج الإقلاع أو أنّه تم ضبط إعدادات التحديث مرة أخرى
العدد. إذا انطبقت إحدى الحالتين، يطلب Android من createCheckpoint
إضافة قاعدة تثبيت.
الإبلاغ أو إنشاء جهاز dm_bow
.
بعد تثبيت القسم، يتم استدعاء رمز نقطة التحقق لإصدار عمليات القطع.
وبعد ذلك تستمر عملية التمهيد كالمعتاد. في LOCKED_BOOT_COMPLETE
، Android
استدعاء commitCheckpoint
للالتزام بنقطة التفتيش الحالية والتحديث
ويستمر كالمعتاد.
إدارة مفاتيح لوحة المفاتيح
تُستخدَم مفاتيح Keymaster لتشفير الجهاز أو لأغراض أخرى. لإدارة هذه البيانات يؤخر Android مكالمات حذف المفاتيح إلى أن يتم تنفيذ النقطة المرجعية.
مراقبة السلامة
يتأكد البرنامج الخفي للصحة من توفر مساحة كافية على القرص لإنشاء
نقطة تفتيش. يقع البرنامج الخفي للصحة في
cp_healthDaemon
في Checkpoint.cpp
.
يشتمل البرنامج الخفي للصحة على السلوكيات التالية التي يمكن ضبطها:
ro.sys.cp_msleeptime
: تتحكّم هذه السياسة في عدد مرّات فحص الجهاز لاستخدام القرص.ro.sys.cp_min_free_bytes
: تتحكّم هذه السياسة في الحدّ الأدنى للقيمة التي يبحث عنها البرنامج الخفي للصحة.ro.sys.cp_commit_on_full
: يتحكّم هذا الإعداد في ما إذا كان البرنامج الخفي للصحة يعيد تشغيل الجهاز أو ينفّذ ويستمر الأمر عندما يكون القرص ممتلئًا.
واجهات برمجة تطبيقات نقطة التحقق
تستخدم ميزة Checkpoint APIs من قِبل ميزة UDC. بالنسبة إلى واجهات برمجة التطبيقات الأخرى التي يستخدمها UDC، راجع
IVold.aidl
قيمة نقطة startCheckpoint(إعادة المحاولة) فارغة
تنشئ نقطة مرجعية.
يستدعي إطار العمل هذه الطريقة عندما تكون جاهزة لبدء التحديث. تشير رسالة الأشكال البيانية
قبل إنشاء أنظمة الملفات المقيدة مثل بيانات المستخدمين
R/W مثبَّت بعد إعادة التشغيل. إذا كان عدد مرات إعادة المحاولة موجبًا، ستتعامل واجهة برمجة التطبيقات
تتبُّع محاولات إعادة المحاولة، وتطلب أداة التحديث الاتصال بـ needsRollback
لمعرفة ما إذا كانت عملية العودة إلى الحالة السابقة
يتطلب تحديثًا. إذا كان عدد مرات إعادة المحاولة هو -1
، تؤجل واجهة برمجة التطبيقات إلى A/B.
حكم برنامج الإقلاع.
لا يتم استدعاء هذه الطريقة عند إجراء تحديث أ/ب عادي.
تنفيذ التغييرات() باطلة
يجري تنفيذ التغييرات.
يطلب إطار العمل هذه الطريقة بعد إعادة التشغيل عندما تكون التغييرات جاهزة
الالتزام. ويتم استدعاء ذلك قبل البيانات (مثل الصور والفيديو والرسائل القصيرة SMS والخادم
استلام الاستلام) إلى بيانات المستخدم وقبل BootComplete
.
وفي حال عدم توفّر تعديل نشط مشروط، لن يكون لهذه الطريقة أي تأثير.
abortChanges()
فرض إعادة التشغيل والعودة إلى النقطة المرجعية. تجاهل جميع تعديلات بيانات المستخدمين منذ إعادة التشغيل الأولى.
يطلب إطار العمل هذه الطريقة بعد إعادة التشغيل ولكن قبل commitChanges
.
تقل retry_counter
عند استدعاء هذه الطريقة. إدخالات السجل هي
التي تم إنشاؤها.
قيمة منطقية بحاجة إلىRollback()
تحدِّد هذه السياسة ما إذا كانت العودة إلى الحالة السابقة مطلوبة.
على الأجهزة التي لا تتضمن نقاط فحص، يتم إرجاع مبلغ false
. على أجهزة نقاط التفتيش، يتم إرجاع مبلغ true
.
أثناء تشغيل غير نقطة تفتيش
تنفيذ رمز UDC
تطبيق المرجع
للحصول على مثال عن كيفية تنفيذ UDC، راجع dm-bow.c. للحصول على مستندات إضافية حول الميزة، راجع dm-bow.txt.
ضبط إعدادات الجهاز
في on fs
، في ملف init.hardware.rc
، تأكَّد من توفُّر ما يلي:
mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --early
في on late-fs
، في ملف init.hardware.rc
، تأكَّد من توفُّر ما يلي:
mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --late
في ملف fstab.hardware
، تأكّد من وضع علامة latemount
على /data
.
/dev/block/bootdevice/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier latemount,wait,check,fileencryption=ice,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,sysfs_path=/sys/devices/platform/soc/1d84000.ufshc,reservedsize=128M,checkpoint=fs
إضافة قسم للبيانات الوصفية
يتطلب UDC قسمًا للبيانات الوصفية لتخزين عدد مرات إعادة المحاولة من غير برنامج التحميل
المفاتيح. يمكنك إعداد قسم للبيانات الوصفية وتثبيته مبكرًا في /metadata
.
في ملف fstab.hardware
، تأكّد من وضع علامة earlymount
على /metadata
.
أو first_stage_mount
.
/dev/block/by-name/metadata /metadata ext4 noatime,nosuid,nodev,discard,sync wait,formattable,first_stage_mount
يجب تهيئة التقسيم على جميع الأصفار.
أضِف الأسطر التالية إلى BoardConfig.mk
:
BOARD_USES_METADATA_PARTITION := true BOARD_ROOT_EXTRA_FOLDERS := existing_folders metadata
تحديث الأنظمة
أنظمة F2FS
بالنسبة إلى الأنظمة التي تستخدِم F2FS لتنسيق البيانات، تأكَّد من أنّ إصدار F2FS الذي تستخدمه. ويدعم نقاط التفتيش. لمزيد من المعلومات، يُرجى الاطّلاع على وظائف نقطة التفتيش في أنظمة الملفات المختلفة.
أضِف علامة checkpoint=fs
إلى القسم <fs_mgr_flags>
في fstab
تم تثبيت الجهاز في /data
.
الأنظمة التي لا تتضمّن F2FS
بالنسبة إلى الأنظمة التي لا تعمل على بروتوكول F2FS، يجب تفعيل dm-bow
في إعدادات النواة.
أضِف علامة checkpoint=block
إلى القسم <fs_mgr_flags>
في fstab
تم تثبيت الجهاز في /data
.
الاطّلاع على السجلات
يتم إنشاء إدخالات السجلّ عند استدعاء واجهات برمجة تطبيقات نقطة التحقق.
التحقُّق
لاختبار تنفيذ UDC، يجب تشغيل مجموعة VtsKernelCheckpointTest
من VTS
الاختبار.