Kernel comuni di Android

Keler comuni AOSP (noti anche come ACK o kernel comuni Android) sono downstream delle kernel kernel.org e includere le patch di interesse per la community Android che non sono mai state unite Kernel LTS (Long Term Support) supportati. Queste patch possono includere:

  • Backport e una selezione delle funzionalità upstream necessarie per Android funzionalità
  • Funzionalità pronte per i dispositivi Android ma ancora in fase di sviluppo a monte
  • Funzionalità di fornitori/OEM utili per altri partner dell'ecosistema

android-mainline è il ramo di sviluppo principale delle funzionalità Android. Linux la linea principale viene unita in android-mainline ogni volta che Linus Torvalds pubblica una per la release o per il candidato di release. Prima del 2019, i kernel comuni di Android erano creato clonando il kernel LTS dichiarato di recente e aggiungendo Patch specifiche per Android. Questa procedura è cambiata nel 2019 per ramificare il nuovo Android kernel comune da android-mainline. Questo nuovo modello evita la significativa l'impegno per l'inoltro e il test delle patch Android ottenendo lo stesso risultato in modo incrementale. android-mainline viene sottoposto a test continui e significativi. garantisce un kernel di alta qualità dal giorno in cui viene pubblicato.

Quando un nuovo LTS viene dichiarato upstream, il kernel comune corrispondente è diramato da android-mainline. Ciò consente ai partner di iniziare un progetto prima dichiarazione della versione LTS, mediante l'unione da android-mainline. Dopo il viene creato un nuovo ramo del kernel comune, i partner possono modificare al nuovo ramo.

Altri rami del kernel comuni ricevono unioni regolari dai loro GerLTS. In genere, queste unioni vengono effettuate subito dopo la pubblicazione della release LTS. Per ad esempio, quando Linux 6.1.75 è stato pubblicato, è stato unito alla versione 6.1 (android14-6.1). Consigliamo ai partner di aggiornare i propri kernel per stare al passo con le correzioni di bug specifiche di LTS e Android.

Ramo kernel KMI ACK

I kernel GKI hanno un'interfaccia stabile del modulo del kernel. Il KMI è univoco identificata dalla versione del kernel e dalla release della piattaforma Android, quindi i rami hanno il nome ANDROID_RELEASE-KERNEL_VERSION. Ad esempio, il modello 6.1 GKI il kernel per Android 14 si chiama android14-6.1. Per Android 15 (AOSP sperimentale), il kernel GKI android15-6.6 era sono state introdotte.

Inserire e avviare i kernel

Prima di Android 15 (AOSP sperimentale), uno qualsiasi dei tre kernel più recenti per l'avvio del dispositivo. A partire da Android 15 (AOSP sperimentale), le due versioni del kernel più recenti possono da utilizzare per l'avvio del dispositivo. I kernel di avvio Android 15 (AOSP sperimentale) è android15-6.6 e android14-6.1.

Perché gli upgrade del kernel non sono necessari per l'aggiornamento della piattaforma i kernel privi delle funzionalità più recenti per una release di piattaforma possono essere ancora utilizzato per avviare i dispositivi. Di conseguenza, i kernel progettati per Android 14, ad esempio android14-6.1, può essere utilizzato su anche dopo l'upgrade della release della piattaforma Android 15 (AOSP sperimentale).

Rilascio della piattaforma Android Avvia kernel Kernel delle funzionalità
Android 15 (sperimentale AOSP) (2024) android15-6.6
android14-6.1
android15-6.6
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.101
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.101
android12-5.41
android11-5.41
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.41
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

1 Potrebbero essere applicate limitazioni aggiuntive se il BSP associato ha aggiornato per il rilascio della piattaforma. In termini più generali, Numero di release di Android del kernel deve essere maggiore o uguale alla versione FCM di destinazione. Consulta Oggetto interfaccia fornitore: corrispondenza dei rami del kernel per maggiori dettagli.

Gerarchia comune del kernel

Ramo da Android-mainline

Il livello più alto della gerarchia comune del kernel è mostrato nella Figura 1.

Creazione di kernel comuni da kernel Android-mainline

Figura 1. Creazione di kernel comuni da kernel Android-mainline

Nota che è stato creato con diramazione un nuovo kernel comune Android android14-6.1 android-mainline nel 2022. Nel 2023, quando fu dichiarato il successivo LTS, android15-6.6 è stato diramato da android-mainline.

Come mostrato nella Figura 1, ciascuna versione del kernel può essere la base per due kernel GKI. Ad esempio, i due kernel v5.15 sono android13-5.15 e android14-5.15, che sono entrambi kernel di funzionalità per le rispettive release della piattaforma. Questo è stato anche per 5.10; android12-5.10 è stato creato quando l'LTS è stato dichiarata e android13-5.10 è diramata da android12-5.10 nel kernel traguardo del completamento di funzionalità nella primavera 2021 per consentire lo sviluppo di funzionalità per Android 13. A partire da Android 15 (AOSP sperimentale) (2024), esiste solo un nuovo kernel GKI per versione del kernel (non esiste un kernel android15-6.1).

