Obrazy DTB

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 do mkbootimg w celu utworzenia boot.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 pola id, revcustom), 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.pynarzę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.