Implementazione delle DTO

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:

  1. Compilare il file .dts principale del DT nel file .dtb .
  2. Flash il file .dtb in una partizione accessibile al runtime del bootloader (dettagliata di seguito).

Per costruire il DT sovrapposto:

  1. 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.
  2. 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
Figura 1. Inserisci .dtbo in una partizione univoca, ad esempio la partizione dtbo .
Partizione ODM
Figura 2. Inserisci .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
Figura 3. Partizione DTBO A/B, esempio 1.
Esempio 2
Figura 4. Partizione DTBO A/B, esempio 2.

In esecuzione nel bootloader

Correre:

Figura 5. Tipica implementazione runtime per la sovrapposizione dell'albero dei dispositivi nel bootloader.
  1. Carica .dtb dall'archivio in memoria.
  2. Carica .dtbo dall'archivio in memoria.
  3. Sovrapponi .dtb con .dtbo per creare un DT unito.
  4. 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 partizione odm ).

Per i dettagli, fare riferimento a Avvio verificato .