Wdrażanie GBL

Z tej strony dowiesz się, jak wdrożyć plik binarny ogólnego programu rozruchowego (GBL).

Wymagania dotyczące oprogramowania rozruchowego

Aby korzystać z GBL, oprogramowanie układowe rozruchu musi spełniać te wymagania:

  • Zgodność z Unified Extensible Firmware Interface (UEFI). Oprogramowanie musi implementować i używać wymaganych protokołów UEFI. Oprogramowanie musi też umożliwiać rozszerzenia specyficzne dla dostawcy przy użyciu zdefiniowanych protokołów UEFI.

  • Zabezpieczenia. Oprogramowanie układowe musi spełniać wszystkie wymagania dotyczące weryfikacji podczas uruchamiania na Androidzie (AVB), co umożliwia GBL uwierzytelnianie obrazów rozruchowych.

  • Tryby uruchamiania. Plik binarny powinien obsługiwać różne tryby uruchamiania, takie jak normalne uruchamianie, uruchamianie w trybie odzyskiwania i szybkie uruchamianie.

  • Partycjonowanie dynamiczne: oprogramowanie układowe rozruchu musi implementować logikę wyboru gniazda, aby obsługiwać odczyt prawidłowego gniazda rozruchu A/B i być zgodne z partycjami dynamicznymi oraz danymi użytkownika w superpartycji.

  • konfiguracja systemu operacyjnego, Oprogramowanie musi mieć możliwość modyfikowania wiersza poleceń jądra, drzewa urządzeń (DTB) i konfiguracji rozruchu za pomocą dostosowań OEM potrzebnych do uruchomienia urządzenia.

  • Ładowanie chronionej maszyny wirtualnej. Plik binarny powinien prawidłowo ładować wstępnie zweryfikowane oprogramowanie układowe chronionej maszyny wirtualnej przed jądrem Androida w przypadku chronionych maszyn wirtualnych. Więcej informacji znajdziesz w sekcji sekwencja rozruchu Microdroida.

  • Zarządzanie pamięcią. Oprogramowanie układowe rozruchowe musi obsługiwać interfejs API alokacji pamięci UEFI.

Wymagania dotyczące implementacji

Aby GBL działał prawidłowo na Twoim urządzeniu, musisz spełniać te wymagania:

  • Urządzenie musi zawierać 2 partycje FAT o rozmiarze co najmniej 8 MB o nazwach android_esp_aandroid_esp_b na urządzeniu blokowym dostępnym dla układu SOC.

    • Urządzenie blokowe to urządzenie pamięci masowej, z którego można odczytywać dane lub na którym można je zapisywać w jednostkach bloków. Przykładami są urządzenia UFS, eMMC i karty SD.
    • System FAT jest używany, ponieważ jest powszechnie stosowanym i prostym systemem plików.
    • Zalecamy wybór systemu plików FAT odpowiedniego do Twoich potrzeb spośród FAT12, FAT16 i FAT32.
    • Obie partycje są wymagane w przypadku aktualizacji i wycofywania zmian w trybie OTA przez cały okres obsługi tej wersji Androida.
    • Rozmiar pliku GBL po rozpakowaniu wynosi około 2 MB. 8 MB wystarczy, aby uwzględnić wzrost związany z dodatkowymi funkcjami w ciągu najbliższych 7 lat.
    • W przypadku aktualizacji GBL musisz zaktualizować całą partycjęandroid_esp_${SLOT_SUFFIX}. Aktualizacja tylko GBL nie jest obsługiwana przez Androida OTA.
    • Identyfikator GUID typu partycji używany w przypadku obu partycji FAT musi odpowiadać identyfikatorowi GUID partycji systemowej EFI C12A7328-F81F-11D2-BA4B-00A0C93EC93B.
  • Wdrożona wersja GBL musi być najnowszą certyfikowaną wersją produkcyjną z odpowiedniej gałęzi wydania GBL. Zalecamy podpisanie certyfikowanej przez Google kopii GBL za pomocą wybranego rozwiązania do podpisywania i przechowywanie powstałej wersji oraz metadanych podpisu w android_esp_${SLOT_SUFFIX}.

    • Certyfikat GBL MUSI pozostać nienaruszony przez podpis OEM I nie może być dołączony do pliku binarnego żaden nagłówek.
    • Wersja GBL dla programistów jest używana wyłącznie do celów programistycznych i debugowania. Nie można jej rozpowszechniać i nie będzie certyfikowana przez Google.
  • Plik GBL musi być przechowywany w ścieżce /EFI/BOOT/BOOTAA64.EFI na partycji FAT.

  • Wdróż wymagane protokoły UEFI i Android UEFI, aby obsługiwać GBL. Jeśli te interfejsy nie są obsługiwane, kompilacja produkcyjna GBL nie uruchomi się.

    • EFI_BLOCK_IO_PROTOCOL lub EFI_BLOCK_IO2_PROTOCOL pobiera obrazy rozruchowe i obrazy pvmfw z dysku.
    • EFI_RNG_PROTOCOL w przypadku kanarków stosu, wartości początkowych KASLR i wartości początkowych generatora liczb losowych.
    • Usługi przydzielania pamięci do przydzielania pamięci tymczasowej na potrzeby obliczeń AVB i DICE
    • EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL udostępnia opcję implementacji no-op, ale GBL domyślnie rejestruje dane za pomocą tego protokołu.
    • GBL_EFI_AVB_PROTOCOL uzyskuje dostęp do kluczy publicznych i indeksów wycofywania, aby weryfikować obrazy rozruchowe.
    • GBL_EFI_BOOT_CONTROL_PROTOCOL pobiera metadane slotu i przyczyny rozruchu z oprogramowania
    • GBL_EFI_AVF_PROTOCOL generuje dane konfiguracji AVF z łańcucha DICE.
  • Oprogramowanie sprzętowe musi udostępniać zmienne UEFI do GBL. Te zmienne muszą mieć wartość GBL_EFI_VENDOR_GUID 5a6d92f3-a2d0-4083-91a1-a50f6c3d9830.

    • gbl_fw_api_level musi być ustawiony na poziom API oprogramowania sprzętowego platformy, co oznacza poziom API oprogramowania dostawcy. Ta zmienna musi mieć taką samą wartość jak właściwość systemowa ro.board.api_level.
  • Protokoły UEFI, które są zdecydowanie zalecane podczas integrowania GBL, są opisane w protokołach UEFI GBL.

