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ć korzystanie z rozszerzeń specyficznych dla dostawcy za pomocą 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.

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

  • konfiguracji 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.

  • Wczytuję chronioną maszynę wirtualną. Plik binarny powinien prawidłowo wczytywać wstępnie zweryfikowane oprogramowanie sprzętowe chronionej maszyny wirtualnej przed jądrem Androida w przypadku obecności chronionych maszyn wirtualnych. Więcej informacji znajdziesz w artykule sekwencja uruchamiania Microdroida.

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

Wymagania dotyczące implementacji

Aby usługa GBL była prawidłowo wdrożona na Twoim urządzeniu, musisz spełniać te wymagania:

  • Urządzenie musi zawierać 2 partycje FAT o rozmiarze co najmniej 4 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 blokowych. Przykładami są urządzenia UFS, eMMC i karty SD.
    • System FAT jest używany, ponieważ jest powszechny i prosty.
    • 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 GBL po rozpakowaniu wynosi około 2 MB. 4 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 aktualizację OTA Androida.
    • 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ą kompilacją 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 kompilacji oraz metadanych podpisu w android_esp_${SLOT_SUFFIX}.

    • Podpis OEM MUSI pozostawić certyfikat GBL w nienaruszonym stanie, a do pliku binarnego NIE MOŻE być dodany żaden nagłówek.
    • Wersja GBL dewelopera jest używana wyłącznie do celów związanych z programowaniem i debugowaniem. Kompilacja nie może zostać wysłana i nie zostanie certyfikowana przez Google.
  • Plik GBL musi być przechowywany w ścieżce /EFI/BOOT/BOOTAA64.EFI na partycji FAT32.

  • Wdrażanie wymaganych protokołów UEFI i Android UEFI w celu obsługi GBL. Wersja produkcyjna GBL nie uruchomi się, jeśli te interfejsy nie są obsługiwane.

    • 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 roboczej na potrzeby obliczeń AVB i DICE
    • EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL udostępnia opcję implementacji bez operacji, 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 urządzenia.
    • GBL_EFI_AVF_PROTOCOL generuje dane konfiguracji AVF z łańcucha DICE.
  • Protokoły UEFI, które są zdecydowanie zalecane podczas integrowania GBL, są opisane w protokołach UEFI GBL.

Obsługa oprogramowania układowego rozruchu

W przypadku implementacji oprogramowania układowego UEFI, które zostały zmodyfikowane w sposób opisany w poprzedniej sekcji, z GBL działają te implementacje:

  • 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 bootloadera open source, który zyskuje zgodność z UEFI na potrzeby GBL.
  • LittleKernel (LK). Bootloader 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 wersji GBL z certyfikatem Google i zintegrowanie jej z łańcuchem rozruchowym.

Kompilacja 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 wirtualnym urządzeniu z Androidem

  1. Uruchom GBL w Cuttlefish:

    cvd start --android_efi_loader=path_to_the_UEFI_app ...
    

    Zamiast bezpośrednio uruchamiać Androida, to 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.