Il kernel di Android si basa su un kernel Linux con assistenza a lungo termine (LTS) in upstream. In Google, i kernel LTS vengono combinati con patch specifiche per Android per formare i cosiddetti kernel comuni di Android (ACK).
I ACK più recenti (versione 5.4 e successive) sono noti anche come kernel GKI. I kernel GKI supportano la separazione del codice del kernel di base generico agnostico hardware e dei moduli GKI dai moduli del fornitore specifici per l'hardware.
Il kernel GKI interagisce con moduli del fornitore specifici per l'hardware contenenti codice specifico per la scheda e il SoC (system on chip). L'interazione tra il kernel GKI e i moduli del fornitore è attivata dall'interfaccia del modulo kernel (KMI), 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 del modulo del fornitore:
![Architettura GKI](https://source.android.com/static/docs/core/architecture/images/generic-kernel-image-architecture.png?authuser=6&hl=it)
Glossario del kernel
Questa sezione contiene i termini utilizzati nella documentazione del kernel.
Tipi di kernel
- Android Common Kernel (ACK)
- Un kernel a valle di un kernel LTS e che include patch di interesse per la community Android che non sono state unite ai kernel Linux mainline o LTS (Long Term Support). I ACK più recenti (versione 5.4 e successive) sono noti anche come kernel GKI in quanto supportano la separazione del codice del kernel generico indipendente dall'hardware e dei moduli GKI indipendenti dall'hardware.
- Kernel Android Open Source Project (AOSP)
- Consulta Kernel comune Android.
- Feature Kernel
- Un kernel per cui è garantito l'implementazione delle funzionalità di release della piattaforma. Ad esempio, in Android 12, i due kernel delle funzionalità erano android12-5.4 e android12-5.10. Le funzionalità di Android 12 non possono essere sottoposte a backporting ai kernel 4.19. Il set di funzionalità sarebbe simile a quello di un dispositivo lanciato con 4.19 su Android 11 e sottoposto ad upgrade ad Android 12.
- kernel del core generico
- La parte del kernel GKI comune a tutti i dispositivi.
- Kernel Generic Kernel Image (GKI)
- Qualsiasi kernel ACK più recente (5.4 e versioni successive) (attualmente solo aarch64). Questo kernel è composto da due parti: il kernel GKI principale con codice comune a tutti i dispositivi e i moduli GKI sviluppati da Google che possono essere caricati dinamicamente sui dispositivi, se applicabile.
- Kernel dell'interfaccia del modulo del kernel (KMI)
- Consulta il kernel GKI.
- Avvia il kernel
- Un kernel valido per il lancio di un dispositivo per una determinata release della piattaforma Android. Ad esempio, in Android 12 i kernel di lancio validi erano 4.19, 5.4 e 5.10.
- Kernel con assistenza a lungo termine (LTS)
- Un kernel Linux supportato per 2-6 anni. I kernel LTS vengono rilasciati una volta all'anno e sono la base di ogni ACK di Google.
Tipi di filiali
- Ramo del kernel KMI ACK
- Il ramo per cui vengono compilati 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 in upstream, il nuovo kernel GKI corrispondente viene derivato da android-mainline.
- Mainline Linux
- Il ramo di sviluppo principale per i kernel Linux upstream, inclusi i kernel LTS.
Altri termini
- Immagine di avvio certificata
- Il kernel è stato caricato in formato binario (
boot.img
) e installato 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 del kernel caricabile dinamicamente (DLKM)
- Un modulo che può essere caricato dinamicamente durante l'avvio del dispositivo in base alle sue esigenze. I moduli GKI e dei fornitori sono entrambi tipi di DLKM. I moduli DLKM vengono rilasciati in formato
.ko
e possono essere driver o fornire altre funzionalità del kernel. - Progetto GKI
- Un progetto Google che risolve la frammentazione del kernel separando le funzionalità del kernel di base comuni dal supporto di SoC e schede specifici del fornitore in moduli caricabili.
- Generic Kernel Image (GKI)
- Un'immagine di avvio certificata da Google che contiene un kernel GKI creato da un albero di origine ACK ed è adatta per essere trasferita nella partizione di avvio di un dispositivo Android.
- KMI
- 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 da dati globali che sono stati identificati come dipendenze del fornitore/OEM utilizzando elenchi di simboli per partner.
- Moduli GKI
- Moduli del kernel creati da Google che possono essere caricati dinamicamente sui dispositivi, se applicabile.
Questi moduli vengono creati come elementi 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 al momento della compilazione del kernel e sono compatibili solo con il kernel GKI con cui sono stati compilati. - Modulo Fornitore
- Un modulo specifico per l'hardware sviluppato da un partner e contenente 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 il kernel di Android, ti consigliamo di iniziare leggendo quanto segue:
- Kernel stabili a lungo termine: informazioni di base sui kernel LTS upstream che vengono inseriti negli ACK.
- Android Common Kernels: informazioni di base sugli ACK.
- Se non hai mai sviluppato kernel GKI, inizia leggendo Sviluppo GKI.