L'implementazione degli overlay dell'albero dei dispositivi (DTO) prevede la suddivisione dell'albero dei dispositivi (DT), la compilazione, la suddivisione in parti e l'esecuzione. Una volta ottenuta un'implementazione funzionante, devi anche mantenere la compatibilità tra i due DT e determinare una strategia per garantire la sicurezza di ogni partizione del DT.
Dividi il DT
Per iniziare, dividi il DT in due parti:
- DT principale. La parte solo SoC e le configurazioni predefinite, fornite dal fornitore del SoC.
- Overlay DT. Le configurazioni specifiche del dispositivo, fornite da ODM/OEM.
Dopo aver diviso i DT, devi garantire la compatibilità tra i DT e DT in overlay in modo che l'unione del DT principale e del DT in overlay risulti DT del dispositivo. Per informazioni dettagliate sul formato e sulle regole dei DTO consulta Sintassi DTO. Per maggiori dettagli su più DT, consulta Utilizzare più DT.
Crea DT principali e in overlay
Per creare il set di dati principale:
- Compila il DT principale
.dts
in un file.dtb
. - Esegui il flashing del file
.dtb
in una partizione accessibile in fase di runtime del bootloader (dettagliata in [Partition DTs](#partition)).
Per creare il DT overlay:
- Compila il file DT
.dts
dell'overlay in un file.dtbo
. Anche se questo formato file è uguale a quello del file.dtb
formattato come DT appiattito, la diversa estensione del file lo distingue dal DT principale. - Esegui il flashing del file
.dtbo
in una partizione accessibile in fase di runtime del bootloader (dettagliata in [Partition DTs](#partition)).
Per informazioni dettagliate sulla compilazione con DTC e sulla verifica dei risultati DTO sull'host, consulta Compila e verifica.
Partizioni DT
Determina una posizione attendibile e accessibile in fase di runtime del bootloader nella memoria flash per inserire .dtb
e .dtbo
.
Posizioni di esempio per il DT principale:
- Parte della partizione di avvio, aggiunta al kernel (
image.gz
) - Blob DT separati (
.dtb
) in una partizione dedicata (dtb
)
Località di esempio per il DT in overlay:
Figura 1. Inserisci .dtbo in una partizione odm (esegui questa operazione solo se il bootloader ha la capacità di caricare i dati dal file system di una partizione odm).
Figura 2. Inserisci .dtbo in una partizione univoca, ad esempio una partizione dtbo.
Nota:le dimensioni della partizione DT in overlay dipendono dal dispositivo e dalla quantità di modifiche necessarie sopra il blob DT principale. In genere, 8 MB sono più che sufficienti e consentono di crescere in futuro, se necessario.
Per i dispositivi che supportano gli aggiornamenti seamless (A/B), le partizioni DT principale e DT overlay:
Figura 3. Partizione DTBO A/B, esempio 1.
Figura 4. Partizione DTBO A/B, esempio 2.
Esegui nel bootloader
Per eseguire:
Figura 5. Implementazione di runtime tipica per DTO nel bootloader.
- Carica
.dtb
dallo spazio di archiviazione nella memoria. - Carica
.dtbo
dallo spazio di archiviazione nella memoria. - Sovrapponi
.dtb
a.dtbo
per creare un DT unito. - Avvia il kernel in base all'indirizzo di memoria del DT unito.
Mantenere la compatibilità
Il DTB principale (del fornitore di SoC) viene trattato come un'interfaccia API per i DTBO. Dopo aver suddiviso il DT in una parte comune al SoC e una parte specifica del dispositivo, devi mantenere le due parti reciprocamente compatibili in futuro, ad esempio:
- Definizione del DT nel DT principale. Ad esempio, nodi, proprietà, etichette. Qualsiasi modifica alla definizione nel DT principale potrebbe attivare modifiche nel DT overlay. Ad esempio, per correggere il nome di un nodo nel DT principale, definisci un'etichetta "alias" che mappa al nome del nodo originale (per evitare la modifica del DT overlay).
- Overlay della sede del negozio DT. Ad esempio, nome partizione, formato della scheda.
Garantire la sicurezza
Il bootloader deve garantire che il DTB o il DTBO sia sicuro, non modificato e non danneggiato. Puoi utilizzare qualsiasi soluzione per proteggere il DTB o il DTBO, ad esempio la firma dell'immagine di avvio in VBoot 1.0 o il footer AVB HASH (VBoot 2.0).
- Se il DTB o il DTBO si trova in una partizione univoca, puoi aggiungerla alla catena di attendibilità dell'AVB. La catena di attendibilità parte da un'autorità di impostazione di massima attendibilità protetta dall'hardware e arriva al bootloader, che verifica l'integrità e l'autenticità della partizione DTB o DTBO.
- Se il DTB o il DTBO si trova in una partizione esistente (ad esempio la partizione
odm
), questa deve trovarsi nella catena di attendibilità di AVB. (la partizione DTBO potrebbe condividere una chiave pubblica con la partizioneodm
).
Per maggiori dettagli, consulta la sezione Boot verificato.