Un kernel del prodotto, noto anche come kernel del dispositivo o kernel OEM, è la che distribuisci sul tuo dispositivo. Prima di GKI, il kernel del prodotto era da una serie di modifiche upstream del kernel. La figura 1 mostra come il kernel aggiunte restituiscono un kernel del prodotto (kernel OEM/dispositivo):
Figura 1. Creazione del kernel del prodotto pre-GKI.
- Il kernel Linux supportato a lungo termine (LTS) di kernel.org è stato modificato con patch specifiche per Android che generano un Android Common Kernel (ACK).
- L'ACK è stato modificato dai fornitori che hanno aggiunto il supporto per il proprio system-on-a-chip (SoC). I fornitori potrebbero anche aggiungere ottimizzazioni delle prestazioni o dell'alimentazione. La il kernel risultante è chiamato kernel del fornitore.
- Infine, il kernel del fornitore è stato ulteriormente modificato dagli OEM con i driver di dispositivo e le personalizzazioni che ritengono necessarie. Il kernel risultante è chiamato kernel del prodotto.
Tutte queste modifiche possono generare fino al 50% di che il codice kernel sia codice out-of-tree e non da kernel Linux o ACK upstream. Prima di GKI, quasi tutti i dispositivi avevano un kernel personalizzato che e frammentazione del lavoro.
Costi della frammentazione
La frammentazione del kernel ha diversi effetti negativi sulla community Android.
Gli aggiornamenti della sicurezza richiedono molto lavoro
Patch di sicurezza citate in Bollettino sulla sicurezza di Android (ASB) deve essere sottoposto a backport in ognuno dei kernel del dispositivo. Tuttavia, a causa del kernel frammentazione, è eccessivamente costoso propagare le correzioni di sicurezza Dispositivi Android sul campo.
Difficile unire gli aggiornamenti supportati a lungo termine
Le release supportate a lungo termine (LTS) includono correzioni di sicurezza e altre correzioni di bug critici. Essere sempre al passo con le release di LTS si è rivelata la modo più efficace per fornire correzioni di sicurezza. Sui dispositivi Pixel, ha scoperto che il 90% dei problemi di sicurezza del kernel segnalati nell'ASB aveva è già stato risolto per i dispositivi sempre aggiornati.
Tuttavia, con tutte le modifiche personalizzate nei kernel del dispositivo, difficile unire le correzioni LTS ai kernel dei dispositivi.
Blocco degli upgrade delle release della piattaforma Android
La frammentazione rende difficile le nuove funzionalità Android che richiedono il kernel modifiche da aggiungere ai dispositivi nel campo. Il codice Android Framework deve assumere sono supportate fino a cinque versioni del kernel e che nessuna modifica al kernel per il rilascio della nuova piattaforma (Android 10 supporta i kernel 3.18, 4.4, 4.9, 4.14 e 4.19, che in alcuni casi non hanno sono state migliorate con nuove funzionalità a partire da Android 8 nel 2017).
Difficile contribuire alle modifiche del kernel nella versione upstream di Linux
Con tutte le modifiche apportate al kernel, la maggior parte dei dispositivi di punta offre
con una versione del kernel che abbia già da almeno 18 mesi. Ad esempio,
Il kernel 4.14 è stato rilasciato da
kernel.org
a novembre 2017 e le
primi smartphone Android con kernel 4.14 spediti nella primavera del 2019.
Questo lungo ritardo tra il rilascio del kernel upstream e i prodotti rende difficile affinché la community Android possa caricare le funzionalità e i driver necessari nell'upstream i kernel.
Correggi la frammentazione: immagine del kernel generica
Il progetto Generic Kernel Image (GKI) risolve la frammentazione del kernel. unificazione del kernel principale e spostamento del supporto di SoC e schede al di fuori del kernel principale in moduli del fornitore caricabili. GKI presenta anche un modulo kernel stabile Interfaccia (KMI) per i moduli del fornitore, quindi i moduli e il kernel possono essere aggiornati in modo indipendente. Alcune caratteristiche del kernel GKI sono:
- Il kernel GKI viene creato a partire da origini ACK.
- Il kernel GKI è un file binario a kernel singolo con più moduli caricabili associati
per architettura e per release LTS (attualmente solo arm64 per
android11-5.4
eandroid12-5.4
). - Il kernel GKI viene testato con tutte le release della piattaforma Android che supportati per associato a un ACK. Non è prevista alcuna deprecazione di funzionalità per tutta la durata di una GKI. alla versione kernel.
- Il kernel GKI espone una KMI stabile ai driver all'interno di un determinato LTS.
- Il kernel GKI non contiene codice specifico per il SoC o per la scheda.
Per un'immagine dell'architettura GKI, fai riferimento Panoramica del kernel.
GKI è una modifica complessa implementata in più fasi a partire da i kernel v5.4 nella release della piattaforma Android 11.
Esistono due fasi GKI:
- GKI 1.0 è stato introdotto in Android 11 per i dispositivi con 5.4. GKI 1.0 si applica a tutti i dispositivi forniti con kernel 5.4, anche quelli disponibile con Android 12 o Android 13:
- GKI 2.0 è stato introdotto in Android 12 per i dispositivi con 5.10 ed è il nuovo standard per tutti i dispositivi che vengono forniti con i kernel 5.10 o 5.10 con i kernel più recenti.
GKI 1.0
In GKI 1.0, i dispositivi che si lanciano con il kernel versione 5.4 devono superare il test GKI (Release della piattaforma Android 11 e versioni successive). Gli obiettivi GKI 1.0 includono:
- Evita le regressioni nella suite di test del fornitore (VTS) oppure Suite di test di compatibilità (CTS, Compatibility Test Suite) quando si sostituisce il kernel del prodotto con il kernel GKI.
- Riduci l'onere per i partner di mantenere aggiornato il proprio kernel con AOSP con i kernel più comuni.
- Includi le modifiche principali di Android nei kernel per i dispositivi che eseguono l'upgrade e il lancio con le nuove release di Android.
- Non interrompere lo spazio utente Android.
- Separa i componenti specifici dell'hardware dal kernel principale come moduli caricabili.
Per la documentazione di GKI 1.0, consulta Sezione GKI 1.0.
GKI 2.0
In GKI 2.0, i dispositivi che vengono lanciati con il kernel 5.10 o versioni successive devono avere il kernel GKI (a partire da Android 12). Avvio firmato sono disponibili e aggiornate regolarmente con LTS e correzioni di bug critici. Poiché la stabilità binaria viene mantenuta per il KMI, puoi installare questi senza apportare modifiche a quelle dei fornitori. Gli obiettivi di GKI 2.0 includono seguenti:
- Non introdurre regressioni significative delle prestazioni o della potenza in caso di sostituzione del kernel del prodotto con il kernel GKI.
- Consenti ai partner di fornire correzioni di bug e di sicurezza del kernel senza che il fornitore coinvolgimento.
- Riduci il costo di aggiornamento della versione principale del kernel per i dispositivi (ad esempio, dalla versione 5.10 al kernel LTS 2021).
- Mantenere un singolo binario del kernel GKI per architettura aggiornando il kernel con una chiara procedura per l'upgrade.
GKI 2.0 rappresenta lo stato più recente dei kernel Android. Kernel al di fuori di GKI 1.0 e Keral precedenti (<=4,19) le sottosezioni riflettono l'architettura GKI 2.0.