Obsługa oprogramowania układowego rozruchu

Po wprowadzeniu zmian niezbędnych do spełnienia wymagań opisanych w poprzedniej sekcji z GBL działają te implementacje oprogramowania układowego UEFI:

  • EDK2 (Tianocore). EDK2 to popularna implementacja UEFI o otwartym kodzie źródłowym. Obsługa GBL jest potrzebna w przypadku programów rozruchowych opartych na EDK2, a obsługa UEFI jest już dostępna.
  • U-Boot: elastyczny i powszechnie używany projekt programu rozruchowego open source, który zyskuje zgodność z interfejsem UEFI na potrzeby GBL.
  • LittleKernel (LK): program rozruchowy typu open source używany przez niektórych dostawców.

Uruchamianie GBL

Możesz pobrać gotowy plik binarny GBL, aby go uruchomić, lub utworzyć własny i go uruchomić.

Pobieranie i uruchamianie pliku binarnego GBL

GBL jest rozpowszechniany jako pojedynczy plik binarny aplikacji UEFI. Ten plik binarny możesz aktualizować niezależnie od podstawowego oprogramowania urządzenia za pomocą standardowego mechanizmu aktualizacji Androida.

Począwszy od Androida 16, jeśli wprowadzasz na rynek urządzenie oparte na chipsecie ARM-64, zdecydowanie zalecamy wdrożenie najnowszej certyfikowanej przez Google wersji GBL i zintegrowanie jej z łańcuchem rozruchowym.

Kompilowanie GBL

Aby utworzyć GBL:

  1. Sprawdź, czy masz zainstalowane narzędzie repo i Bazel bootstrap:

    sudo apt install repo bazel-bootstrap
    
  2. Zainicjuj bieżący katalog na potrzeby kontroli źródła za pomocą uefi-gbl-mainlinepliku manifestu:

    repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline
    repo sync -j16
    
  3. Skompiluj aplikację UEFI:

    tools/bazel run //bootable/libbootloader:gbl_efi_dist
    

Testowanie GBL na urządzeniu wirtualnym z Androidem (AVD)

  1. Uruchom GBL w Cuttlefish:

    cvd start --android_efi_loader=path_to_the_UEFI_app ...
    

    Zamiast bezpośrednio uruchamiać Androida, polecenie cvd start używa aplikacji UEFI do uruchamiania Androida.

Zgłaszanie błędów i kontaktowanie się z zespołem programu rozruchowego

Aby zgłosić błąd dotyczący GBL, otwórz komponent Android Generic Bootloader w Buganizerze.

Jeśli masz pytania, skontaktuj się z zespołem GBL, wysyłając e-maila na adres android-gbl@google.com.