Ciclo di vita ramo ACK KMI

Il ciclo di vita di un ramo ACK KMI è mostrato di seguito nella Figura 2.

6.6 Ciclo di vita del ramo ACK KMI

Figura 2. 6.6 Ciclo di vita del ramo ACK KMI

Per chiarire il processo di sviluppo e il ciclo di vita dei rami, la Figura 2 si concentra sui ACK KMI si ramifica per 6.6.

Ogni ramo ACK KMI attraversa tre fasi indicate nella Figura 2 da colori diversi in ogni ramo. Come mostrato, LTS viene unito regolarmente, indipendentemente della fase.

Fase di sviluppo

Una volta creato, un ramo KMI ACK entra nella fase di sviluppo (etichettata come dev nella Figura 2) ed è disponibile per i contributi alle funzionalità per il prossimo completamente gestita. Nella Figura 2, android15-6.6 è stato creato quando la versione 6.6 è stata dichiarato come nuovo kernel LTS upstream.

Fase di stabilizzazione

Quando il ramo KMI ACK viene dichiarato come completato, entra nel fase di stabilizzazione (etichettata come stabile nella Figura 2). Funzionalità per i partner e le correzioni di bug sono comunque accettate, ma il monitoraggio KMI è abilitato per rilevare eventuali modifiche che influiscono sull'interfaccia. In questa fase, le modifiche che violano le istruzioni KMI sono accettate e la definizione del KMI viene aggiornata con una cadenza predefinita (di solito ogni due settimane). Consulta le Panoramica di GKI per sul monitoraggio di KMI.

Fase bloccata KMI

Prima che venga eseguito il push di una nuova release della piattaforma ad AOSP, il ramo ACK KMI è bloccato e rimane bloccato per tutta la durata del ramo. Ciò significa che Le modifiche che violano il KMI sono accettate a meno che non venga identificato un grave problema di sicurezza che non possono essere mitigati senza influire sul KMI stabile. Per evitare KMI errori, alcune patch unite da LTS potrebbero essere modificate o eliminate se non è necessaria per i dispositivi Android.

Quando un ramo ACK KMI è bloccato, possono essere accettate correzioni di bug e funzionalità partner purché il kernel comune KMI esistente non funzioni. Il KMI può essere esteso con nuovi simboli esportati, purché le interfacce che compongono l'attuale KMI non ne sono interessati. Quando vengono aggiunte nuove interfacce al KMI, queste vengono immediatamente diventano stabili e non possono essere interrotti da modifiche future.

Ad esempio, una modifica che aggiunge un campo a una struttura utilizzata da un'interfaccia KMI non è consentito un kernel comune perché cambia la definizione dell'interfaccia:

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

Tuttavia, è possibile aggiungere una nuova funzione:

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

Per tutta la durata del kernel GKI, la compatibilità con le versioni precedenti con lo spazio utente in modo che il kernel possa essere usato in sicurezza per la piattaforma Android con cui è stato lanciato il dispositivo. Test continui con release precedenti garantisce il mantenimento della compatibilità. Nella Figura 2, android15-6.6 il kernel può essere utilizzato per dispositivi Android 15 (sperimentale AOSP) e versioni successive dispositivi mobili. Poiché il rilascio della piattaforma Android compatibile anche con le versioni precedenti, si potrebbe usare il kernel android14-6.1 per i dispositivi Android 15 (sperimentale AOSP) per il lancio o l'upgrade.

Numero di generazione KMI

In caso di unione LTS durante la fase di stabilizzazione oppure se si verifica un problema di sicurezza a un altro evento dopo questo che richiede l'accettazione di una patch di modifica KMI, Il numero di generazione KMI registrato in build.config.common viene incrementato. La la generazione KMI attuale è disponibile utilizzando il comando uname:

$ uname -r
6.6.30-android15-6-g86d10b30f51f

Il numero dopo il rilascio della piattaforma è la generazione KMI (in questo caso 6).

Se la generazione del KMI cambia, il kernel non è compatibile con i moduli del fornitore conformi alla precedente generazione di KMI, quindi i moduli devono essere ricostruiti aggiornate in modo sincrono con il kernel. Dopo il blocco di KMI, la generazione di KMI cambia si prevede siano molto rari.

Compatibilità tra i kernel

I requisiti di compatibilità tra i kernel della stessa famiglia LTS sono: a partire dai nuovi kernel GKI.

Kernel GKI

I kernel GKI mantengono la compatibilità con le versioni precedenti con tutte le piattaforme Android che supportavano la versione del kernel. Inoltre, la piattaforma Android sono compatibili con le versioni precedenti dei kernel GKI delle release precedenti. Quindi... puoi usare tranquillamente il kernel android14-6.1 sviluppato Android 14 (2023) su dispositivi con Android 15 (sperimentale AOSP) (2024). La compatibilità viene verificata tramite test VTS e CTS continui dei kernel GKI con tutte le release supportate.

