Panoramica del kernel

Il kernel Android è basato su un kernel Linux LTS (Long Term Supported) upstream . In Google, i kernel LTS vengono combinati con patch specifiche di Android per formare gli Android Common Kernels (ACK).

Gli ACK vengono creati dal repository kernel/common. Questo repository è un superset del kernel Linux upstream, con patch aggiuntive specifiche di Android.

I kernel ACK 5.10 e versioni successive sono noti anche come kernel _GKI (Generic Kernel Image)_ I kernel GKI supportano la separazione del codice del kernel core generico indipendente dall'hardware e dei moduli GKI dai moduli specifici del fornitore dell'hardware.

L'interazione tra il kernel GKI e i moduli del fornitore è abilitata dalla KMI (Kernel Module Interface) costituita da elenchi di simboli che identificano le funzioni e i dati globali richiesti dai moduli del fornitore. La Figura 1 mostra l'architettura del kernel GKI e dei moduli del fornitore:

Architettura del kernel GKI e del modulo fornitore.

Figura 1. Architettura del kernel GKI e dei moduli del fornitore.

Glossario dei kernel

Di seguito sono riportati i termini utilizzati nella documentazione del kernel.

Tipi di kernel

ACK (Android Common Kernel)
Un kernel downstream di un kernel LTS che include patch importanti per la community Android. Queste patch non sono state unite ai kernel Linux mainline o GKI LTS.

I kernel con versioni 5.10 e successive sono anche chiamati kernel GKI (Generic Kernel Image).

Kernel AOSP (Android Open Source Project)
Vedi Android Common Kernel.

Le funzionalità di Android 12 non possono essere backportate ai kernel 4.19; il set di funzionalità sarebbe simile a un dispositivo lanciato con 4.19 su Android 11 e aggiornato ad Android 12.

Kernel GKI (Generic Kernel Image)

Qualsiasi kernel ACK 5.10 e versioni successive(solo aarch64). Il kernel GKI è composto da due parti:

  • Kernel generico : la parte del kernel GKI comune a tutti i dispositivi.

  • Moduli GKI : moduli del kernel creati da Google che possono essere caricati dinamicamente sui dispositivi, ove applicabile. Questi moduli vengono creati come artefatti del kernel GKI e vengono forniti insieme a GKI come archivio system_dlkm_staging_archive.tar.gz. I moduli GKI sono firmati da Google utilizzando la coppia di chiavi del tempo di compilazione del kernel e sono compatibili solo con il kernel GKI con cui sono stati creati.

Kernel KMI (Kernel Module Interface)

Vedi kernel GKI.

Kernel LTS (Long Term Supported)

Un kernel Linux supportato per 2-6 anni. I kernel LTS sono rilasciati una volta all'anno e sono la base di ogni Android Common Kernel di Google .

Tipi di branch

Branch del kernel KMI ACK
Il branch per cui vengono creati i kernel GKI. I nomi dei branch corrispondono alle versioni del kernel, ad esempio android15-6.6.
Android-mainline
Il branch di sviluppo principale per le funzionalità di Android. Quando viene dichiarato un nuovo kernel LTS upstream, il nuovo kernel GKI corrispondente viene ramificato da android-mainline.

Linux mainline : il branch di sviluppo principale per i kernel Linux upstream, inclusi i kernel LTS.

Altri termini

Immagine di avvio certificata
Il kernel fornito in formato binario (boot.img) e installato sul dispositivo. Questa immagine è considerata certificata perché contiene certificati incorporati che consentono a Google di verificare che il dispositivo venga fornito con un kernel certificato da Google.
Modulo del kernel caricabile dinamicamente (DLKM)
Un modulo che può essere caricato dinamicamente durante l'avvio del dispositivo a seconda delle esigenze del dispositivo. I moduli GKI e del fornitore sono entrambi tipi di DLKM. I DLKM vengono rilasciati in formato .ko e possono essere driver o fornire altre funzionalità del kernel.
Progetto GKI
Un progetto Google che affronta la frammentazione del kernel separando la funzionalità del kernel core comune dal supporto specifico per SoC e scheda del fornitore in moduli caricabili.

GKI (Generic Kernel Image) : un'immagine di avvio certificata da Google che contiene un kernel GKI creato da un albero di origine ACK ed è adatta per essere installata nella partizione di avvio di un dispositivo con Android.

KMI (Kernel Module Interface)
Un'interfaccia tra il kernel GKI e i moduli del fornitore che consente di aggiornare i moduli del fornitore indipendentemente dal kernel GKI. Questa interfaccia è costituita da funzioni del kernel e dati globali identificati come dipendenze del fornitore/OEM utilizzando elenchi di simboli per partner.
Modulo del fornitore
Un modulo specifico dell'hardware sviluppato da un partner e che contiene funzionalità specifiche per SoC e dispositivo. Un modulo del fornitore è un tipo di modulo del kernel caricabile dinamicamente.

Passaggi successivi

Se non hai mai sviluppato kernel Android, inizia leggendo i seguenti articoli:

Se non hai mai sviluppato kernel GKI, inizia leggendo l'articolo Sviluppo di GKI.