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.

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

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

  • 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 układowe rozruchu 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 FAT32 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 bloków. Przykłady to urządzenia UFS, eMMC i karty SD.
    • System FAT32 jest używany, ponieważ jest powszechnie stosowanym i prostym systemem plików.
    • 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 wynikający z dodatkowych funkcji 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.
  • 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 kompilacji oraz metadanych podpisu w android_esp_${SLOT_SUFFIX}.

    • Certyfikat GBL MUSI pozostać nienaruszony przez podpis OEM I nie może być dołączony do niego żaden nagłówek.
    • Wersja GBL dla deweloperów jest używana wyłącznie do celów związanych z opracowywaniem i debugowaniem. Kompilacja nie może zostać dostarczona 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 tymczasowej na potrzeby obliczeń AVB i DICE
    • EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL umożliwia implementacje typu 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 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 open source bootloadera, 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 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 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, 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.