نشر GBL

توضّح هذه الصفحة كيفية نشر ملف Generic Bootloader (GBL) الثنائي.

متطلبات البرامج الثابتة الخاصة بعملية التشغيل

لاستخدام GBL، يجب أن يستوفي برنامج التشغيل الثابت لعملية الإقلاع المتطلبات التالية:

  • التوافق مع "الواجهة الموحّدة للبرامج الثابتة الموسّعة" (UEFI) يجب أن تنفّذ البرامج الثابتة بروتوكولات UEFI المطلوبة وتستخدمها. يجب أن يسمح البرنامج الثابت أيضًا باستخدام إضافات خاصة بالمورّد باستخدام بروتوكولات UEFI المحدّدة.

  • الأمان. يجب أن تنفّذ البرامج الثابتة جميع متطلبات ميزة "التشغيل المتحقَّق منه" في Android (AVB)، ما يتيح لـ GBL مصادقة صور التشغيل.

  • أوضاع التشغيل يجب أن يكون الملف الثنائي قادرًا على التعامل مع أوضاع التشغيل المختلفة، مثل التشغيل العادي والتشغيل في وضع الاسترداد والتشغيل السريع.

  • التقسيم الديناميكي يجب أن تنفّذ البرامج الثابتة الخاصة بالتمهيد منطق اختيار الفتحة لكي تتوافق مع قراءة فتحة التمهيد الصحيحة في عملية التمهيد بنظام التشغيل A/B، وأن تكون متوافقة مع الأقسام الديناميكية وبيانات المستخدم في القسم الفائق.

  • إعدادات نظام التشغيل يجب أن يكون البرنامج الثابت قادرًا على تعديل سطر الأوامر الخاص بالنواة وشجرة الأجهزة (DTB) وإعدادات bootconfig باستخدام التخصيصات التي يجريها المصنّع الأصلي للجهاز (OEM) واللازمة لتشغيل الجهاز.

  • جارٍ تحميل Protected VM. يجب أن يتم تحميل البرامج الثابتة للأجهزة الافتراضية المحمية التي تم التحقّق من صحتها مسبقًا بشكل صحيح قبل تحميل نواة Android في حال توفّر أجهزة افتراضية محمية. لمزيد من المعلومات، يُرجى الاطّلاع على تسلسل التشغيل في Microdroid.

  • إدارة الذاكرة يجب أن يتيح برنامج التشغيل الثابت للتمهيد استخدام واجهة برمجة التطبيقات UEFI لتخصيص الذاكرة.

متطلبات التنفيذ

لكي يتم تنفيذ GBL بشكل صحيح على جهازك، يجب استيفاء المتطلبات التالية:

  • يجب أن يحتوي جهازك على قسمَين بتنسيق FAT بحجم 8 ميغابايت (أو أكبر) يحملان الاسمَين android_esp_a وandroid_esp_b على جهاز تخزين كتلي يمكن الوصول إليه من خلال نظام SOC.

    • جهاز الحظر هو جهاز تخزين يمكن القراءة منه أو الكتابة إليه بوحدات من الحظر. وتشمل الأمثلة أجهزة UFS وeMMC وبطاقات SD.
    • يتم استخدام FAT لأنّه نظام ملفات منتشر وبسيط.
    • ننصحك باختيار نظام ملفات FAT المناسب لاحتياجاتك من FAT12 وFAT16 وFAT32.
    • ويجب توفُّر كلا القسمَين لإجراء التحديثات وعمليات الرجوع إلى الإصدار السابق عبر الهواء (OTA) طوال فترة توفُّر إصدار Android هذا.
    • يبلغ حجم ملف GBL حوالي 2 ميغابايت عند فك ضغطه. ويكفي حجم 8 ميغابايت لاستيعاب أي نمو ناتج عن الميزات الإضافية خلال السنوات السبع المقبلة.
    • في حال تعديل GBL، عليك تعديل قسم android_esp_${SLOT_SUFFIX} بأكمله. لا يتيح Android OTA إجراء تحديثات تتضمّن GBL فقط.
    • يجب أن يتوافق المعرّف الفريد العام لنوع القسم المستخدَم لكلا قسمَي FAT مع المعرّف الفريد العام لقسم نظام EFI C12A7328-F81F-11D2-BA4B-00A0C93EC93B.
  • يجب أن يكون إصدار GBL الذي تم نشره هو أحدث إصدار علني معتمد من فرع إصدار GBL المعنيّ. ننصحك بتوقيع نسخة GBL المعتمدة من Google باستخدام حل التوقيع المفضّل لديك وتخزين البيانات الوصفية للإنشاء والتوقيع الناتجَين داخل القسم android_esp_${SLOT_SUFFIX}.

    • يجب أن يترك توقيع المصنّع الأصلي للجهاز شهادة GBL بدون تغيير، ويجب ألا يتم تطبيق أي عنوان على الملف الثنائي.
    • يُستخدم إصدار GBL للمطوّرين لأغراض التطوير وتصحيح الأخطاء فقط. لا يمكن شحن الإصدار ولن تتم المصادقة عليه من قِبل Google.
  • يجب تخزين ملف GBL في المسار /EFI/BOOT/BOOTAA64.EFI ضمن قسم FAT.

  • تنفيذ بروتوكولات UEFI وAndroid UEFI المطلوبة لإتاحة GBL يتعذّر تشغيل إصدار GBL المخصّص للإنتاج إذا لم تكن هذه الواجهات متوافقة.

    • يجلب الأمران EFI_BLOCK_IO_PROTOCOL أو EFI_BLOCK_IO2_PROTOCOL صور بدء التشغيل وصور pvmfw من القرص
    • EFI_RNG_PROTOCOL لملفات تعريف stack canaries وبذور KASLR وبذور RNG
    • خدمات تخصيص الذاكرة لتخصيص ذاكرة مؤقتة لإجراء عمليات حسابية خاصة بـ AVB وDICE
    • توفّر EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL خيارًا لتنفيذ عمليات غير نشطة، ولكن تسجّل GBL البيانات من خلال هذا البروتوكول تلقائيًا.
    • يصل GBL_EFI_AVB_PROTOCOL إلى المفاتيح العامة وفهارس الرجوع إلى الإصدارات السابقة للتحقّق من صور التشغيل
    • يحصل GBL_EFI_BOOT_CONTROL_PROTOCOL على البيانات الوصفية الخاصة بفتحات التخزين وأسباب إعادة التشغيل من البرامج الثابتة
    • GBL_EFI_AVF_PROTOCOL تنشئ بيانات إعدادات AVF من سلسلة DICE
  • يجب أن توفّر البرامج الثابتة متغيرات UEFI إلى GBL. يجب ضبط هذه المتغيّرات باستخدام القيمة GBL_EFI_VENDOR_GUID 5a6d92f3-a2d0-4083-91a1-a50f6c3d9830.

    • يجب ضبط gbl_fw_api_level على مستوى واجهة برمجة التطبيقات لبرنامج الجهاز الأساسي للنظام الأساسي، ما يشير إلى مستوى واجهة برمجة التطبيقات لبرنامج المورّد. يجب أن تكون قيمة هذا المتغيّر هي نفسها قيمة سمة النظام ro.board.api_level.
  • بروتوكولات UEFI التي يُنصح بها بشدة عند دمج GBL موضّحة في بروتوكولات GBL UEFI.

