Implementacje na Androida mogą zawierać obraz bloba drzewa urządzenia (DTB) do wykorzystania przez programu rozruchowego. Lokalizacja obrazu DTB (oraz opcje określania parametrów obrazu DTB) różni się w poszczególnych wersjach Androida.
Na urządzeniach z Androidem 11 urządzenia korzystające z ogólnego jądra systemu Obraz (GKI) musi obsługa rozruchu dostawcy partycja, który zawiera wszystkie informacje dotyczące konkretnego dostawcy przeniesione z partycji rozruchowej. Obraz DTB zawiera dane konkretnego dostawcy, partycji rozruchowej dostawcy. Aby określić parametry obrazu DTB, zobacz Rozruch dostawcy nagłówek.
W Androidzie 10 urządzenia mogą zawierać obraz DTB w partycję rozruchową. Aby dowiedzieć się, jak określić parametry obrazu DTB, patrz Uwzględnianie DTB w obrazie rozruchowym.
W Androidzie 9 i starszych wersjach obraz DTB może znajdować się w mieć własną partycję lub dołączyć ją do jądra
image.gz
w celu utworzenia jądra systemu operacyjnego. + obraz DTB (który jest następnie przekazywany domkbootimg
w celu utworzeniaboot.img
).
Format obrazu DTB
W Androidzie 10 i nowszych obraz DTB musi zawierać jeden w tych formatach:
Obiekty blob DT połączone jeden za drugim. Program rozruchowy używa
totalsize
w każdym nagłówku FDT, aby odczytać i przeanalizować odpowiedni obiekt blob.partycje DTB/DTBO. Program rozruchowy umożliwia wydajny sposób wyboru poprawny blob DT, badając strukturę
dt_table_entry
(zawieraid
,rev
icustom
), które mogą zawierać informacje identyfikujące sprzęt wpisu. Więcej informacji: DTB/DTBO Partycje.
Umieść obraz DTB w obrazie rozruchowym
Urządzenia z Androidem 10 mogą zawierać obraz DTB w
i obrazu rozruchowego. Dzięki temu Android nie musi obsługiwać skryptów, które dołączają
obrazu DTB do image.gz
w jądrze i umożliwia użycie narzędzia Vendor Test
Test pakietu (VTS) do weryfikacji (i ustandaryzowania) DTB
miejsce docelowe.
Dodatkowo w przypadku urządzeń innych niż A/B bezpieczniej jest korzystać z przenoszenia danych obrazu odzyskiwania zamiast w oddzielnej partycji, aby zapobiec problemom powodowanym przez przerwano OTA. Jeśli podczas OTA wystąpi problem po partycji DTB zaktualizowane (ale przed ukończeniem pełnej aktualizacji) urządzenie próbuje się uruchomić trybu przywracania, aby dokończyć aktualizację OTA; ponieważ partycja DTB ma została już zaktualizowana, może to spowodować niezgodność obrazu odzyskiwania (który zawiera nie została jeszcze zaktualizowana). Użycie obrazu DTB jako części formatu obrazu rozruchowego zapobiega takim problemom, ustawiając obraz odzyskiwania w sposób wystarczający (tzn. nie zależy od innej partycji).
Struktura obrazu rozruchowego
Urządzenia z Androidem 10 mogą zawierać obraz DTB używając 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
Na urządzeniach z Androidem 10 możesz używać funkcji
mkbootimg.py
i następujące argumenty do określenia ścieżki do pliku przenoszenia danych
.
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 obciążenie fizyczne
ostatniego drzewa urządzeń. Jeśli na przykład base
to 0x10000000 , a argument dtb_offset
to 0x01000000 , dtb_addr_field w obrazie rozruchowym
nagłówek jest wypełniany jako 0x11000000 . |
Do określenia zmiennej konfiguracji tablicy BOARD_PREBUILT_DTBIMAGE_DIR
należy użyć zmiennej
ścieżki do obrazu DTB. Jeśli więcej niż jeden plik z rozszerzeniem *.dtb
to
znajduje się w katalogu BOARD_PREBUILT_DTBIMAGE_DIR
,
łączy pliki, aby utworzyć końcowy obraz DTB użyty w obrazie rozruchowym
proces tworzenia.
Aby przekazać argument dtb
do mkbootimg.py
z obrazem DTB z
katalog określony przez parametr 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 tablicy BOARD_MKBOOTIMG_ARGS
z innymi odsunię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
VTS 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)
w indeksie. 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
Pliki DTB obecne w obrazie rozruchowym.