استقرار GBL

این صفحه نحوه استقرار باینری «بارکننده عمومی» (GBL) را توضیح می‌دهد.

الزامات سفت‌افزار راه‌اندازی

برای استفاده از GBL، سفت‌افزار راه‌اندازی باید الزامات زیر را برآورده کند:

  • مطابقت با «میانای سفت‌افزار توسعه‌پذیر یکپارچه» (UEFI). سفت‌افزار باید پروتکل‌های UEFI موردنیاز را پیاده‌سازی و استفاده کند. میان‌افزار همچنین باید امکان استفاده از افزونه‌های مختص فروشنده را بااستفاده از پروتکل‌های UEFI تعریف‌شده فراهم کند.

  • امنیت ضربه بزنید. میان‌افزار باید همه الزامات «راه‌اندازی درستی‌سنجی‌شده Android» (AVB) را پیاده‌سازی کند تا GBL بتواند تصاویر راه‌اندازی را اصالت‌سنجی کند.

  • حالت‌های راه‌اندازی. باینری باید بتواند حالت‌های مختلف راه‌اندازی را مدیریت کند، مانند راه‌اندازی عادی، راه‌اندازی بازیابی، و راه‌اندازی سریع.

  • بخش‌بندی پویا. سفت‌افزار راه‌اندازی باید منطق انتخاب شکاف را پیاده‌سازی کند تا از خواندن شکاف راه‌اندازی A/B صحیح پشتیبانی کند و با پارتیشن‌های پویا و userdata در super سازگار باشد.

  • پیکربندی سیستم‌عامل. میان‌افزار باید بتواند خط فرمان هسته، درخت دستگاه (DTB)، و bootconfig را با سفارشی‌سازی‌های سازنده اصلی محصول موردنیاز برای راه‌اندازی دستگاه تغییر دهد.

  • درحال بار کردن ماشین مجازی محافظت‌شده. در حضور ماشین‌های مجازی محافظت‌شده، پیش‌از هسته Android، میان‌افزار ماشین مجازی محافظت‌شده ازپیش درستی‌سنجی‌شده باید به‌درستی بار شود. برای اطلاعات بیشتر، ترتیب راه‌اندازی Microdroid را ببینید.

  • مدیریت حافظه. سفت‌افزار راه‌اندازی باید از API تخصیص حافظه UEFI پشتیبانی کند.

الزامات پیاده‌سازی

برای اینکه GBL به‌درستی در دستگاهتان پیاده‌سازی شود، باید شرایط زیر را داشته باشید:

  • دستگاهتان باید دو پارتیشن FAT داشته باشد که ۸ مگابایت (یا بزرگ‌تر) باشند و android_esp_a و android_esp_b نام‌گذاری شده باشند و در دستگاه بلوکی قابل‌دسترس توسط SOC باشند.

    • دستگاه بلوکی دستگاه ذخیره‌سازی است که می‌توان آن را در واحدهای بلوکی خواند یا در آن نوشت. دستگاه‌های UFS،‏ eMMC، و کارت SD ازجمله این موارد هستند.
    • از FAT استفاده می‌شود زیرا یک سیستم فایل فراگیر و ساده است.
    • توصیه می‌کنیم سیستم فایل FAT مناسب نیازهایتان را از بین FAT12،‏ FAT16، و FAT32 انتخاب کنید.
    • هر دو پارتیشن برای به‌روزرسانی‌های بی‌سیم (OTA) و بازگرداندن در طول دوره پشتیبانی این نسخه Android لازم است.
    • GBL تقریباً ۲ مگابایت فشرده‌نشده است. ‫۸ مگابایت برای درنظر گرفتن هرگونه رشد ناشی از ویژگی‌های اضافی در هفت سال آینده کافی است.
    • درصورت به‌روزرسانی GBL، باید کل بخش android_esp_${SLOT_SUFFIX} را به‌روز کنید. به‌روزرسانی فقط GBL توسط Android OTA پشتیبانی نمی‌شود.
    • GUID نوع پارتیشن که برای هر دو پارتیشن FAT استفاده می‌شود باید با GUID پارتیشن سیستم EFI C12A7328-F81F-11D2-BA4B-00A0C93EC93B مطابقت داشته باشد.
  • نسخه GBL مستقرشده باید جدیدترین ساخت تولید گواهینامه‌دار از شاخه انتشار GBL مربوطه باشد. توصیه می‌کنیم نسخه تأییدشده Google از GBL را بااستفاده از راهکار امضای دلخواهتان امضا کنید و فراداده ساخت و امضای حاصل را در پارتیشن android_esp_${SLOT_SUFFIX} ذخیره کنید.

    • گواهینامه GBL باید توسط امضای OEM دست‌نخورده باقی بماند و نباید هیچ سرایندی به باینری اعمال شود.
    • نسخه ساخت 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 برای قناری‌های پشته، بذر 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 باید روی سطح API میان‌افزار پلاتفرم تنظیم شود، که نشان‌دهنده سطح API نرم‌افزار فروشنده است. این متغیر باید مقدار یکسانی با دارایی سیستم 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
    

آزمایش کردن «تبلیغات جهانی Google» در «دستگاه مجازی 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 ایمیل ارسال کنید.