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.
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.
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
|
android15-6.6
|
Android 14 (2023) |
android14-6.1
|
android14-6.1
|
Android 13 (2022) |
android13-5.15
|
android13-5.15
|
Android 12 (2021) |
android12-5.10
|
android-4.19-stable
|
Android 11 (2020) |
android11-5.4
|
android11-5.4
|
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
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
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.