Il kernel Android è basato su un kernel Linux Long Term Supported (LTS) upstream. In Google, i kernel LTS vengono combinati con patch specifiche per Android per formare i cosiddetti Android Common Kernels (ACK) .
Gli ACK più recenti (versione 5.4 e successive) sono noti anche come kernel GKI . I kernel GKI supportano la separazione del codice del kernel generico indipendente dall'hardware e dei moduli GKI dai moduli del fornitore specifici dell'hardware.
Il kernel GKI interagisce con i moduli del fornitore specifici dell'hardware contenenti il sistema su un chip (SoC) e il codice specifico della scheda. L'interazione tra il kernel GKI e i moduli del fornitore è abilitata dall'interfaccia del modulo del kernel (KMI) costituita da elenchi di simboli che identificano le funzioni e i dati globali richiesti dai moduli del fornitore. La Figura 1 mostra il kernel GKI e l'architettura del modulo del fornitore:

Glossario del kernel
Questa sezione contiene i termini usati nella documentazione del kernel.
Tipi di kernel
- Kernel comune di Android (ACK)
- Un kernel che è a valle di un kernel LTS e include patch di interesse per la comunità Android che non sono state unite alla linea principale di Linux o ai kernel LTS (Long Term Supported). Gli ACK più recenti (versione 5.4 e successive) sono noti anche come kernel GKI in quanto supportano la separazione del codice kernel generico indipendente dall'hardware e dei moduli GKI indipendenti dall'hardware.
- Kernel del progetto Android Open Source (AOSP).
- Vedi Kernel comune di Android.
- Funzionalità Kernel
- Un kernel per il quale è garantita l'implementazione delle funzionalità di rilascio della piattaforma. Ad esempio, in Android 12, i due kernel delle funzionalità erano android12-5.4 e android12-5.10. Non è possibile eseguire il backport delle funzionalità di Android 12 ai kernel 4.19; il set di funzionalità sarebbe simile a un dispositivo lanciato con 4.19 su R e aggiornato a S).
- kernel di base generico
- La parte del kernel GKI comune a tutti i dispositivi.
- Kernel generico dell'immagine del kernel (GKI).
- Qualsiasi kernel ACK più recente (5.4 e superiore) (attualmente solo aarch64). Questo kernel è composto da due parti: il nucleo del kernel GKI con codice comune a tutti i dispositivi e i moduli GKI sviluppati da Google che possono essere caricati dinamicamente sui dispositivi ove applicabile.
- Kernel KMI (Kernel Module Interface).
- Vedi kernel GKI .
- Avvia il kernel
- Un kernel valido per l'avvio di un dispositivo per una determinata versione della piattaforma Android. Ad esempio, in Android 12, i kernel di lancio validi erano 4.19, 5.4 e 5.10.
- Kernel con supporto a lungo termine (LTS).
- Un kernel Linux supportato da 2 a 6 anni. I kernel LTS vengono rilasciati una volta all'anno e costituiscono la base per ciascuno degli ACK di Google .
Tipi di ramo
- Ramo del kernel ACK KMI
- Il ramo per il quale vengono creati i kernel GKI . Ad esempio, Android12-5.10 e Android13-5.15.
- Android-mainline
- Il ramo di sviluppo principale per le funzionalità Android. Quando un nuovo kernel LTS viene dichiarato a monte, il nuovo kernel GKI corrispondente viene ramificato da Android-mainline.
- Linea principale di Linux
- Il ramo di sviluppo principale per i kernel Linux upstream, inclusi i kernel LTS.
Altri termini
- Immagine di avvio certificata
- Il kernel è stato consegnato in forma binaria (
boot.img
) e lampeggiato sul dispositivo. Questa immagine è certificata nel senso che contiene certificati incorporati in modo che Google possa verificare che il dispositivo venga fornito con un kernel certificato da Google. - Modulo kernel caricabile dinamicamente (DLKM)
- Un modulo che può essere caricato dinamicamente durante l'avvio del dispositivo a seconda delle esigenze del dispositivo. GKI e moduli del fornitore sono entrambi tipi di DLKM. I DLKM sono rilasciati in formato
.ko
e possono essere driver o fornire altre funzionalità del kernel. - Progetto GKI
- Un progetto di Google che affronta la frammentazione del kernel separando le funzionalità del kernel di base comuni dal SoC specifico del fornitore e il supporto della scheda in moduli caricabili.
- Immagine generica del kernel (GKI)
- Un'immagine di avvio certificata da Google che contiene un kernel GKI creato da un albero dei sorgenti ACK ed è adatta per essere visualizzata nella partizione di avvio di un dispositivo Android.
- KMI
- Un'interfaccia tra il kernel GKI e i moduli del fornitore che consente ai moduli del fornitore di essere aggiornati indipendentemente dal kernel GKI. Questa interfaccia è costituita da funzioni del kernel e dati globali che sono stati identificati come dipendenze fornitore/OEM utilizzando elenchi di simboli per partner.
- Moduli GKI
- Moduli del kernel creati da Google che possono essere caricati dinamicamente sui dispositivi ove applicabile. Questi moduli sono 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. - Modulo venditore
- Un modulo specifico dell'hardware sviluppato da un partner e che contiene SoC e funzionalità specifiche del dispositivo. Un modulo fornitore è un tipo di modulo kernel caricabile dinamicamente.
Qual è il prossimo?
- Se sei nuovo nello sviluppo del kernel Android, potresti iniziare leggendo quanto segue:
- Kernel stabili a lungo termine - Background sui kernel LTS upstream che alimentano gli ACK.
- Android Common Kernel - Background sugli ACK.
- Se sei nuovo nello sviluppo del kernel GKI, inizia leggendo GKI development .
- Se stai usando una versione del kernel 4.19 o precedente e stai cercando la documentazione correlata, fai riferimento alla sezione Panoramica sui kernel precedenti (<=4.19) .