تنفيذ التحديثات عبر الهواء

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

للحصول على تفاصيل حول محتوى وحدة التخزين المحظورة في ذاكرة الفلاش المستخدَمة في الاتصالات من خلال وضع الاسترداد وبرنامج التشغيل، يُرجى الرجوع إلى bootable/recovery/bootloader_message/bootloader_message.h.

الأجهزة التي تتلقّى تحديثات من النوع أ/ب

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

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

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

  • لبدء تشغيل القسم system، يمرِّر برنامج التحميل القيمة التالية في سطر أوامر النواة: ro root=/dev/[node] rootwait init=/init.

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

دعم طبقة تجريد الأجهزة الخاصة بالتحكّم في التشغيل

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

التوافق مع الفترات الزمنية

يجب أن يتيح برنامج الإقلاع وظائف ذات صلة بالأقسام وفتحات التخزين، بما في ذلك:

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

  • تتم إعادة ضبط القيمة 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 المناسب وأدرِج المسار إلى قسم النظام الصحيح في سطر أوامر النواة.

  4. املأ المَعلمة slot_suffix في سطر أوامر النواة.

  5. التشغيل إذا لم يتم وضع علامة slot-successful، يجب إنقاص slot-retry-count.

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

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

الأجهزة التي لا تتضمّن تحديثات A/B

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

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

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

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

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

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