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

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

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

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

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

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

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

  • لتشغيل قسم "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. يتم ضبط هذه السمة من خلال ملف تعريف الارتباط للأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android أو الإصدارات الأحدث.

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

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

مسار ضبط برنامج الإقلاع
الشكل 1. مسار ضبط برنامج الإقلاع
  1. حدِّد الخانة التي تريد المحاولة. لا تحاول تحميل خانة تحمل علامة slot-unbootable. يجب أن تكون هذه الخانة متسقة مع القيم التي تعرضها ميزة Fastboot (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 أو أمر التحكم في التشغيل HAL setActiveBootSlot، يجب أن يعدّل برنامج الإقلاع الفتحة الحالية ويمحو slot-unbootable وslot-successful ويعيد ضبط عدد مرات إعادة المحاولة (هذه هي الطريقة الوحيدة لمحو slot-unbootable).

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

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

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

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

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

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

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