توافق البرامج الثابتة الخاصة بالتشغيل

مع إجراء التعديلات اللازمة لتلبية المتطلبات الواردة في القسم السابق، تتوافق عمليات تنفيذ البرامج الثابتة التالية لواجهة UEFI مع GBL:

  • EDK2 (Tianocore) ‫EDK2 هو تطبيق شائع مفتوح المصدر لواجهة UEFI. يجب توفير دعم GBL لأدوات تحميل التشغيل المستندة إلى EDK2، ويتوفّر دعم UEFI حاليًا.
  • U-Boot مشروع مرن ومفتوح المصدر وشائع الاستخدام لبرنامج إقلاع، وهو يكتسب التوافق مع واجهة UEFI لاستخدامه في GBL.
  • LittleKernel (LK) برنامج تحميل إقلاع مفتوح المصدر تستخدمه بعض الشركات المصنّعة.

تشغيل GBL

يمكنك الحصول على برنامج ثنائي GBL مُعدّ مسبقًا لتشغيله أو إنشاء إصدار خاص بك وتشغيله.

الحصول على ملف GBL الثنائي وتشغيله

يتم توزيع GBL كبرنامج ثنائي واحد لتطبيق UEFI. يمكنك تحديث هذا الملف الثنائي بشكل مستقل عن البرامج الثابتة الأساسية للجهاز باستخدام آلية التحديث العادية في Android.

اعتبارًا من Android 16، إذا كنت ستطرح جهازًا يستند إلى شريحة تعريف ARM-64، ننصحك بشدة بتفعيل أحدث إصدار معتمَد من Google لـ GBL ودمجه في سلسلة التشغيل.

لتصحيح خطأ في إصدار GBL هذا، يمكنك تنزيل أي من هذه العناصر للمساعدة في تصحيح الأخطاء:

  • يستخدم جدول الرموز برنامج تصحيح أخطاء للأجهزة بالإضافة إلى GDB في إصدار GBL المعتمد من Google.
  • يُجري ملف البيان تغييرات على الإصدار الموقّع من خلال إعادة إنشاء إصدار GBL هذا من المصدر باستخدام repo.
  • ويكون إصدار المطوّرين من GBL مفيدًا في عملية التشغيل أو تصحيح الأخطاء البسيط لمشكلة تؤثر في إصدار الإنتاج الموقّع.
  • يفيد جدول الرموز في إصدار GBL المخصّص للمطوّرين مع أداة تصحيح أخطاء الأجهزة وGDB.

للاطّلاع على الرموز الثنائية والرموز المعتمَدة في جميع الإصدارات، راجِع إصدارات GBL.

إنشاء GBL

لإنشاء GBL، اتّبِع الخطوات التالية:

  1. تأكَّد من تثبيت أداة repo وBazel bootstrap:

    sudo apt install repo bazel-bootstrap
    
  2. ابدأ تهيئة الدليل الحالي للتحكّم في المصدر باستخدام ملف البيان uefi-gbl-mainline:

    repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline
    repo sync -j16
    
  3. إنشاء تطبيق UEFI:

    tools/bazel run //bootable/libbootloader:gbl_efi_dist
    

اختبار GBL على الجهاز الافتراضي المتوافق مع Android

  1. نفِّذ GBL داخل Cuttlefish:

    cvd start --android_efi_loader=path_to_the_UEFI_app ...
    

    بدلاً من تشغيل Android مباشرةً، يستخدم الأمر cvd start تطبيق UEFI لتشغيل Android.

تسجيل الأخطاء والتواصل مع فريق برنامج Bootloader

للإبلاغ عن خطأ في GBL، انتقِل إلى مكوّن Android Generic Bootloader في Buganizer.

إذا كانت لديك أسئلة، يُرجى التواصل مع فريق GBL وإرسال رسالة إلكترونية إلى android-gbl@google.com.