Progetto immagine kernel generica (GKI)

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

Cronologia

Ogni dispositivo basato su Android ha bisogno di un kernel di produzione. Prima di GKI, i kernel erano personalizzati e basati su Android Common Kernel (ACK), con modifiche specifiche per dispositivo apportate dai fornitori di system on a chip (SoC) e dagli OEM.

Questa personalizzazione potrebbe comportare che fino al 50% del codice del kernel sia codice out-of-tree e non provenga da kernel Linux upstream o ACK. Pertanto, la natura personalizzata dei kernel pre-GKI ha comportato una frammentazione significativa del 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 Bollettino sulla sicurezza di Android (ASB) devono essere sottoposte a backporting in ciascun 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 supportati a lungo termine

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

Tuttavia, con tutte le modifiche personalizzate nei kernel dei dispositivi, è difficile unire le correzioni LTS nei kernel dei dispositivi.

Inibire 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 sull'implementazione di nuove funzionalità di Android nel kernel. Ciò ha rallentato l'innovazione e ha causato un aumento delle dimensioni e della complessità del codice.

Difficoltà a contribuire con le modifiche al kernel a 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 è stata disponibile upstream, a quando è stata inserita in un dispositivo. Questo lungo ritardo tra il rilascio 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, il codice sorgente era cambiato, rendendo difficile mostrare la pertinenza della patch.

Risolvi la frammentazione: Generic Kernel Image

Il progetto Generic Kernel Image (GKI) risolve la frammentazione del kernel unificando il kernel principale e spostando il supporto di SoC e scheda dal kernel principale ai moduli del fornitore caricabili. GKI presenta anche un'interfaccia del 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 è creato a partire dalle origini ACK.
  • Il kernel GKI è un singolo binario del kernel più moduli caricabili associati per architettura, per release LTS.
  • Il kernel GKI viene testato con tutte le release della piattaforma Android supportate per l'ACK associato. Non è prevista la rimozione di funzionalità per l'intero ciclo di vita di una versione del kernel GKI.
  • Il kernel GKI espone una KMI stabile ai driver all'interno di una determinata LTS.
  • Il kernel GKI non contiene codice specifico per il SoC o la scheda.

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

Immagine comune

A partire da Android 12, i dispositivi forniti con la versione del kernel 5.10 o successive devono essere forniti con il kernel GKI. Le build di rilascio di Generic Kernel Image (GKI) vengono aggiornate regolarmente con correzioni di bug critici 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 delle prestazioni o del consumo energetico quando sostituisci il kernel del prodotto con il kernel GKI.
  • Consenti ai partner di fornire correzioni di sicurezza del kernel e correzioni di bug senza il coinvolgimento del fornitore.
  • Ridurre il costo dell'aggiornamento della versione principale del kernel per i dispositivi.
  • Mantieni un singolo binario del kernel GKI per architettura aggiornando le versioni del kernel con una procedura chiara per l'upgrade.