È possibile utilizzare Device Tree Compiler (DTC) per compilare i file di origine della struttura dei dispositivi. Tuttavia, prima di applicare la SEF sovrapposta sulla SEF principale di destinazione, è opportuno verificare anche il risultato simulando il comportamento della SEF.
Compilazione con DTC
Quando si utilizza dtc
per compilare .dts
, è necessario aggiungere l'opzione -@
per aggiungere un nodo __symbols__
nel .dtbo
risultante. Il nodo __symbols__
contiene un elenco di tutti i nodi contrassegnati con un'etichetta, che la libreria DTO può utilizzare come riferimenti.
Comando di esempio per creare il file DT .dts
principale:
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
Verificare i risultati DTO sull'host
La verifica può aiutare a identificare gli errori che potrebbero verificarsi quando si posiziona la SEF sovrapposta sulla SEF principale. Prima di aggiornare la destinazione, è possibile verificare il risultato della sovrapposizione di DT sull'host simulando il comportamento di DTO utilizzando /include/
in .dts
.
/include/
per simulare DTO sull'host- Crea una copia dell'overlay
.dts
. Nella copia, rimuovi l'intestazione della prima riga. Esempio:/dts-v1/; /plugin/;
Salva il file comemy_overlay_dt_wo_header.dts
(o qualsiasi nome di file tu voglia). - Crea una copia del
.dts
principale. Nella copia, dopo l'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 nome file desiderato). - Usa
dtc
per compilaremy_main_dt_with_include.dts
per ottenere il DT unito, che dovrebbe essere lo stesso risultato di DTO. Ad esempio:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- Usa
dtc
per eseguire il dumpmy_merged_dt.dto
.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Verifica DTO in Android 9
Android 9 richiede una partizione DTBO (Device Tree Blob Overlay). Per aggiungere nodi o apportare modifiche alle proprietà nel SoC DT, il bootloader deve sovrapporre dinamicamente un DT specifico del dispositivo sul SoC DT.
Indicazione delle sovrapposizioni applicate
Per consentire alla Vendor Test Suite (VTS) di valutare la correttezza dell'applicazione overlay, i fornitori devono aggiungere un nuovo parametro della riga di comando del kernel androidboot.dtbo_idx
che indichi gli overlay selezionati dalla partizione DTBO. In Android 12 che utilizza la versione del kernel 5.10 o successiva, questo parametro passa attraverso bootconfig. Ad esempio, il parametro androidboot.dtbo_idx=x,y,z
riporta x
, y
e z
come indici in base zero dei Device Tree Overlays (DTO) dalla partizione DTBO applicata (in quest'ordine) dal bootloader alla base Albero dei dispositivi (DT).
Le sovrapposizioni possono applicarsi ai nodi dall'albero del dispositivo principale o aggiungere nuovi nodi, ma non possono fare riferimento a un nodo aggiunto in una sovrapposizione precedente. Questa limitazione è necessaria perché l'applicazione di sovrapposizione non unisce la tabella dei simboli di sovrapposizione con la tabella dei simboli DT principale (la mancata unione evita conflitti nei nomi dei simboli e complicazioni delle dipendenze tra sovrapposizioni).
Esempio: overlay non validi
In questo esempio, overlay_2.dts
si riferisce al nodo e
, che è stato aggiunto da overlay_1.dts
. Dopo aver applicato overlay_1
alla SEF principale, se si tenta di applicare overlay_2
alla SEF risultante, l'applicazione di overlay fallirà con un errore indicante che il simbolo e
non è presente nella tabella dei simboli della SEF di base.
main.dts | sovrapposizione_1.dts | sovrapposizione_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: sovrapposizioni valide
In questo esempio, overlay_2.dts
si riferisce solo al nodo b
del DTS principale. Quando overlay_1
viene applicato al DT di base, seguito quindi dall'applicazione 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 | sovrapposizione_1.dts | sovrapposizione_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>; }; }; |
Implementazione della partizione DTBO
Per implementare la partizione DTBO richiesta, assicurati che il bootloader possa eseguire le seguenti operazioni:
- Identificare la scheda su cui è in esecuzione e selezionare gli overlay corrispondenti da applicare.
- Aggiungi il parametro
androidboot.dtbo_idx
alla riga di comando del kernel.- Il parametro deve indicare gli indici in base zero dei DTO dall'immagine della partizione DTBO applicata al DT di base (nello stesso ordine).
- Gli indici devono fare riferimento alla posizione dell'overlay nella partizione DTBO.
Per dettagli sulla struttura della partizione DTBO, fare riferimento a Device Tree Overlays su source.android.com.
Convalida della partizione DTBO
È possibile utilizzare VTS per verificare quanto segue:
- Esistenza del parametro della riga di comando del kernel
androidboot.dtbo_idx
(controllando cheInit
abbia impostato automaticamente la corrispondente proprietà di sistemaro.boot.dtbo_idx
). - Validità della proprietà di sistema
ro.boot.dtbo_idx
(controllando che la proprietà specifichi almeno un indice di immagine DTBO valido). - Validità della partizione DTBO (verifica anche gli overlay nella partizione DTBO applicati al DT base).
- Ulteriori nodi o modifiche alle proprietà nel DT risultante vengono presentati al kernel Linux.
Ad esempio, nelle sovrapposizioni seguenti e nel DT finale, l'aggiunta di androidboot.dtbo_idx=5,3
alla riga di comando del kernel supera la convalida, ma l'aggiunta androidboot.dtbo_idx=3,5
alla riga di comando del kernel non supera la convalida.
Sovrapposizione DT sull'indice 3 | Sovrapposizione DT sull'indice 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; | [overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
DT finale |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2024-04-29 UTC.