Implementacje na Androida mogą zawierać obraz bloba drzewa urządzenia (DTB) do wykorzystania przez programu rozruchowego. Lokalizacja obrazu DTB (oraz opcje określania parametrów obrazu DTB) różni się w poszczególnych wersjach Androida.
Na urządzeniach z Androidem 11 urządzenia korzystające z ogólnego jądra systemu Obraz (GKI) musi obsługa rozruchu dostawcy partycja, który zawiera wszystkie informacje dotyczące konkretnego dostawcy przeniesione z partycji rozruchowej. Ponieważ obraz DTB zawiera dane specyficzne dla dostawcy, 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. Aby określić parametry obrazu DTB, zapoznaj się z artykułem Uwzględnianie obrazu DTB w obrazie rozruchowym.
W Androidzie 9 i starszych wersjach obraz DTB może znajdować się w mieć własną partycję lub dołączyć do jądra
image.gz
w celu utworzenia jądra systemu + obraz DTB (który jest następnie przekazywany domkbootimg
w celu utworzeniaboot.img
).
Format obrazu DTB
W Androidzie 10 i nowszych obraz DTB musi zawierać jeden w tych formatach:
Bloby DT złączone jeden po drugim. Bootloader używa pola
totalsize
w każdym nagłówku FDT do odczytu i analizy odpowiedniego bloba.partycje DTB/DTBO. Program rozruchowy umożliwia wydajny sposób wyboru poprawny blob DT, badając strukturę
dt_table_entry
(zawieraid
,rev
icustom
), które mogą zawierać informacje identyfikujące sprzęt 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 użycie testu Vendor Test Suite (VTS) do weryfikacji (i ujednolicenia) umieszczania DTB.
Dodatkowo w przypadku urządzeń innych niż A/B bezpieczniej jest korzystać z przenoszenia danych obrazu odzyskiwania zamiast w oddzielnej partycji, aby zapobiec problemom powodowanym przez przerwano 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). Użycie obrazu DTB jako części formatu obrazu rozruchowego zapobiega takim problemom, ustawiając obraz odzyskiwania w sposób wystarczający (tzn. 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
i tych 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 |
Dodanie go do argumentu base powoduje obciążenie fizyczne
ostatniego 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 podczas tworzenia obrazu rozruchowego.
Aby przekazać argument dtb
do funkcji mkbootimg.py
wraz z obrazem DTB z katalogu określonego przez parametr 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 tablicy BOARD_MKBOOTIMG_ARGS
z innymi odsunię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
VTS 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 1 indeks. Na przykład parametr androidboot.dtb_idx=N
zwraca wartość N
jako indeks liczony od zera drzewa urządzenia wybranego przez bootloadera z zestawu drzew danych rozruchowych obecnych w obrazie rozruchowym.