نشر GBL

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

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

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

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

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

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

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

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

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

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

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

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

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

    • جهاز الحظر هو جهاز تخزين يمكن القراءة منه أو الكتابة إليه بوحدات من الحظر. وتشمل الأمثلة أجهزة UFS وeMMC وبطاقات SD.
    • يتم استخدام FAT لأنّه نظام ملفات منتشر ومباشر.
    • ننصحك باختيار نظام ملفات FAT المناسب لاحتياجاتك من FAT12 وFAT16 وFAT32.
    • ويجب توفّر كلا القسمين لإجراء التحديثات الهوائية (OTA) وعمليات الرجوع إلى الإصدار السابق خلال فترة توفّر إصدار Android هذا.
    • يبلغ حجم GBL حوالي 2 ميغابايت عند فك ضغطه. ويكفي حجم 4 ميغابايت لاستيعاب أي نمو بسبب الميزات الإضافية خلال السنوات السبع المقبلة.
    • في حال تعديل 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 ضمن قسم FAT32.

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

    • يجلب الأمر EFI_BLOCK_IO_PROTOCOL أو EFI_BLOCK_IO2_PROTOCOL صور بدء التشغيل وصور pvmfw من القرص
    • EFI_RNG_PROTOCOL لملفات تعريف حماية حزمة التكديس وبذور 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 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.

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

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

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