Progetto immagine kernel generica (GKI)

Questa pagina descrive il progetto Generic Kernel Image (GKI) e come aumenta la stabilità e migliora la sicurezza di Android.

Cronologia

Ogni dispositivo Android richiede un kernel di produzione. Prima del GKI, i kernel erano personalizzati e basati sul kernel Android Common (ACK), con modifiche specifiche per il dispositivo apportate da fornitori e OEM di system on chip (SoC).

Questa personalizzazione potrebbe comportare che fino al 50% del codice del kernel sia codice out-of-tree e non di kernel Linux o ACK upstream. Di conseguenza, la natura personalizzata dei kernel precedenti a GKI ha comportato una frammentazione significativa dei kernel.

Costi della frammentazione

La frammentazione del kernel ha diversi effetti negativi sulla community Android.

Gli aggiornamenti della sicurezza richiedono molto lavoro

Le patch di sicurezza citate nel Android Security Bulletin (ASB) devono essere sottoposte a backport in ogni kernel del dispositivo. Tuttavia, a causa della frammentazione del kernel, è proibitivo propagare le correzioni di sicurezza ai dispositivi Android sul campo.

È difficile unire gli aggiornamenti con il supporto a lungo termine

Le release Long-Term Supported (LTS) includono correzioni di sicurezza e altre correzioni di bug critiche. Mantenersi al passo con le release LTS si è dimostrato il modo più efficace per fornire correzioni di sicurezza. Sui Pixel, è stato scoperto che il 90% dei problemi di sicurezza del kernel segnalati nell'ASB era già stato risolto per i dispositivi che rimangono aggiornati.

Tuttavia, con tutte le modifiche personalizzate nei kernel del dispositivo, è difficile unire semplicemente le correzioni LTS ai kernel del dispositivo.

Impedire gli upgrade delle release della piattaforma Android

La frammentazione rende difficile l'aggiunta di nuove funzionalità di Android che richiedono modifiche al kernel ai dispositivi sul campo. Il codice del framework Android doveva tenere conto delle diverse varianti del kernel e non poteva fare affidamento sulle nuove funzionalità di Android implementate nel kernel. Ciò ha rallentato l'innovazione e ha causato un aumento delle dimensioni e della complessità del codice.

È difficile apportare modifiche al kernel di Linux upstream

Il modo frammentato di inserire le patch nei kernel di produzione ha causato un ritardo fino a 18 mesi dal momento in cui una release LTS era disponibile in upstream a quando era presente in un dispositivo. Questo lungo ritardo tra la release del kernel upstream e i prodotti rende difficile per la community Android inserire le funzionalità e i driver necessari nei kernel upstream. Quando un utente ha inviato suggerimenti per miglioramenti, la base di codice era cambiata, il che rendeva difficile dimostrare la pertinenza della patch.

Correggi la frammentazione: immagine del kernel generica

Il progetto Generic Kernel Image (GKI) risolve la frammentazione del kernel unificando il kernel di base e spostando il supporto di SoC e schede dal kernel di base in moduli del fornitore caricabili. GKI presenta anche un'interfaccia di Modulo del kernel (KMI) stabile per i moduli del fornitore, in modo che i moduli e il kernel possano essere aggiornati in modo indipendente. Alcune caratteristiche del kernel GKI sono:

  • Il kernel GKI viene compilato dalle sorgenti ACK.
  • Il kernel GKI è un file binario a kernel singolo più i moduli caricabili associati per architettura e release LTS.
  • Il kernel GKI viene testato con tutte le release della piattaforma Android supportate per l'ACK associato. Non è prevista la ritiro delle funzionalità per l'intera vita utile di una versione del kernel GKI.
  • Il kernel GKI espone un KMI stabile ai driver all'interno di un determinato LTS.
  • Il kernel GKI non contiene codice specifico per SoC o per la scheda.

Per un'immagine dell'architettura GKI, consulta la Panoramica del kernel.

Immagine comune

A partire da Android 12, i dispositivi con kernel versione 5.10 o successive devono essere forniti con il kernel GKI. Le build di release dell'immagine del kernel generica (GKI) vengono aggiornate regolarmente con correzioni di bug critiche e LTS. Poiché la stabilità binaria viene mantenuta per il KMI, puoi installare queste immagini di avvio senza apportare modifiche alle immagini del fornitore. Il progetto GKI ha i seguenti obiettivi:

  • Non introdurre regressioni significative del rendimento o della potenza quando sostituisci il kernel del prodotto con il kernel GKI.
  • Consentire ai partner di fornire correzioni di bug e correzioni di sicurezza del kernel senza coinvolgimento del fornitore.
  • Riduci il costo dell'upgrade della versione principale del kernel per i dispositivi.
  • Gestisci un singolo file binario del kernel GKI per architettura aggiornando le versioni del kernel con una procedura chiara per l'upgrade.