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:

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
.koe 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:
- Kernel LTS (Long Term Stable) - informazioni di base sui kernel LTS upstream che vengono utilizzati negli ACK.
- Android Common Kernels - informazioni di base sugli ACK.
Se non hai mai sviluppato kernel GKI, inizia leggendo l'articolo Sviluppo di GKI.