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 domkbootimg
w celu utworzeniaboot.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 polaid
,rev
icustom
), 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.