على أجهزة Android الأقدم التي لا تحتوي على أقسام A / B ، تحتوي مساحة الفلاش عادةً على الأقسام التالية:
- حذاء طويل
- يحتوي على Linux kernel والحد الأدنى من نظام ملفات الجذر (يتم تحميله في قرص RAM). يقوم بتركيب النظام والأقسام الأخرى ويبدأ وقت التشغيل الموجود في قسم النظام.
- النظام
- يحتوي على تطبيقات النظام والمكتبات التي تحتوي على كود مصدر متاح في مشروع Android مفتوح المصدر (AOSP). أثناء التشغيل العادي ، يتم تثبيت هذا القسم للقراءة فقط ؛ تتغير محتوياته فقط أثناء تحديث OTA.
- بائع
- يحتوي على تطبيقات النظام والمكتبات التي لا تحتوي على كود مصدر متاح في مشروع Android Open Source Project (AOSP). أثناء التشغيل العادي ، يتم تثبيت هذا القسم للقراءة فقط ؛ تتغير محتوياته فقط أثناء تحديث OTA.
- بيانات المستخدم
- يخزن البيانات المحفوظة بواسطة التطبيقات المثبتة من قبل المستخدم ، وما إلى ذلك. لا يتأثر هذا القسم عادةً بعملية تحديث OTA.
- مخبأ
- منطقة الاحتفاظ المؤقتة التي يستخدمها عدد قليل من التطبيقات (يتطلب الوصول إلى هذا القسم أذونات تطبيق خاصة) ولتخزين حزم تحديث OTA التي تم تنزيلها. تستخدم البرامج الأخرى هذه المساحة مع توقع اختفاء الملفات في أي وقت. قد تؤدي بعض عمليات تثبيت حزم OTA إلى مسح هذا القسم تمامًا. تحتوي ذاكرة التخزين المؤقت أيضًا على سجلات التحديث من تحديث OTA.
- التعافي
- يحتوي على نظام Linux ثانٍ كامل ، بما في ذلك النواة وثنائي الاسترداد الخاص الذي يقرأ الحزمة ويستخدم محتوياتها لتحديث الأقسام الأخرى.
- متفرقات
- قسم صغير يستخدمه الاسترداد لإخفاء بعض المعلومات حول ما يفعله في حالة إعادة تشغيل الجهاز أثناء تطبيق حزمة OTA.
حياة تحديث OTA
يحتوي تحديث OTA النموذجي على الخطوات التالية:
- يقوم الجهاز بإجراء فحص منتظم لخوادم OTA ويتم إخطاره بتوفر التحديث ، بما في ذلك عنوان URL الخاص بحزمة التحديث وسلسلة وصف لإظهار المستخدم.
- قم بتحديث التنزيلات إلى ذاكرة التخزين المؤقت أو قسم البيانات ، ويتم التحقق من توقيع التشفير الخاص به مقابل الشهادات الموجودة في
/system/etc/security/otacerts.zip
. تتم مطالبة المستخدم بتثبيت التحديث. - يتم إعادة تشغيل الجهاز في وضع الاسترداد ، حيث يتم تمهيد النواة والنظام في قسم الاسترداد بدلاً من النواة في قسم التمهيد.
- تم بدء الاسترداد الثنائي بواسطة init. يعثر على وسيطات سطر الأوامر في
/cache/recovery/command
الذي يوجهه إلى الحزمة التي تم تنزيلها. - يتحقق الاسترداد من توقيع التشفير للحزمة مقابل المفاتيح العامة في
/res/keys
(جزء من قرص ذاكرة الوصول العشوائي الموجود في قسم الاسترداد). - يتم سحب البيانات من الحزمة واستخدامها لتحديث أقسام التمهيد و / أو النظام و / أو البائع حسب الضرورة. يحتوي أحد الملفات الجديدة المتبقية على قسم النظام على محتويات قسم الاسترداد الجديد.
- يتم إعادة تشغيل الجهاز بشكل طبيعي.
- يتم تحميل قسم التمهيد المحدث حديثًا ، ويتم تحميله ويبدأ في تنفيذ الثنائيات في قسم النظام المحدث حديثًا.
- كجزء من بدء التشغيل العادي ، يتحقق النظام من محتويات قسم الاسترداد مقابل المحتويات المطلوبة (التي تم تخزينها مسبقًا كملف في
/system
). إنها مختلفة ، لذلك يتم إعادة تحميل قسم الاسترداد بالمحتويات المطلوبة. (في عمليات التمهيد اللاحقة ، يحتوي قسم الاسترداد بالفعل على المحتويات الجديدة ، لذلك لا يلزم إعادة تحميل ملفات.)
اكتمل تحديث النظام! يمكن العثور على سجلات التحديث في /cache/recovery/last_log. #
.
حزم التحديث
حزمة التحديث هي ملف .zip
يحتوي على ملف ثنائي قابل للتنفيذ META-INF/com/google/android/update-binary
. بعد التحقق من التوقيع على الحزمة ، يستخرج recovery
هذا الثنائي إلى /tmp
ويقوم بتشغيل الثنائي ، ويمرر الوسيطات التالية:
- تحديث رقم إصدار API الثنائي . إذا تغيرت الوسيطات التي تم تمريرها إلى التحديث الثنائي ، فإن هذا الرقم يزداد.
- واصف ملف لأنبوب الأوامر . يمكن لبرنامج التحديث استخدام هذا الأنبوب لإرسال الأوامر مرة أخرى إلى ثنائي الاسترداد ، غالبًا لتغييرات واجهة المستخدم ، مثل الإشارة إلى التقدم للمستخدم.
- اسم ملف حزمة التحديث. ملف
.zip
.
يمكن لحزمة التحديث استخدام أي ثنائي مرتبط بشكل ثابت باعتباره برنامج التحديث الثنائي. تستخدم أدوات إنشاء حزمة OTA برنامج التحديث ( bootable/recovery/updater
) ، والذي يوفر لغة برمجة نصية بسيطة يمكنها القيام بالعديد من مهام التثبيت. يمكنك استبدال أي نظام ثنائي آخر يعمل على الجهاز.
للحصول على تفاصيل حول برنامج التحديث الثنائي ، وتحرير بناء الجملة ، والوظائف المضمنة ، راجع داخل حزم OTA .
الترحيل من الإصدارات السابقة
عند الترحيل من إصدار Android 2.3 / 3.0 / 4.0 ، يكون التغيير الرئيسي هو تحويل جميع الوظائف الخاصة بالجهاز من مجموعة وظائف C بأسماء محددة مسبقًا إلى كائنات C ++. يسرد الجدول التالي الوظائف القديمة والطرق الجديدة التي تخدم غرضًا مكافئًا تقريبًا:
وظيفة C. | طريقة C ++ |
---|---|
device_recovery_start () | الجهاز :: RecoveryStart () |
device_toggle_display () device_reboot_now () | RecoveryUI :: CheckKey () (أيضًا RecoveryUI :: IsKeyPressed ()) |
device_handle_key () | الجهاز :: HandleMenuKey () |
device_perform_action () أداء الجهاز | الجهاز :: InvokeMenuItem () |
device_wipe_data () | الجهاز :: WipeData () |
device_ui_init () | ScreenRecoveryUI :: Init () |
يجب أن يكون تحويل الوظائف القديمة إلى طرق جديدة واضحًا بشكل معقول. لا تنس إضافة وظيفة make_device()
الجديدة لإنشاء وإرجاع مثيل للفئة الفرعية الجديدة للجهاز.