نشر GBL

توضّح هذه الصفحة كيفية نشر البرنامج الثنائي "محمّل التشغيل العام" (GBL).

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

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

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

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

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

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

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

  • تحميل الجهاز الافتراضي المحمي: يجب أن يحمّل البرنامج الثنائي بشكل صحيح البرامج الثابتة للجهاز الافتراضي المحمي التي تم التحقّق منها مسبقًا قبل نواة 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 المقابل. ننصحك بتوقيع النسخة المعتمدة من Google لـ GBL باستخدام حل التوقيع المفضّل لديك وتخزين الإصدار الناتج والبيانات الوصفية للتوقيع داخل قسم 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 seeds وRNG seeds
    • خدمات تخصيص الذاكرة لتخصيص ذاكرة مؤقتة لإجراء عمليات حسابية لـ 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

لإنشاء 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.

الإبلاغ عن الأخطاء والتواصل مع فريق محمّل التشغيل

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

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