Obrazy DTB

Implementacje systemu Android mogą obejmować obraz obiektu typu blob drzewa urządzeń (DTB) do wykorzystania przez program ładujący. Lokalizacja obrazu DTB (oraz opcje określania parametrów obrazu DTB) różni się w zależności od wersji Androida.

  • W systemie Android 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, które zostały 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, zobacz Nagłówek rozruchowy dostawcy .

  • W systemie Android 10 urządzenia mogą zawierać obraz DTB na partycji rozruchowej. Aby określić parametry obrazu DTB, zobacz Dołączanie obrazu DTB do obrazu rozruchowego .

  • W systemie Android 9 i starszych obraz DTB może znajdować się na własnej partycji lub zostać dołączony do pliku kernel image.gz w celu utworzenia obrazu jądra + DTB (który następnie jest przekazywany do mkbootimg w celu utworzenia boot.img ).

Format obrazu DTB

W Androidzie 10 i nowszych obraz DTB musi mieć jeden z następujących formatów:

  • Obiekty blob DT łączone jeden po drugim. Program ładujący używa pola totalsize w każdym nagłówku FDT do odczytu i analizy odpowiedniego obiektu BLOB.

  • Partycje DTB/DTBO. Program ładujący ma skuteczny sposób na wybranie prawidłowego obiektu blob DT poprzez sprawdzenie struktury dt_table_entry (zawiera pola id , rev i custom ), które mogą przechowywać informacje identyfikujące sprzęt dla wpisu). Aby uzyskać szczegółowe informacje, zobacz Partycje DTB/DTBO .

Dołącz obraz DTB do obrazu rozruchowego

Urządzenia z systemem Android 10 mogą zawierać obraz DTB w obrazie rozruchowym. Eliminuje to potrzebę obsługi przez system Android 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) rozmieszczenia DTB.

Ponadto w przypadku urządzeń innych niż A/B bezpieczniej jest mieć DTB jako część obrazu odzyskiwania, a nie na osobnej partycji, aby zapobiec problemom powodowanym przez przerwane OTA. Jeśli podczas OTA wystąpi problem po aktualizacji partycji DTB (ale przed zakończeniem pełnej aktualizacji), urządzenie spróbuje uruchomić się w trybie odzyskiwania, aby dokończyć OTA; jednakże, ponieważ partycja DTB została już zaktualizowana, może wystąpić niezgodność z obrazem odzyskiwania (który nie został jeszcze zaktualizowany). Posiadanie obrazu DTB jako części formatu obrazu rozruchowego zapobiega takim problemom, sprawiając, że obraz odzyskiwania jest samowystarczalny (to znaczy nie zależy od innej partycji).

Struktura obrazu rozruchowego

Urządzenia z systemem Android 10 mogą zawierać obraz DTB przy użyciu następującej struktury obrazu rozruchowego.

Sekcja obrazu rozruchowego Numer 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 ładujący drugiego stopnia (n stron) n = ( second_size + page_size - 1) / page_size
Odzyskiwanie DTBO (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 systemem Android 10 możesz użyć narzędzia mkbootimg.py i poniższych 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/odzyskiwanych.
dtb_offset Po dodaniu do argumentu base zapewnia adres obciążenia fizycznego dla końcowego drzewa urządzeń. Na przykład, jeśli argument base to 0x10000000 , a argument dtb_offset to 0x01000000 , pole dtb_addr_field w nagłówku obrazu rozruchowego jest wypełniane jako 0x11000000 .

Do określenia ścieżki do obrazu DTB należy użyć zmiennej konfiguracyjnej płytki BOARD_PREBUILT_DTBIMAGE_DIR . Jeśli w katalogu BOARD_PREBUILT_DTBIMAGE_DIR znajduje się więcej niż jeden plik z rozszerzeniem *.dtb , system kompilacji systemu Android łączy pliki w celu utworzenia ostatecznego obrazu DTB używanego do tworzenia obrazu rozruchowego.

Aby przekazać argument dtb do mkbootimg.py z obrazem DTB z katalogu określonego przez BOARD_PREBUILT_DTBIMAGE_DIR , zmienna konfiguracyjna płytki BOARD_INCLUDE_DTB_IN_BOOTIMG musi być ustawiona na true . Na przykład:

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

Możesz dołączyć argument dtb_offset do zmiennej konfiguracyjnej płytki 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 bootloadera

Aby VTS mógł pomyślnie działać na urządzeniach z systemem Android 10, program ładujący 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żna określić tylko jeden (1) indeks. Na przykład parametr androidboot.dtb_idx=N zgłasza N jako indeks od zera drzewa urządzeń wybranego przez program ładujący ze zbioru kodów DTB obecnych w obrazie rozruchowym.