L'implementazione di DTO implica la divisione dell'albero dei dispositivi, la creazione, il partizionamento e l'esecuzione. Dopo aver ottenuto un'implementazione funzionante, è inoltre necessario mantenere la compatibilità tra i due DT e determinare una strategia per garantire la sicurezza di ciascuna partizione DT.
Dividere il DT
Inizia dividendo la struttura dei dispositivi in due (2) parti:
- DT principale . La parte solo SoC e le configurazioni predefinite, fornite dal fornitore del SoC.
- Sovrapposizione DT . Le configurazioni specifiche del dispositivo, fornite da ODM/OEM.
Dopo aver diviso gli alberi dei dispositivi, è necessario garantire la compatibilità tra la SEF principale e la SEF sovrapposta in modo che l'unione della SEF principale e della SEF sovrapposta dia come risultato una SEF completa per il dispositivo. Per dettagli sul formato e sulle regole DTO, vedere Sintassi DTO . Per dettagli su strutture di dispositivi multipli, vedere DT multipli .
Creazione di SEF principali e sovrapposte
Per costruire il DT principale:
- Compilare il file
.dts
principale del DT nel file.dtb
. - Flash il file
.dtb
in una partizione accessibile al runtime del bootloader (dettagliata di seguito).
Per costruire il DT sovrapposto:
- Compila l'overlay DT
.dts
nel file.dtbo
. Sebbene questo formato file sia uguale al.dtb
formattato come albero di dispositivi appiattito, la diversa estensione del file lo distingue dal DT principale. - Flash il file
.dtbo
in una partizione accessibile al runtime del bootloader (come descritto di seguito).
Per dettagli sulla compilazione con DTC e sulla verifica dei risultati DTO sull'host, vedere Compilazione e verifica .
Partizionamento delle SEF
Determinare una posizione affidabile e accessibile in fase di esecuzione del bootloader nella memoria flash in cui inserire .dtb
e .dtbo
.
Posizioni di esempio per la SEF principale:
- Parte della partizione di avvio, aggiunta al kernel (
image.gz
). - BLOB DT separati (
.dtb
) nella partizione dedicata (dtb
).
Posizioni di esempio per la SEF sovrapposta:
Partizione unica |
---|
Partizione ODM |
---|
.dtbo
nella partizione odm
(fallo solo se il tuo bootloader ha la capacità di caricare dati dal filesystem della partizione odm
).Nota: la dimensione della partizione DT sovrapposta dipende dal dispositivo e dalla quantità di modifiche necessarie sul BLOB DT principale. In genere, 8 MB sono più che sufficienti e consentono di espandere lo spazio in futuro, se necessario.
Per i dispositivi che supportano aggiornamenti continui (A/B) , A/B le partizioni DT principali e sovrapposte:
Esempio 1 |
---|
Esempio 2 |
---|
In esecuzione nel bootloader
Correre:
- Carica
.dtb
dall'archivio in memoria. - Carica
.dtbo
dall'archivio in memoria. - Sovrapponi
.dtb
con.dtbo
per creare un DT unito. - Avviare il kernel dato l'indirizzo di memoria del DT unito.
Mantenimento della compatibilità
Il DTB principale (del fornitore del SoC) viene trattato come una superficie API per i DTBO. Dopo aver separato la struttura dei dispositivi in una parte comune del SoC e una parte specifica del dispositivo, è necessario mantenere le due parti reciprocamente compatibili in futuro, tra cui:
- Definizione della SEF nella SEF principale (es. nodi, proprietà, etichette) . Qualsiasi modifica della definizione nella SEF principale potrebbe innescare modifiche nella SEF sovrapposta. Ad esempio, per correggere il nome di un nodo nella SEF principale, definire un'etichetta "alias" che corrisponda al nome del nodo originale (per evitare la modifica della SEF sovrapposta).
- Posizione dell'archivio DT sovrapposta (ad esempio nome della partizione, formato dell'archivio) .
Garantire la sicurezza
Il bootloader deve garantire che DTB/DTBO sia sicuro, non modificato e non danneggiato. È possibile utilizzare qualsiasi soluzione per proteggere DTB/DTBO, ad esempio la firma dell'immagine di avvio in VBoot 1.0 o il piè di pagina HASH AVB (VBoot 2.0).
- Se DTB/DTBO si trova in una partizione univoca, è possibile aggiungere tale partizione alla catena di fiducia di AVB. La catena di fiducia inizia da una radice di fiducia protetta dall'hardware e arriva al bootloader, che verifica l'integrità e l'autenticità della partizione DTB/DTBO.
- Se DTB/DTBO si trova in una partizione esistente (come la partizione
odm
), tale partizione dovrebbe trovarsi nella catena di fiducia di AVB. (La partizione DTBO potrebbe condividere una chiave pubblica con la partizioneodm
).
Per i dettagli, fare riferimento a Avvio verificato .