Panoramica del kernel

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
Figura 1. Architettura GKI

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:
  • Se non hai mai sviluppato kernel GKI, inizia leggendo Sviluppo GKI.