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

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

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

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

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

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

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

  • لتشغيل قسم system، يُرسِل أداة تحميل البرامج القيمة التالية في سطر أوامر ro root=/dev/[node] rootwait init=/init: 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 للأجهزة التي يتم تشغيلها باستخدام الإصدار 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 في سطر أوامر kernel.

  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 قادرًا أيضًا على تحديث الراديو. يمكن تنفيذ ذلك بطريقتَين:

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

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