Implementacje Androida mogą zawierać obraz pliku blob drzewa urządzenia (DTB) do wykorzystania przez bootloader. 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 korzystające z Generic Kernel Image (GKI) muszą obsługiwać partycję rozruchu dostawcy, która zawiera wszystkie informacje dostawcy przeniesione z partycji rozruchu. Obraz DTB zawiera dane specyficzne dla dostawcy, dlatego jest teraz częścią partycji rozruchowej dostawcy. Aby określić parametry obrazu DTB, zapoznaj się z nagłówkiem specyfikacji dostawcy.
W Androidzie 10 na partycji rozruchowej mogą się znajdować obrazy DTB. 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 znajdować się na osobnej partycji lub być dołączony do jądra
image.gz
, aby utworzyć obraz jądraimage.gz
+ DTB (który jest następnie przekazywany domkbootimg
w celu utworzenia obrazuboot.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. Bootloader używa pola
totalsize
w każdym nagłówku FDT do odczytu i analizy odpowiedniego bloba.partycje DTB/DTBO. Bootloader ma skuteczny sposób na wybranie prawidłowego bloba DT, sprawdzając strukturę
dt_table_entry
(zawierającą polaid
,rev
icustom
), która może zawierać informacje identyfikujące sprzęt dla danego wpisu. Więcej informacji znajdziesz w artykule DTB/DTBO: partycje.
Dołącz obraz DTB do obrazu rozruchowego
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 image.gz
w jądrze. Umożliwia to korzystanie z testu Vendor Test Suite (VTS) w celu weryfikacji (i ujednolicenia) umieszczania DTB.
Ponadto w przypadku urządzeń innych niż A/B bezpieczniej jest umieścić DTB w ramach obrazu odzyskiwania niż na osobnej partycji, aby uniknąć problemów spowodowanych przerwanymi aktualizacjami OTA. Jeśli podczas aktualizacji OTA wystąpi problem po zaktualizowaniu partycji DTB (ale przed zakończeniem pełnej aktualizacji), urządzenie spróbuje uruchomić tryb odzyskiwania, aby dokończyć aktualizację OTA. Ponieważ jednak partycja DTB została już zaktualizowana, może wystąpić niezgodność z obrazem odzyskiwania (który nie został jeszcze zaktualizowany). Obraz DTB jako część formatu obrazu rozruchowego zapobiega takim problemom, ponieważ obraz odzyskiwania jest samowystarczalny (czyli nie zależy od innej partycji).
Struktura obrazu rozruchowego
Urządzenia z Androidem 10 mogą zawierać obraz DTB z użyciem tej 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 (m stron) | 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ć uwzględniony w obrazach rozruchowych lub odzyskiwania. |
dtb_offset |
Gdy zostanie dodany do argumentu base , udostępnia adres załadowania fizycznego dla końcowego drzewa urządzeń. Jeśli na przykład argument base to 0x10000000 , a argument dtb_offset to 0x01000000 , argument dtb_addr_field w nagłówku obrazu rozruchowego jest wypełniany jako 0x11000000 . |
Aby określić ścieżkę do obrazu DTB, musisz użyć 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ć ostateczny obraz DTB, który jest używany do tworzenia obrazu rozruchowego.
Aby przekazać argument dtb
do funkcji mkbootimg.py
wraz z obrazem DTB z katalogu określonego przez zmienną BOARD_PREBUILT_DTBIMAGE_DIR
, zmienna konfiguracji płyty BOARD_INCLUDE_DTB_IN_BOOTIMG
musi być ustawiona na 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ł prawidłowo na urządzeniach z Androidem 10, bootloader musi obsługiwać zaktualizowany obraz startowy i musi dodać parametr wiersza poleceń jądra androidboot.dtb_idx
, aby wskazać indeks wybranego drzewa urządzenia (DT). Możesz określić tylko 1 indeks. Na przykład parametr androidboot.dtb_idx=N
zwraca wartość N
jako indeks od zera drzewa urządzenia wybranego przez bootloadera z zestawu
DTB obecnych w obrazie rozruchowym.