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, dlatego jest teraz częścią partycji rozruchowej dostawcy. Aby określić parametry obrazu DTB, zapoznaj się z nagłówkiem rozruchu 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ę na własnej partycji lub być dołączony do jądra
image.gz, aby utworzyć obraz jądra + DTB (który jest następnie przekazywany domkbootimgw celu utworzeniaboot.img).
Format obrazu DTB
W Androidzie 10 i nowszych wersjach obraz DTB musi być w jednym z tych formatów:
Połączone ze sobą bloki DT. Program rozruchowy używa pola
totalsizew każdym nagłówku FDT do odczytywania i analizowania odpowiedniego bloku.Partycje DTB/DTBO. Program rozruchowy może skutecznie wybrać prawidłowy blok DT, sprawdzając strukturę
dt_table_entry(zawierającą polaid,revicustom), która może zawierać informacje identyfikujące sprzęt. Więcej informacji znajdziesz w sekcji Partycje DTB/DTBO.
Uwzględnianie obrazu 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 image.gz w jądrze, i umożliwia korzystanie z testu Vendor Test
Suite (VTS) do weryfikowania (i standaryzowania) umieszczania DTB.
Ponadto w przypadku urządzeń bez A/B bezpieczniej jest umieścić DTB w obrazie przywracania systemu niż na osobnej partycji, aby zapobiec problemom spowodowanym przerwaniem aktualizacji 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ć się w trybie 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). Umieszczenie obrazu DTB w formacie obrazu rozruchowego zapobiega takim problemom, ponieważ obraz przywracania systemu 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 |
| DTBO odzyskiwania (o stron) | o = (recovery_dtbo_size + page_size -
1) / page_size |
| DTB (p stron) | 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 zostać uwzględniony w obrazach rozruchowych/odzyskiwania. |
dtb_offset |
Po dodaniu do argumentu base podaje fizyczny adres wczytywania
dla końcowego drzewa urządzeń. Jeśli na przykład argument base
ma wartość 0x10000000, a argument dtb_offset
ma wartość 0x01000000, pole dtb_addr_field w nagłówku obrazu rozruchowego
jest wypełniane wartością 0x11000000. |
Do określenia ścieżki do obrazu DTB należy użyć zmiennej konfiguracji płyty 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ż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. Przykład:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
Do zmiennej konfiguracji płyty BOARD_MKBOOTIMG_ARGS możesz dołączyć argument dtb_offset z innymi przesunięciami i wersją nagłówka. 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, program rozruchowy musi obsługiwać zaktualizowany obraz rozruchowy i dodawać parametr wiersza poleceń jądra androidboot.dtb_idx, aby wskazywać indeks wybranego drzewa urządzeń (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.