Compila e verifica

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.

  1. Crea una copia dell'overlay .dts. Nella copia, rimuovi intestazione prima riga. Esempio:
    /dts-v1/;
    /plugin/;
    
    Salva il file come my_overlay_dt_wo_header.dts (o qualsiasi il nome file desiderato).
  2. 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 come my_main_dt_with_include.dts (o qualsiasi il nome file desiderato).
  3. Usa dtc per la compilazione my_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
    
  4. Usa dtc per eseguire il dump di my_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:

  1. Identifica la scheda su cui è in esecuzione e seleziona il corrispondente overlay da applicare.
  2. 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 che Init abbia configura automaticamente il sistema ro.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";
	};
};