Implementacje Androida mogą zawierać obraz DTB (Device Tree Blob) do użytku przez program rozruchowy. Lokalizacja obrazu DTB (i 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 ogólnego obrazu jądra (GKI) muszą obsługiwać partycję rozruchową dostawcy, która zawiera wszystkie informacje specyficzne dla dostawcy przeniesione z partycji rozruchowej. Obraz DTB zawiera dane specyficzne dla dostawcy, więc jest teraz częścią partycji rozruchowej dostawcy. Aby określić parametry obrazu DTB, zapoznaj się z sekcją Nagłówek rozruchowy dostawcy.
W Androidzie 10 urządzenia mogą zawierać obraz DTB w partycji rozruchowej. Aby określić parametry obrazu DTB, zapoznaj się z sekcją Uwzględnianie obrazu DTB w obrazie rozruchowym.
W Androidzie 9 i starszych wersjach obraz DTB może znajdować się we własnej partycji lub być dołączony do jądra
image.gz
, aby utworzyć obraz jądra + DTB (który jest następnie przekazywany domkbootimg
w celu utworzeniaboot.img
).
Format obrazu DTB
W Androidzie 10 i nowszych wersjach obraz DTB musi mieć jeden z tych formatów:
Bloki DT połączone jeden po drugim. Program rozruchowy używa pola
totalsize
w każdym nagłówku FDT do odczytywania i parsowania odpowiedniego obiektu blob.Partycje DTB/DTBO. Program rozruchowy ma skuteczny sposób wybierania prawidłowego obiektu DT przez sprawdzenie struktury
dt_table_entry
(zawierającej polaid
,rev
icustom
), która może zawierać informacje identyfikujące sprzęt dla wpisu. Więcej informacji znajdziesz w sekcji Partycje DTB/DTBO.
Dołącz obraz DTB do obrazu rozruchowego
Urządzenia z Androidem 10 mogą zawierać obraz DTB w obrazie rozruchowym. Eliminuje to konieczność obsługi przez Androida skryptów, które dołączają obraz DTB do image.gz
w jądrze, i umożliwia użycie testu Vendor Test Suite (VTS) do weryfikacji (i standaryzacji) umieszczania DTB.
Dodatkowo w przypadku urządzeń innych niż A/B bezpieczniej jest umieścić DTB w obrazie odzyskiwania, a nie w osobnej partycji, aby zapobiec problemom spowodowanym przez przerwane aktualizacje OTA. Jeśli podczas aktualizacji OTA po zaktualizowaniu partycji DTB (ale przed zakończeniem pełnej aktualizacji) wystąpi problem, urządzenie spróbuje uruchomić się w trybie odzyskiwania, aby dokończyć aktualizację OTA. Jednak ponieważ 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 zapobiega takim problemom, ponieważ obraz odzyskiwania jest samowystarczalny (tzn. nie zależy od innej partycji).
Struktura obrazu rozruchowego
Urządzenia z Androidem 10 mogą zawierać obraz DTB przy użyciu tej struktury obrazu rozruchowego.
Sekcja obrazu rozruchowego | Liczba stron |
---|---|
Nagłówek rozruchowy (1 strona) | 1 |
Jądro (l stron) | l = (kernel_size + page_size -
1) / page_size |
Ramdysk (m stron) | m = (ramdisk_size + page_size -
1) / page_size |
Program rozruchowy drugiego etapu (n stron) | n = (second_size + page_size -
1) / page_size |
Recovery DTBO (o pages) | 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ć mkbootimg.py
narzędzia i tych argumentów, aby określić ścieżkę do obrazu DTB:
Argument | Opis |
---|---|
dtb |
Ścieżka do obrazu DTB, który ma zostać uwzględniony w obrazach rozruchowych lub obrazach przywracania. |
dtb_offset |
Po dodaniu do argumentu base podaje adres fizyczny
węzła końcowego w drzewie urządzeń. Jeśli na przykład argument base to 0x10000000 , a argument dtb_offset to 0x01000000 , w nagłówku obrazu rozruchowego dtb_addr_field zostanie wpisana wartość 0x11000000 . |
Zmienna konfiguracji płyty BOARD_PREBUILT_DTBIMAGE_DIR
musi być używana do określania ścieżki do obrazu DTB. 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żywany podczas tworzenia obrazu rozruchowego.
Aby przekazać argument dtb
do mkbootimg.py
z obrazem DTB z katalogu określonego przez BOARD_PREBUILT_DTBIMAGE_DIR
, zmienna konfiguracji płyty BOARD_INCLUDE_DTB_IN_BOOTIMG
musi mieć wartość true
. Na przykład:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
Do zmiennej BOARD_MKBOOTIMG_ARGS
board
config możesz dołączyć argument dtb_offset
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 testy VTS mogły się zakończyć na urządzeniach z Androidem 10, program rozruchowy musi obsługiwać zaktualizowany obraz rozruchowy i dodawać parametr wiersza poleceń jądra androidboot.dtb_idx
, aby wskazywać indeks wybranego drzewa urządzenia (DT). Możesz określić tylko 1 indeks. Na przykład parametr androidboot.dtb_idx=N
zgłasza N
jako indeks od zera drzewa urządzeń wybranego przez program rozruchowy z zestawu
DTB obecnych w obrazie rozruchowym.