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

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

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

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

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

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

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

  • لبدء تشغيل القسم 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

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

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

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

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

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

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