توضّح هذه الصفحة كيفية نشر ملف Generic Bootloader (GBL) الثنائي.
متطلبات البرامج الثابتة الخاصة بعملية التشغيل
لاستخدام GBL، يجب أن يستوفي برنامج التشغيل الثابت لعملية بدء التشغيل المتطلبات التالية:
التوافق مع "الواجهة الموحّدة للبرامج الثابتة الموسّعة" (UEFI) يجب أن تنفّذ البرامج الثابتة بروتوكولات UEFI المطلوبة وتستخدمها. يجب أن يسمح البرنامج الثابت أيضًا بإضافات خاصة بالمورّد باستخدام بروتوكولات UEFI المحدّدة.
الأمان. يجب أن تنفّذ البرامج الثابتة جميع متطلبات ميزة "التشغيل المتحقَّق منه" في Android (AVB)، ما يتيح لـ GBL مصادقة صور التشغيل.
أوضاع التشغيل يجب أن يكون الملف الثنائي قادرًا على التعامل مع أوضاع التشغيل المختلفة، مثل التشغيل العادي والتشغيل في وضع الاسترداد والتشغيل السريع.
التقسيم الديناميكي يجب أن تنفّذ البرامج الثابتة الخاصة بعملية التشغيل منطق اختيار الفتحة لكي تتوافق مع قراءة فتحة التشغيل الصحيحة في نظام A/B وتكون متوافقة مع الأقسام الديناميكية وبيانات المستخدم في القسم super.
إعدادات نظام التشغيل يجب أن يكون البرنامج الثابت قادرًا على تعديل سطر الأوامر الخاص بالنواة وشجرة الأجهزة (DTB) وإعدادات bootconfig باستخدام التخصيصات التي يوفّرها المصنّع الأصلي للجهاز (OEM) واللازمة لتشغيل الجهاز.
جارٍ تحميل Protected VM. يجب أن يتم تحميل البرامج الثابتة للأجهزة الافتراضية المحمية التي تم التحقّق من صحتها مسبقًا بشكل صحيح قبل تحميل نواة Android في حال توفّر أجهزة افتراضية محمية. لمزيد من المعلومات، يُرجى الاطّلاع على تسلسل بدء التشغيل في Microdroid.
إدارة الذاكرة يجب أن يتيح برنامج التشغيل الثابت للتشغيل واجهة برمجة التطبيقات الخاصة بتخصيص ذاكرة UEFI.
متطلبات التنفيذ
لكي يتم تنفيذ GBL بشكل صحيح على جهازك، يجب استيفاء المتطلبات التالية:
يجب أن يحتوي جهازك على قسمَين بتنسيق FAT32 بحجم 4 ميغابايت (أو أكبر) يحملان الاسمَين
android_esp_aوandroid_esp_bعلى جهاز تخزين كتلي يمكن الوصول إليه من خلال نظام SOC.- جهاز الحظر هو جهاز تخزين يمكن القراءة منه أو الكتابة إليه بوحدات من الحظر. وتشمل الأمثلة أجهزة UFS وeMMC وبطاقات SD.
- يتم استخدام FAT32 لأنّه نظام ملفات منتشر ومباشر.
- ويجب توفُّر كلا القسمين لإجراء التحديثات وعمليات الرجوع إلى الإصدار السابق عبر الهواء (OTA) خلال فترة توفُّر إصدار Android هذا.
- يبلغ حجم ملف GBL حوالي 2 ميغابايت غير مضغوط. ويكفي حجم 4 ميغابايت لاستيعاب أي نمو بسبب الميزات الإضافية خلال السنوات السبع المقبلة.
- في حال تعديل GBL، عليك تعديل قسم
android_esp_${SLOT_SUFFIX}بأكمله. لا يتيح نظام Android OTA إجراء تحديثات خاصة بـ GBL فقط.
يجب أن يكون إصدار 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لملفات تعريف 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 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، اتّبِع الخطوات التالية:
تأكَّد من تثبيت أداة repo وBazel bootstrap:
sudo apt install repo bazel-bootstrapابدأ بتهيئة الدليل الحالي للتحكّم في المصدر باستخدام ملف البيان
uefi-gbl-mainline:repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline repo sync -j16أنشئ تطبيق UEFI:
tools/bazel run //bootable/libbootloader:gbl_efi_dist
اختبار GBL على "جهاز Android الافتراضي"
نفِّذ 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.