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

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

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

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

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

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

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

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

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

دعم HAL للتحكّم في عملية التشغيل

يجب أن يتوافق برنامج الإقلاع مع طبقة تجريد الأجهزة (HAL) boot_control كما هو محدّد في 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 للأجهزة التي يتم تشغيلها باستخدام الإصدار 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 المناسب وأدرِج المسار إلى القسم الصحيح لنظام التشغيل في سطر أوامر kernel.

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

  5. التشغيل إذا لم يتم وضع علامة slot-successful، قلِّل القيمة slot-retry-count.

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

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

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

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

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

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

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

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

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