Il KMI è stabile, per cui il kernel può essere aggiornato senza dover ricreare dei moduli kernel nell'immagine del fornitore.

La compatibilità KMI non viene mantenuta tra i diversi kernel GKI. Quindi, ad esempio, un kernel android14-6.1 non può essere sostituito con un android15-6.6 senza ricreare tutti i moduli.

I kernel GKI sono supportati solo per le release iniziali e successive. Non sono supportati per le release precedenti. Quindi un Il kernel android15-6.6 non è supportato per i dispositivi in esecuzione Android 14 (2023).

Matrice di compatibilità

Questa tabella mostra le versioni del kernel supportate e testate con ogni piattaforma Android completamente gestita.

Rilascio della piattaforma Android Kernel supportati per l'upgrade Kernel supportati per l'avvio
Android 15 (sperimentale AOSP) (2024) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android15-6.6
android14-6.1
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

Durata dell'assistenza e patch di sicurezza

Le ACK ricevono unioni LTS da upstream e correzioni di bug per codice specifico di Android. Queste correzioni includono tutte le patch di sicurezza del kernel citate nella documentazione mensile Bollettini sulla sicurezza pertinenti a ACK.

Gli ACK potrebbero essere supportati più a lungo del kernel stabile upstream corrispondente all'indirizzo kernel.org. In questo caso, Google fornisce assistenza estesa fino alla data di fine del ciclo di vita indicata in questo . Quando i kernel sono EOL, non sono più supportati da Google e i dispositivi che le eseguono sono considerati vulnerabili.

A partire dal kernel 6.6, la durata del supporto per i kernel stabili è 4 anni.

Questa tabella mostra la durata delle ACK supportate:

Ramo ACK Data
di lancio
Durata
dell'assistenza
(anni)
Fine vita
android-4.19-stabile 2018-10-22 6 2025-01-01
Android 11-5.4 2019-11-24 6 2026-01-01
Android 12-5.4 2019-11-24 6 2026-01-01
android12-5.10 2020-12-13 6 2027-07-01
android13-5.10 2020-12-13 6 2027-07-01
android13-5.15 2021-10-31 6 2028-07-01
android14-5.15 2021-10-31 6 2028-07-01
android14-6.1 2022-12-11 6 2029-07-01
android15-6.6 2023-10-29 4 2028-07-01

Test comuni del kernel

I kernel comuni vengono testati con diversi sistemi CI oltre a quelli downstream dei fornitori.

Test funzionale del kernel Linux

Test funzionale del kernel Linux (LKFT) avviano varie suite di test, tra cui kselftest, LTP, VTS e CTS su un di dispositivi arm32 e arm64 fisici. Sono disponibili i risultati dei test recenti qui

Test KernelCI

I test di build e avvio di KernelCI ogni volta che viene eseguito il commit di una nuova patch in un ramo del kernel comune. Diversi vengono testate e avviate centinaia di configurazioni di build su varie schede. Recenti sono disponibili i risultati per i kernel Android qui

Test pre-invio e post-invio di Android

I test pre-invio consentono di evitare l'introduzione di errori nel Kernel comuni di Android. Il riepilogo dei risultati del test si trova in "Controlli" della modifica del codice nel kernel comune gerrit di Android.

Vengono eseguiti i test post-invio di Android sulle nuove build pubblicate nei rami del kernel comuni di Android quando vengono eseguite nuove patch in un ramo del kernel comune di Android in ci.android.com. Inserendo aosp_kernel come nome di ramo parziale in ci.android.com, viene visualizzato un elenco di rami del kernel con disponibili. Ad esempio, sono disponibili i risultati per android-mainline qui. Se fai clic su una build specifica, troverai lo stato del test nella scheda Test Results.

I test definiti dalla mappatura dei test con il gruppo di test kernel-presubmit nell'albero di origine della piattaforma Android verranno eseguiti come preinvio per i rami del kernel Android. Ad esempio, la seguente configurazione in test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING abiliterà vts_kernel_proc_file_api_test come test presbumit al check-in comune del codice kernel Android.

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

Test per 0 giorni

Il test di 0 giorni esegue test patch per patch su tutti i rami del kernel comuni di Android quando viene eseguito il commit di nuove patch. Vari all'avvio, al funzionamento e alle prestazioni. Unisciti al gruppo pubblico report-cros-kernel-build

Matrice di test

Kernel comune Android Release della piattaforma Android Suite di test
Principale 15 14 13 12 11 10 LKFT CI kernel Pre-invio Invio del post zero-day
android-mainline
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable

Contribuisci ai kernel comuni di Android

In genere, lo sviluppo delle funzionalità deve avvenire sulla piattaforma Linux principale e non sulla Kernel comuni di Android. È vivamente consigliato lo sviluppo upstream e, in seguito, può essere facilmente sottoposto a backporting all'ACK specifico ramo in base alle esigenze. Il team di Android Kernel felice di supportare gli sforzi upstream a vantaggio dell'ecosistema Android.

Inviare patch a Gerrit e conformarsi a queste linee guida per i contributi.