Per compilare l'origine della struttura ad albero dei dispositivi, è possibile utilizzare il compilatore DTC (Device Tree compiler) . Tuttavia, prima di applicare la struttura ad albero dei dispositivi (DT) overlay al DT principale di destinazione, e verificare il risultato simulando il comportamento dell'overlay ad albero dei dispositivi (DTO).
Compila con DTC
Quando utilizzi dtc
per compilare .dts
, devi aggiungere
-@
per aggiungere un nodo __symbols__
nella
.dtbo
risultanti. Il nodo __symbols__
contiene un
elenco di tutti i nodi contrassegnati da un'etichetta, che la libreria DTO può utilizzare
come riferimento.
Comando di esempio per creare il DT principale .dts
:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Comando di esempio per creare l'overlay DT .dts
:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Verifica i risultati del DTO sull'host
Verifica può aiutarti a identificare gli errori che potrebbero verificarsi durante il posizionamento
il DT overlay sul DT principale. Prima di aggiornare il target, puoi verificare
il risultato della sovrapposizione di DT sull'host simulando il comportamento di DTO utilizzando
/include/
a .dts
.
Figura 1. Utilizzare la sintassi /include/ per simulare DTO sull'host.
- Crea una copia dell'overlay
.dts
. Nella copia, rimuovi intestazione prima riga. Esempio:/dts-v1/; /plugin/;
Salva il file comemy_overlay_dt_wo_header.dts
(o qualsiasi il nome file desiderato). - Crea una copia dell'elemento
.dts
principale. Nella copia, dopo il nell'ultima riga, aggiungi la sintassi di inclusione per il file creato nel passaggio 1. Ad esempio:/include/ "my_overlay_dt_wo_header.dts"
Salva il file comemy_main_dt_with_include.dts
(o qualsiasi il nome file desiderato). - Usa
dtc
per la compilazionemy_main_dt_with_include.dts
per ottenere il DT unito, che dovrebbe sarà lo stesso risultato di un gruppo DTO. Ad esempio:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- Usa
dtc
per eseguire il dump dimy_merged_dt.dto
.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Verifica DTO in Android 9
Android 9 richiede un overlay BLOB con albero dei dispositivi (DTBO). Per aggiungere nodi o apportare modifiche alle proprietà nel SoC DT, il bootloader deve sovrapporre dinamicamente un DT specifico del dispositivo il SoC DT.
Indica gli overlay applicati
Per attivare lo
Suite di test del fornitore (VTS) per valutare la correttezza dell'overlay
i fornitori devono aggiungere un nuovo parametro della riga di comando kernel
androidboot.dtbo_idx
che indica gli overlay selezionati
la partizione DTBO. In Android 12 con la versione del kernel
5.10 o versioni successive, questo parametro passa attraverso bootconfig.
Ad esempio, il parametro androidboot.dtbo_idx=x,y,z
segnala
x
, y
e z
come indici in base zero di
i DTO dalla partizione DTBO applicati (in quell'ordine)
dal bootloader al DT di base.
Gli overlay possono essere applicati ai nodi del DT principale o aggiungere nuovi nodi, ma non può fare riferimento a un nodo aggiunto in un overlay precedente. Questo è necessaria perché l'app overlay non unisce i sovrapponi la tabella dei simboli con la tabella dei simboli DT principale (l'unione evita conflitti nei nomi dei simboli e complicazioni delle dipendenze tra overlay).
Esempio: overlay non validi
In questo esempio, overlay_2.dts
si riferisce al nodo
e
, aggiunto da
overlay_1.dts
. Dopo l'applicazione di overlay_1
al
DT principale, se si tenta di applicare overlay_2
al
risultante DT, l'app overlay non funziona e viene generato un errore che indica che il simbolo
e
non è presente nella tabella dei simboli per il
DT di base.
main.dts | overlay_1.dts | overlay_2.dts |
---|---|---|
[main.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; |
[overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e: e { prop = <0x0a>; phandle = <0x04>; }; }; |
[overlay_2.dts] /dts-v1/; /plugin/; /* invalid! */ &e { prop = <0x0b>; }; |
Esempio: overlay validi
In questo esempio, overlay_2.dts
si riferisce solo al nodo
b
dal DTS principale. Quando
overlay_1
viene applicato al DT di base, seguito dal
app di overlay_2
, il valore della proprietà
prop
nel nodo e
(impostato da overlay_1.dts
) viene sovrascritto dal valore impostato da
overlay_2.dts
.
main.dts | overlay_1.dts | overlay_2.dts |
---|---|---|
[final.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; |
[overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e { prop = <0x0c>; }; }; |
[overlay_2.dts] /dts-v1/; /plugin/; /* valid */ &b { ref1 = <&c>; e { prop = <0x0d>; }; }; |
Implementare la partizione DTBO
Per implementare la partizione DTBO richiesta, assicurati che il bootloader possa eseguire la seguenti:
- Identifica la scheda su cui è in esecuzione e seleziona il corrispondente overlay da applicare.
- Aggiungi il parametro
androidboot.dtbo_idx
al kernel dall'interfaccia a riga di comando.- Il parametro deve indicare gli indici a base zero dei DTO dall'immagine della partizione DTBO applicata al DT di base (nello stesso dell'ordine).
- Gli indici devono fare riferimento alla posizione dell'overlay nel DTBO della partizione di testo.
Per informazioni dettagliate sulla struttura della partizione DTBO, consulta Overlay ad albero dei dispositivi.
Convalida la partizione DTBO
Puoi utilizzare VTS per verificare quanto segue:
- Esistenza del parametro della riga di comando del kernel
androidboot.dtbo_idx
(controllando cheInit
abbia configura automaticamente il sistemaro.boot.dtbo_idx
corrispondente . - Validità della proprietà di sistema
ro.boot.dtbo_idx
(per verificando che la proprietà specifichi almeno un'immagine DTBO valida ). - Validità della partizione DTBO (verifica anche gli overlay nel DTBO applicate al DT di base).
- Vengono presentati ulteriori nodi o modifiche alle proprietà nel DT risultante al kernel Linux.
Ad esempio, nei seguenti overlay e DT finale, l'aggiunta
androidboot.dtbo_idx=5,3
alla riga di comando del kernel
convalida ma aggiungi androidboot.dtbo_idx=3,5
al kernel
dalla riga di comando non supera la convalida.
DT overlay all'indice 3 | DT overlay all'indice 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; |
[overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
DT finale |
---|
/dts-v1/; / { { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __simboli__ { a = "/a"; b = "/b"; c = "/c"; }; }; |