Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Compilazione e verifica

È possibile utilizzare Device Tree Compiler (DTC) per compilare i file Device Tree Source. Tuttavia, prima di applicare l'overlay DT sul DT principale di destinazione, è necessario verificare anche il risultato simulando il comportamento di DTO.

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 per i riferimenti.

Comando di esempio per creare DT .dts principali:

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 DTO sull'host

La verifica può aiutarti a identificare gli errori che potrebbero verificarsi quando si posiziona l'overlay DT sul DT 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 .

Figura 1. Utilizzare la sintassi /include/ per simulare DTO sull'host
  1. Crea una copia dell'overlay .dts . Nella copia, rimuovi l'intestazione della prima riga. Esempio:
    /dts-v1/;
    /plugin/;
    
    Salvare il file come my_overlay_dt_wo_header.dts (o qualsiasi nome di file desiderato).
  2. Crea una copia del file .dts principale. Nella copia, dopo l'ultima riga, aggiungi la sintassi di inclusione per il file creato al passaggio 1. Ad esempio:
    /include/ "my_overlay_dt_wo_header.dts"
    
    Salva il file come my_main_dt_with_include.dts (o qualsiasi nome di file desiderato).
  3. Usa dtc per compilare my_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
    
  4. Usa dtc per my_merged_dt.dto dump di my_merged_dt.dto .
    dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
    

Verifica di 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 al SoC DT.

Indica le sovrapposizioni applicate

Per consentire a 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 indica gli overlay selezionati dalla partizione DTBO. Ad esempio, il parametro androidboot. dtbo_idx=x,y,z rapporti x , y e z come gli indici a base zero del dispositivo albero Overlay (DTOs) dalla partizione DTBO applicato (in questo ordine) dal bootloader al dispositivo di base dell'albero (DT).

Gli overlay possono essere applicati ai nodi dall'albero dei dispositivi principale o aggiungere nuovi nodi, ma non possono fare riferimento a un nodo aggiunto in un overlay precedente. Questa restrizione è 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 la complicazione delle dipendenze tra le sovrapposizioni).

Esempio: sovrapposizioni non valide

In questo esempio, overlay_2.dts riferisce al nodo e , che è stato aggiunto da overlay_1.dts . Dopo che overlay_1 è stato applicato al DT principale, se si tenta di applicare overlay_2 al DT risultante, l'applicazione overlay fallirà con un errore 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: sovrapposizioni valide

In questo esempio, overlay_2.dts riferisce solo al nodo b dal DTS principale. Quando overlay_1 viene applicato al DT di base, quindi seguito 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 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>;
      };
};

Implementazione della partizione DTBO

Per implementare la partizione DTBO richiesta, assicurarsi che il bootloader possa eseguire le seguenti operazioni:

  1. Identifica la scheda su cui gira e seleziona gli overlay corrispondenti da applicare.
  2. Aggiungi il parametro androidboot.dtbo_idx alla riga di comando del kernel.
    • Il parametro deve indicare gli indici a base zero dei DTO dall'immagine della partizione DTBO applicata alla DT di base (nello stesso ordine).
    • Gli indici devono fare riferimento alla posizione dell'overlay nella partizione DTBO.

Per i 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 (verificando che Init abbia impostato automaticamente la corrispondente proprietà di sistema ro.boot.dtbo_idx ).
  • Validità della proprietà di sistema ro.boot.dtbo_idx (verificando 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 di base).
  • Nodi aggiuntivi o modifiche alle proprietà nel DT risultante vengono presentati al kernel Linux.

Ad esempio, nelle seguenti sovrapposizioni e DT finale, l'aggiunta di androidboot.dtbo_idx=5,3 alla riga di comando del kernel supera la convalida, ma l'aggiunta di androidboot.dtbo_idx=3,5 alla riga di comando del kernel non supera la convalida.

Sovrapponi DT all'indice 3 Sovrapponi DT 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/;
/ {

	a {
		phandle = <0x1>;
	};

	b {
		phandle = <0x2>;
	};

	c {
		phandle = <0x3>;
		prop = <0xfe> ;
	};

	__symbols__ {
		a = "/a";
		b = "/b";
		c = "/c";
	};
};