Le implementazioni Android possono includere un'immagine DTB (Device Tree Blob) da utilizzare il bootloader. La posizione dell'immagine DTB (e le opzioni per specificare i parametri immagine DTB) variano a seconda delle release di Android.
In Android 11, i dispositivi che utilizzano il kernel generico L'immagine (GKI) deve supportare l'avvio del fornitore partizione di memoria, che include tutte le informazioni specifiche del fornitore che sono state trasferite dalla di avvio. Poiché l'immagine DTB contiene dati specifici del fornitore, parte della partizione di avvio del fornitore. Per specificare i parametri dell'immagine DTB, consulta Avvio fornitore intestazione.
In Android 10, i dispositivi possono includere l'immagine DTB la partizione di avvio. Per specificare i parametri delle immagini DTB, consulta la sezione Inclusione del DTB nell'immagine di avvio.
In Android 9 e versioni precedenti, l'immagine DTB può esistere in propria partizione o essere aggiunto al kernel
image.gz
per creare il kernel + immagine DTB (che viene poi passata amkbootimg
per creareboot.img
).
Formato dell'immagine DTB
In Android 10 e versioni successive, l'immagine DTB deve utilizzare una dei seguenti formati:
BLOB DT concatenati uno dopo l'altro. Il bootloader utilizza la classe Campo
totalsize
in ogni intestazione FDT per leggere e analizzare il blob corrispondente.Partizioni DTB/DTBO. Il bootloader è in grado di selezionare in modo efficiente correggere il blob DT esaminando lo struct
dt_table_entry
(contieneid
,rev
ecustom
) che possono contenere informazioni che consentono l'identificazione dell'hardware per la voce. Per maggiori dettagli, consulta DTB/DTBO Partizioni.
Includi l'immagine DTB nell'immagine di avvio
I dispositivi con Android 10 possono includere l'immagine DTB
l'immagine di avvio. In questo modo, Android non dovrà più supportare script che aggiungono
l'immagine DTB in image.gz
nel kernel e consente l'uso di Test del fornitore
Test Suite (VTS) per verificare (e standardizzare) i DTB
posizionamento.
Inoltre, per i dispositivi non A/B, è più sicuro includere il DTB nell'immagine di ripristino anziché in una partizione separata per evitare problemi causati ha interrotto le agenzie di viaggi online. Durante una OTA, se un problema si verifica dopo che la partizione DTB è aggiornato (ma prima di completare l'aggiornamento completo), il dispositivo prova ad avviarsi Recovery mode per completare l'OTA; ma poiché la partizione DTB è l'immagine di ripristino (che ha non è stato ancora aggiornato). Inserire l'immagine DTB nel formato dell'immagine di avvio previene questi problemi rendendo l'immagine di ripristino autosufficiente (ovvero, non dipende da un'altra partizione).
Struttura dell'immagine di avvio
I dispositivi con Android 10 possono includere un'immagine DTB utilizzando la seguente struttura di immagini di avvio.
Sezione Immagine di avvio | Numero di pagine |
---|---|
Intestazione di avvio (1 pagina) | 1 |
Kernel (l pagine) | l = (kernel_size + page_size -
1) / page_size |
Ramdisk (m pagine) | m = (ramdisk_size + page_size -
1) / page_size |
Bootloader di seconda fase (n pagine) | n = (second_size + page_size -
1) / page_size |
DTBO di recupero (o pagine) | o = (recovery_dtbo_size + page_size -
1) / page_size |
DTB (p pagine) | p = (dtb_size + page_size -
1) / page_size |
Percorso immagine DTB
Per i dispositivi con Android 10, puoi utilizzare
mkbootimg.py
e i seguenti argomenti per specificare il percorso del DTB
dell'immagine.
Argomento | Descrizione |
---|---|
dtb |
Percorso dell'immagine DTB da includere nelle immagini di avvio/ripristino. |
dtb_offset |
Se aggiunta all'argomento base , fornisce il carico fisico
per la struttura di dispositivi finale. Ad esempio, se base
è 0x10000000 e l'argomento dtb_offset
è 0x01000000 , dtb_addr_field nell'immagine di avvio
viene compilata come 0x11000000 . |
È necessario utilizzare la variabile di configurazione della scheda BOARD_PREBUILT_DTBIMAGE_DIR
per specificare
il percorso dell'immagine DTB. Se più di un file con estensione *.dtb
viene
presente nella directory BOARD_PREBUILT_DTBIMAGE_DIR
, il sistema di compilazione di Android
concatena i file per creare l'immagine DTB finale utilizzata nell'immagine di avvio
per la creazione di contenuti.
Per passare l'argomento dtb
a mkbootimg.py
con l'immagine DTB dal
directory specificata da BOARD_PREBUILT_DTBIMAGE_DIR
, la variabile di configurazione della scheda
BOARD_INCLUDE_DTB_IN_BOOTIMG
deve essere impostato su true
. Ad esempio:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
Puoi aggiungere l'argomento dtb_offset
alla bacheca BOARD_MKBOOTIMG_ARGS
di configurazione con gli altri offset e la versione dell'intestazione. Ad esempio:
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)
Supporto del bootloader
Affinché VTS venga eseguito correttamente sui dispositivi con Android
10, il bootloader deve supportare l'immagine di avvio aggiornata
e deve aggiungere il parametro della riga di comando androidboot.dtb_idx
del kernel per indicare
l'indice della struttura ad albero dei dispositivi (DT) selezionata. Puoi specificare un solo (1)
. Ad esempio, il parametro androidboot.dtb_idx=N
indica N
come
indice in base zero della struttura ad albero dei dispositivi selezionato dal bootloader dall'insieme
I DTB sono presenti nell'immagine di avvio.