دعم تحديثات OTA

لدعم التحديثات عبر الأثير (OTA) ، يجب أن يكون برنامج تحميل التشغيل قادرًا على الوصول إلى قرص ذاكرة الوصول العشوائي للاسترداد أثناء التمهيد. إذا كان الجهاز يستخدم صورة استرداد AOSP غير معدلة، فإن أداة تحميل التشغيل تقرأ أول 32 بايت على القسم misc ؛ إذا كانت البيانات هناك تتطابق مع boot-recovery ، فسيقوم أداة تحميل التشغيل بالتمهيد في صورة recovery . تمكن هذه الطريقة أي أعمال استرداد معلقة (على سبيل المثال، تطبيق OTA أو إزالة البيانات) من الاستمرار في الاكتمال.

للحصول على تفاصيل حول محتوى الكتلة في الفلاش المستخدمة للاتصالات عن طريق الاسترداد ومحمل التشغيل، راجع bootable/recovery/bootloader_message/bootloader_message.h .

الأجهزة التي تحتوي على تحديثات A/B

لدعم تحديثات OTA على الأجهزة التي تستخدم تحديثات A/B ، تأكد من أن أداة تحميل تشغيل الجهاز تلبي المعايير التالية.

المعايير العامة

  • يجب أن تكون جميع الأقسام التي تم تحديثها من خلال OTA قابلة للتحديث أثناء تشغيل النظام الرئيسي (وعدم تحديثها أثناء الاسترداد).

  • لتمهيد قسم system ، يقوم محمل الإقلاع بتمرير القيمة التالية في سطر أوامر kernel: ro root=/dev/[node] rootwait init=/init .

  • تقع على عاتق إطار عمل Android مسؤولية استدعاء markBootSuccessful من HAL. يجب ألا يضع برنامج تحميل التشغيل علامة على أي قسم على أنه تم تمهيده بنجاح.

دعم للتحكم في التمهيد HAL

يجب أن يدعم أداة تحميل التشغيل boot_control HAL كما هو محدد في hardware/libhardware/include/hardware/boot_control.h ). يستعلم المُحدِّث عن التحكم في التمهيد HAL ، ويحدِّث فتحة التمهيد غير المستخدمة حاليًا، ويغير الفتحة النشطة باستخدام HAL، ويعيد التشغيل في نظام التشغيل المحدث. للحصول على التفاصيل، راجع تنفيذ التحكم في التمهيد HAL .

دعم فتحات

يجب أن يدعم برنامج تحميل التشغيل الوظائف المتعلقة بالأقسام والفتحات، بما في ذلك:

  • يجب أن تتضمن أسماء الأقسام لاحقة تحدد الأقسام التي تنتمي إلى فتحة معينة في أداة تحميل التشغيل. لكل قسم من هذا القبيل، هناك متغير مطابق has-slot: partition base name بقيمة yes . تتم تسمية الفتحات أبجديًا مثل a، وb، وc، وما إلى ذلك، بما يتوافق مع الأقسام ذات اللاحقة _a ، _b ، _c ، وما إلى ذلك. ويجب على أداة تحميل التشغيل إبلاغ نظام التشغيل بالفتحة التي تم تمهيدها باستخدام خاصية سطر الأوامر androidboot.slot_suffix . يتم تعيين هذه الخاصية من خلال bootconfig للأجهزة التي تعمل بنظام التشغيل Android 12 أو الإصدارات الأحدث.

  • يتم إعادة تعيين قيمة slot-retry-count إلى قيمة موجبة (عادة 3 )، إما عن طريق التحكم في التمهيد HAL من خلال رد الاتصال setActiveBootSlot أو من خلال الأمر fastboot set_active . عند تعديل قسم يمثل جزءًا من فتحة، يقوم برنامج تحميل التشغيل بمسح "تم التمهيد بنجاح" وإعادة تعيين عدد مرات إعادة المحاولة للفتحة.

يجب أن يحدد برنامج تحميل التشغيل أيضًا الفتحة التي سيتم تحميلها. يوضح الشكل مثالاً لعملية اتخاذ القرار.

تدفق فتحات أداة تحميل التشغيل
الشكل 1. تدفق فتحات أداة تحميل التشغيل
  1. تحديد أي فتحة لمحاولة. لا تحاول تحميل فتحة تم وضع علامة على slot-unbootable . يجب أن تكون هذه الفتحة متوافقة مع القيم التي يتم إرجاعها بواسطة fastboot، ويشار إليها بالفتحة الحالية.

  2. إذا لم يتم وضع علامة على الفتحة الحالية على أنها slot-successful ولها slot-retry-count = 0 ، فقم بوضع علامة على الفتحة الحالية على أنها slot-unbootable . ثم حدد فتحة مختلفة لم يتم وضع علامة " unbootable عليها وتم وضع علامة slot-successful عليها؛ هذه الفتحة هي الآن الفتحة المحددة. في حالة عدم توفر فتحة حالية، قم بالتمهيد إلى الاسترداد أو قم بعرض رسالة خطأ ذات معنى للمستخدم.

  3. حدد ملف boot.img المناسب وقم بتضمين المسار لتصحيح قسم النظام في سطر أوامر kernel.

  4. قم بملء معلمة slot_suffix لسطر أوامر kernel.

  5. حذاء طويل. إذا لم يتم وضع علامة على slot-successful ، فقم بتقليل slot-retry-count .

تحدد الأداة المساعدة fastboot القسم الذي سيتم وميضه عند تشغيل أي أوامر فلاش. على سبيل المثال، تشغيل الأمر fastboot flash system system.img يستعلم أولاً عن متغير current-slot ثم يسلسل النتيجة إلى النظام لإنشاء اسم القسم الذي يجب وميضه ( system_a ، system_b ، وما إلى ذلك).

عند تعيين الفتحة الحالية باستخدام الأمر fastboot set_active أو أمر التحكم في التمهيد HAL setActiveBootSlot ، يجب على أداة تحميل التشغيل تحديث الفتحة الحالية، ومسح slot-unbootable slot-successful ، وإعادة تعيين عدد مرات إعادة المحاولة (هذه هي الطريقة الوحيدة لمسح slot-unbootable ).

الأجهزة التي لا تحتوي على تحديثات A/B

لدعم تحديثات OTA على الأجهزة التي لا تستخدم تحديثات A/B (راجع الأجهزة غير القابلة للتحديث A/B )، تأكد من أن أداة تحميل تشغيل الجهاز تستوفي المعايير التالية.

  • يجب أن يحتوي قسم recovery على صورة قادرة على قراءة صورة النظام من بعض الأقسام المدعومة ( cache ، userdata ) وكتابتها إلى قسم system .

  • يجب أن يدعم برنامج تحميل التشغيل إعادة التشغيل مباشرة في وضع الاسترداد.

  • إذا كانت تحديثات صورة الراديو مدعومة، فمن المفترض أن يكون قسم recovery قادرًا أيضًا على تحديث الراديو. ويمكن تحقيق ذلك بإحدى الطريقتين:

    • يقوم برنامج Bootloader بوميض الراديو. في هذه الحالة، من المفترض أن يكون من الممكن إعادة التشغيل من قسم الاسترداد مرة أخرى إلى أداة تحميل التشغيل لإكمال التحديث.

    • تومض صورة الاسترداد على الراديو. يمكن توفير هذه الوظيفة كمكتبة ثنائية أو أداة مساعدة.