Panoramica dei moduli del kernel

Esistono due tipi di moduli kernel: indipendenti dall'hardware Moduli GKI e specifiche hardware moduli dei fornitori. Questa pagina fornisce una panoramica di entrambi i tipi di moduli.

Moduli GKI

I moduli di immagine kernel generica (GKI) vengono utilizzati per distribuire un kernel non richiesto per l'avvio separate dal kernel generico del core. Con i moduli GKI puoi: Scegliere funzionalità kernel specifiche da usare, spesso riducendo le dimensioni dell'immagine kernel. e il consumo della memoria di runtime. Grazie alla riduzione delle dimensioni, GKI è particolarmente adatto Dispositivi Android Go e altri fattori di forma soggetti a limitazioni delle risorse.

I moduli GKI forniscono inoltre un meccanismo per consentire ai fornitori di incorporare nuovi di funzionalità upstream dopo il traguardo di blocco KMI. Codice integrato non può essere sostituito senza creare un'altra immagine, mentre il codice fornito come modulo può essere sostituito con un altro modulo.

I moduli GKI utilizzano l'infrastruttura di firma del tempo di build del kernel per differenziare tra GKI e altri moduli in fase di esecuzione. È consentito caricare i moduli non firmati purché utilizzino solo simboli presenti nella lista consentita o forniti da altri moduli non firmati.

Esistono due tipi logici di moduli GKI: modulo GKI protetto e modulo GKI non protetto.

Modulo GKI protetto

Un modulo GKI protetto è fornito da Google, non è soggetto a restrizioni in alcun modo e si comporta come se fosse stato creato con il kernel dopo il caricamento. Inoltre, I moduli GKI protetti hanno le seguenti caratteristiche:

  • I moduli GKI protetti hanno accesso ai simboli del kernel non KMI che non sono disponibili per i moduli del fornitore o per i moduli GKI non protetti.
  • I moduli GKI protetti possono esportare simboli che diventano parte della piattaforma KMI purché siano menzionati in un elenco di simboli.
  • I moduli GKI protetti non possono essere sostituiti dai moduli del fornitore.

Un modulo GKI protetto è la classe predefinita di moduli GKI. Tutte le GKI i moduli sono considerati protetti al momento del blocco del KMI.

Modulo GKI non protetto

Un modulo GKI non protetto può essere sostituito da un modulo del fornitore. Dopo il blocco KMI, un modulo GKI protetto potrebbe essere riclassificato come non protetto se il team GKI decide che i fornitori devono eseguire l'override dell'implementazione predefinita con una versione che include nuove funzionalità di Linux upstream. Sul successivo nella release GKI, i moduli non protetti vengono riclassificati come protetti dopo il codice upstream arriva in un Android Common Kernel (ACK). Moduli GKI non protetti presentano le seguenti caratteristiche:

  • I moduli GKI non protetti hanno lo stesso accesso ai simboli esportati del fornitore moduli.
  • I moduli GKI non protetti non possono esportare simboli esportati da GKI protetto moduli.
  • I moduli GKI non protetti devono conservare tutte le interfacce KMI come se facessero parte del core del kernel.
  • I moduli GKI non protetti possono essere sostituiti dai moduli del fornitore.

Moduli dei fornitori

Un modulo del fornitore viene fornito dai partner per implementare SoC e dispositivi specifici le funzionalità di machine learning. Qualsiasi modulo kernel esistente che non viene distribuito come parte Il kernel GKI può essere distribuito come modulo del fornitore.

Poiché uno degli obiettivi principali del progetto GKI è ridurre al minimo specifico per l'hardware nel kernel, i fornitori possono aspettarsi non includerà moduli che gestiscono chiaramente il proprio hardware. Per Ad esempio, il fornitore ABC Inc. può aspettarsi che configurazioni come CONFIG_ABC_SOC_SUPPORT non verrà attivato come integrato o caricabile moduli GKI senza il loro supporto.

Se un driver o framework del kernel esiste in ACK, ma non vengono consegnati come parte del kernel GKI, i fornitori possono modificare il driver e fornirlo come fornitore in maggior dettaglio più avanti in questo modulo. Sconsigliamo di apportare modifiche per moduli non specifici del fornitore perché le stesse capacità potrebbero essere fornite con il kernel GKI in una nella versione futura. Quando il kernel GKI contiene funzionalità fornite da un fornitore modulo del fornitore, il modulo del fornitore non si caricherà. Ad esempio: CONFIG_GREYBUS non è impostato per GKI in Android 11, quindi i fornitori possono distribuire moduli greybus per i fornitori. Tuttavia, CONFIG_GREYBUS potrebbe essere abilitati come GKI integrato o modulo in Android 12, In questo caso, i moduli del fornitore greybus non verranno caricati. Una best practice consiste nell'utilizzare la versione upstream di driver non specifici del fornitore, se vengono pubblicati e i moduli dei fornitori.

Puoi pubblicare moduli del fornitore nel vendor o nel vendor_boot dell'immagine. I moduli richiesti all'inizio del processo di avvio devono trovarsi nel seguente paese: vendor_boot. Al caricamento dei moduli da vendor_boot è associato un costo di avvio.