Obrazy DTB

Implementacje na Androida mogą zawierać obraz bloba drzewa urządzenia (DTB) do użycia przez program rozruchowy. Lokalizacja obrazu DTB (oraz opcje określania parametrów obrazu DTB) różni się w zależności od wersji Androida.

  • W Androidzie 11 urządzenia używające ogólnego obrazu jądra (GKI) muszą obsługiwać partycję rozruchową dostawcy, która zawiera wszystkie informacje zależne od dostawcy, które zostały przeniesione z partycji rozruchowej. Obraz DTB zawiera dane konkretnego dostawcy, dlatego jest teraz częścią partycji rozruchowej dostawcy. Informacje o tym, jak określić parametry obrazu DTB, znajdziesz w sekcji Nagłówek rozruchu dostawcy.

  • W Androidzie 10 urządzenia mogą umieszczać obraz DTB w partycji rozruchowej. Informacje o tym, jak określić parametry obrazu DTB, znajdziesz w sekcji Umieszczanie obrazu DTB w obrazie rozruchowym.

  • W Androidzie 9 i starszych obraz DTB może istnieć na własnej partycji lub być dołączony do jądra image.gz w celu utworzenia jądra i obrazu DTB (który jest następnie przekazywany do mkbootimg w celu utworzenia boot.img).

Format obrazu DTB

W Androidzie 10 i nowszych obraz DTB musi mieć jeden z tych formatów:

  • Obiekty blob DT połączone jeden za drugim. Program rozruchowy używa pola totalsize w każdym nagłówku FDT do odczytu i analizy odpowiedniego obiektu blob.

  • partycje DTB/DTBO. Program rozruchowy umożliwia wydajny sposób wyboru odpowiedniego obiektu blob DT przez badanie struktury dt_table_entry (zawiera pola id, rev i custom), które mogą zawierać informacje identyfikujące sprzęt dla wpisu. Szczegółowe informacje znajdziesz w artykule partycje DTB/DTBO.

Umieść obraz DTB w obrazie rozruchowym

Urządzenia z Androidem 10 mogą zawierać obraz DTB w obrazie rozruchowym. Dzięki temu Android nie musi obsługiwać skryptów, które dołączają obraz DTB do pliku image.gz w jądrze, i umożliwia korzystanie z testu Vendor Test Suite (VTS) w celu weryfikacji (i ustandaryzowania) miejsca docelowego DTB.

Poza tym w przypadku urządzeń innych niż A/B bezpieczniej jest mieć przenoszenie przenoszenia danych jako część obrazu przywracania, a nie w osobnej partycji, aby zapobiegać problemom spowodowanym przez przerwy w OTA. Jeśli podczas OTA wystąpi problem po zaktualizowaniu partycji DTB (ale przed ukończeniem pełnej aktualizacji), urządzenie spróbuje uruchomić się w trybie przywracania, aby dokończyć aktualizację OTA. Jeśli jednak partycja DTB została już zaktualizowana, może wystąpić niezgodność z obrazem odzyskiwania (który nie został jeszcze zaktualizowany). Umieszczenie obrazu DTB w formacie obrazu rozruchowego pozwala uniknąć takich problemów, ponieważ obraz przywracania jest wystarczający (czyli nie zależy od innej partycji).

Struktura obrazu rozruchowego

Urządzenia z Androidem 10 mogą zawierać obraz DTB przy użyciu poniższej struktury obrazu rozruchowego.

Sekcja obrazu rozruchowego Liczba stron
Nagłówek uruchamiania (1 strona) 1
Jądro (strony: l) L = (kernel_size + page_size – 1) / page_size
Ramdisk (liczba stron: m) M = (ramdisk_size + page_size – 1) / page_size
Program rozruchowy drugiego etapu (n stron) N = (second_size + page_size – 1) / page_size
Odzyskiwanie DTBO (liczba stron: ) O = (recovery_dtbo_size + page_size – 1) / page_size
DTB (strony: p) P = (dtb_size + page_size – 1) / page_size

Ścieżka obrazu DTB

W przypadku urządzeń z Androidem 10 możesz użyć narzędzia mkbootimg.py oraz podanych niżej argumentów, aby określić ścieżkę do obrazu DTB.

Argument Opis
dtb Ścieżka do obrazu DTB, który ma być dołączany do obrazów rozruchowych/przywracania.
dtb_offset Dodanie go do argumentu base powoduje podanie fizycznego adresu obciążenia końcowego drzewa urządzeń. Jeśli na przykład argument base to 0x10000000, a argument dtb_offset to 0x01000000, dtb_addr_field w nagłówku obrazu rozruchowego zostanie zapełniona jako 0x11000000.

Do określenia ścieżki do obrazu DTB należy używać zmiennej konfiguracji tablicy BOARD_PREBUILT_DTBIMAGE_DIR. Jeśli w katalogu BOARD_PREBUILT_DTBIMAGE_DIR znajduje się więcej niż 1 plik z rozszerzeniem *.dtb, system kompilacji Androida łączy te pliki, aby utworzyć końcowy obraz DTB użyty podczas tworzenia obrazu rozruchowego.

Aby przekazać argument dtb do mkbootimg.py z obrazem DTB z katalogu podanego przez BOARD_PREBUILT_DTBIMAGE_DIR, zmienna konfiguracji tablicy BOARD_INCLUDE_DTB_IN_BOOTIMG musi mieć wartość true. Na przykład:

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

Argument dtb_offset możesz dołączyć do zmiennej konfiguracji tablicy BOARD_MKBOOTIMG_ARGS z innymi przesunięciami i wersją nagłówka. Na przykład:

BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)

Obsługa programu rozruchowego

Aby VTS działały na urządzeniach z Androidem 10, program rozruchowy musi obsługiwać zaktualizowany obraz rozruchowy i musi dodać parametr wiersza poleceń jądra androidboot.dtb_idx, aby wskazać indeks wybranego drzewa urządzeń (DT). Możesz określić tylko jeden (1) indeks. Na przykład parametr androidboot.dtb_idx=N zgłasza N jako liczony od zera indeks drzewa urządzeń wybranego przez program rozruchowy ze zbioru DTB w obrazie rozruchowym.