AOSP-Common-Kernel (auch als Android-Common-Kernel oder ACKs bezeichnet) sind nachgelagert von kernel.org-Kerneln und enthalten Patches, die für die Android-Community von Interesse sind und nicht in Mainline- oder LTS-Kernel (Long Term Supported) zusammengeführt wurden. Diese Patches können Folgendes umfassen:
- Backports und Cherry-Picks von Upstream-Funktionen, die für Android-Funktionen erforderlich sind
- Funktionen, die für Android-Geräte verfügbar sind, aber noch in der Entwicklung sind
- Anbieter-/OEM-Funktionen, die für andere Ökosystempartner nützlich sind
android-mainline
ist der primäre Entwicklungszweig für Android-Funktionen. Der Linux-Mainline-Kernel wird in android-mainline
zusammengeführt, sobald Linus Torvalds eine Version oder einen Release-Kandidaten veröffentlicht. Vor 2019 wurden allgemeine Android-Kernel durch Klonen des zuletzt deklarierten LTS-Kernels und Hinzufügen der Android-spezifischen Patches erstellt. 2019 wurde dieser Prozess geändert, um den neuen gemeinsamen Android-Kernel von android-mainline
abzuzweigen. Dieses neue Modell vermeidet den erheblichen Aufwand für das Forward-Porting und Testen von Android-Patches, indem es das gleiche Ergebnis inkrementell erreicht. android-mainline
wird kontinuierlich getestet. Das Modell enthält daher von Anfang an einen hochwertigen Kernel.
Wenn ein neuer LTS-Zweig upstream deklariert wird, wird der entsprechende gemeinsame Kernel von android-mainline
verzweigt. So können Partner ein Projekt vor der Deklaration der LTS-Version starten, indem sie android-mainline
zusammenführen. Nachdem der neue gemeinsame Kernel-Branch erstellt wurde, können Partner die Merge-Quelle nahtlos in den neuen Branch ändern.
Andere gängige Kernel-Branches werden regelmäßig mit dem zugehörigen LTS-Kernel zusammengeführt.
Diese Zusammenführungen erfolgen normalerweise unmittelbar nach der Veröffentlichung des LTS-Release. Als beispielsweise Linux 6.1.75 veröffentlicht wurde, wurde es in den gemeinsamen Kernel 6.1 (android14-6.1
) aufgenommen. Partner werden dringend aufgefordert, ihre Kernel zu aktualisieren, um mit LTS- und Android-spezifischen Fehlerkorrekturen auf dem neuesten Stand zu bleiben.
ACK-KMI-Kernel-Branch
GKI-Kernel haben eine stabile Kernelmodulschnittstelle. Das KMI wird eindeutig durch die Kernelversion und die Android-Plattformversion identifiziert. Die Zweige werden daher als ANDROID_RELEASE
-KERNEL_VERSION
benannt.
Der 6.1 GKI-Kernel für Android 14 heißt beispielsweise android14-6.1
. Für Android 15 wurde der GKI-Kernel android15-6.6
eingeführt.
Funktions- und Launch-Kernel
Vor Android 15 konnte für die Einführung eines Geräts einer der drei letzten Kernel verwendet werden. Ab Android 15 können die beiden letzten Kernel-Versionen für die Markteinführung von Geräten verwendet werden. Die Launch-Kernel für Android 15 sind android15-6.6
und android14-6.1
.
Da Kernel-Upgrades beim Aktualisieren der Plattformversion nicht erforderlich sind, können Kernel, die die neuesten Funktionen für eine Plattformversion nicht enthalten, trotzdem zum Starten von Geräten verwendet werden. Daher können Kernel, die für Android 14 entwickelt wurden, z. B. android14-6.1
, auch nach dem Upgrade der Plattformversion auf Android 15 auf Geräten verwendet werden.
Android-Plattform-Release | Kernel starten | Feature-Kernel |
---|---|---|
Android 16 (2025) |
android16-6.12
android15-6.6
|
android16-6.12
|
Android 15 (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.10
|
android14-6.1
android14-5.15
|
Android 13 (2022) |
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
android13-5.15
android13-5.10
|
Android 12 (2021) |
android12-5.10
android12-5.4
android11-5.4
|
android12-5.10
android12-5.4
|
1 Es können zusätzliche Einschränkungen gelten, wenn das zugehörige BSP für die Plattformversion aktualisiert wurde. Weitere Informationen finden Sie unter Vendor Interface Object – match kernel branches. |
Gemeinsame Kernel-Hierarchie
Branch von android-mainline
Die oberste Ebene der gemeinsamen Kernelhierarchie ist in Abbildung 1 dargestellt.
Abbildung 1: Gemeinsame Kernel aus dem android-mainline-Kernel erstellen
Beachten Sie, dass 2022 ein neuer Android-Common-Kernel android14-6.1
aus android-mainline
abgeleitet wurde. 2023, als die nächste LTS-Version angekündigt wurde, wurde android15-6.6
von android-mainline
abgeleitet.
Wie in Abbildung 1 dargestellt, kann jede Kernel-Version die Grundlage für zwei GKI-Kernel sein.
Die beiden v5.15-Kernel sind beispielsweise android13-5.15
und android14-5.15
. Beide sind Feature-Kernel für die jeweiligen Plattformversionen. Das war auch bei 5.10 der Fall. android12-5.10
wurde erstellt, als der LTS deklariert wurde, und android13-5.10
wurde im Frühjahr 2021 beim Kernel-Feature-Complete-Meilenstein von android12-5.10
abgeleitet, um die Entwicklung von Funktionen für Android 13 zu ermöglichen. Ab Android 15 (2024) gibt es nur einen neuen GKI-Kernel pro Kernelversion (es gibt keinen android15-6.1
-Kernel).
ACK-KMI-Branch-Lebenszyklus
Der Lebenszyklus eines ACK-KMI-Zweigs ist in Abbildung 2 dargestellt.
Abbildung 2: 6.6 Lebenszyklus des ACK-KMI-Branch
Zur Verdeutlichung des Entwicklungsprozesses und des Branch-Lebenszyklus konzentriert sich Abbildung 2 auf die ACK-KMI-Branches für 6.6.
Jeder ACK-KMI-Zweig durchläuft drei Phasen, die in Abbildung 2 durch unterschiedliche Farben in jedem Zweig dargestellt werden. Wie gezeigt, wird LTS unabhängig von der Phase regelmäßig zusammengeführt.
Entwicklungsphase
Nach der Erstellung wechselt ein ACK KMI-Branch in die Entwicklungsphase (in Abbildung 2 als dev gekennzeichnet) und ist für die nächste Android-Plattformversion für Funktionsbeiträge geöffnet. In Abbildung 2 wurde android15-6.6
erstellt, als 6.6 als neuer Upstream-LTS-Kernel deklariert wurde.
Stabilisierungsphase
Wenn der ACK-KMI-Zweig als vollständig deklariert wird, beginnt die Stabilisierungsphase (in Abbildung 2 als stabil bezeichnet). Partnerfunktionen und Fehlerkorrekturen werden weiterhin akzeptiert, aber KMI-Tracking ist aktiviert, um Änderungen zu erkennen, die sich auf die Schnittstelle auswirken. In dieser Phase sind KMI-gefährdende Änderungen zulässig und die KMI-Definition wird in einem vordefinierten Rhythmus (normalerweise alle zwei Wochen) aktualisiert. Weitere Informationen zum KMI-Monitoring finden Sie in der GKI-Übersicht.
KMI-Einfrierphase
Bevor ein neuer Plattformrelease in AOSP übertragen wird, wird der ACK-KMI-Branch eingefroren und bleibt für die gesamte Lebensdauer des Branch eingefroren. Das bedeutet, dass keine KMI-Breaking Changes akzeptiert werden, es sei denn, es wird ein schwerwiegendes Sicherheitsproblem festgestellt, das nicht behoben werden kann, ohne das stabile KMI zu beeinträchtigen. Um KMI-Fehler zu vermeiden, werden einige aus LTS übernommene Patches möglicherweise geändert oder entfernt, wenn der Fix für Android-Geräte nicht erforderlich ist.
Wenn ein ACK KMI-Branch eingefroren ist, können Fehlerkorrekturen und Partnerfunktionen akzeptiert werden, solange der vorhandene KMI-Common-Kernel nicht beschädigt wird. Die KMI kann mit neuen exportierten Symbolen erweitert werden, solange die Schnittstellen der aktuellen KMI nicht betroffen sind. Wenn dem KMI neue Schnittstellen hinzugefügt werden, sind sie sofort stabil und können durch zukünftige Änderungen nicht beschädigt werden.
Eine Änderung, durch die ein Feld zu einer Struktur hinzugefügt wird, die von einer KMI-Schnittstelle des gemeinsamen Kernels verwendet wird, ist beispielsweise nicht zulässig, da sie die Schnittstellendefinition ändert:
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);
Das Hinzufügen einer neuen Funktion ist jedoch in Ordnung:
struct foo2 {
struct foo orig_foo;
int new_field;
};
int do_foo2(struct foo2 &myarg)
{
do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);
Während der gesamten Lebensdauer des GKI-Kernels wird die Abwärtskompatibilität mit dem Nutzerbereich aufrechterhalten, sodass der Kernel sicher für die Android-Plattformversion verwendet werden kann, mit der das Gerät eingeführt wurde. Kontinuierliche Tests mit früheren Releases sorgen für Kompatibilität. In Abbildung 2 kann der android15-6.6
-Kernel also für Geräte mit Android 15 und höher verwendet werden. Da die Android-Plattformversion auch mit früheren Versionen kompatibel ist, kann der android14-6.1
-Kernel für Android 15-Geräte entweder für den Start oder für das Upgrade verwendet werden.
KMI-Generationsnummer
Wenn während der Stabilisierungsphase ein LTS-Merge oder danach ein Sicherheitsproblem oder ein anderes Ereignis auftritt, das die Annahme eines Patches erfordert, der das KMI ändert, wird die in build.config.common
aufgezeichnete KMI-Generierungsnummer erhöht. Die aktuelle KMI-Generation kann mit dem Befehl uname
ermittelt werden:
$ uname -r
6.6.30-android15-6-g86d10b30f51f
Die Zahl nach der Plattformversion ist die KMI-Generation (in diesem Fall 6
).
Wenn sich die KMI-Generation ändert, ist der Kernel nicht mit Anbietermodulen kompatibel, die der vorherigen KMI-Generation entsprechen. Die Module müssen also neu erstellt und synchron mit dem Kernel aktualisiert werden. Nach dem KMI-Freeze sind Änderungen bei der KMI-Generierung sehr selten.
Kompatibilität zwischen Kernels
Die Kompatibilitätsanforderungen zwischen Kernels in derselben LTS-Familie ändern sich mit den neuen GKI-Kernels.
GKI-Kernel
GKI-Kernel sind abwärtskompatibel mit allen Android-Plattformversionen, die die Kernelversion unterstützt haben. Außerdem sind die Android-Plattform-Releases abwärtskompatibel mit GKI-Kerneln aus früheren Releases. Sie können den für Android 14 (2023) entwickelten android14-6.1
-Kernel also bedenkenlos auf Geräten mit Android 15 (2024) verwenden. Die Kompatibilität wird durch kontinuierliche VTS- und CTS-Tests der GKI-Kernel mit allen unterstützten Releases überprüft.
Das KMI ist stabil, sodass der Kernel aktualisiert werden kann, ohne dass Kernelmodule im Anbieter-Image neu erstellt werden müssen.
Die KMI-Kompatibilität wird nicht zwischen verschiedenen GKI-Kerneln aufrechterhalten. Ein android14-6.1
-Kernel kann beispielsweise nicht durch einen android15-6.6
-Kernel ersetzt werden, ohne alle Module neu zu erstellen.
GKI-Kernel werden nur für ihre ursprünglichen und nachfolgenden Releases unterstützt.
Sie werden für ältere Releases nicht unterstützt. Ein android15-6.6
-Kernel wird daher für Geräte mit Android 14 (2023) nicht unterstützt.
Kompatibilitätsmatrix
In dieser Tabelle sind die Kernelversionen aufgeführt, die mit den einzelnen Android-Plattform-Releases unterstützt und getestet werden.
Android-Plattform-Release | Unterstützte Kernel |
---|---|
Android 16 (2025) |
android16-6.12
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 15 (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 14 (2023) |
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
Android 13 (2022) |
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
|
Supportzeiträume und Sicherheitspatches
ACKs erhalten LTS-Merges von Upstream und Fehlerkorrekturen für Android-spezifischen Code. Diese Korrekturen umfassen alle Kernel-Sicherheitspatches, die in den monatlichen Android-Sicherheitsbulletins aufgeführt sind und für ACK relevant sind.
ACKs werden möglicherweise länger unterstützt als der entsprechende Upstream-Kernel auf kernel.org. In diesem Fall bietet Google erweiterten Support bis zum Ende des Produktzyklus (End of Life, EOL), das in diesem Abschnitt angegeben ist. Wenn der Support für Kernel eingestellt wird, werden sie nicht mehr von Google unterstützt und Geräte, auf denen sie ausgeführt werden, gelten als anfällig.
Ab Kernel 6.6 beträgt die Supportlaufzeit für die stabilen Kernel vier Jahre.
In dieser Tabelle sind die Gültigkeitsdauern für die unterstützten ACKs aufgeführt:
ACK-Zweig | Startdatum |
Support lifetime (years) |
EOL |
---|---|---|---|
android11-5.4 | 2019-11-24 | 6 | 2026-01-01 |
android12-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 |
android16-6.12 | 2024-11-17 | 4 | 2029-07-01 |
Häufige Kernel-Tests
Die gemeinsamen Kernel werden mit mehreren CI-Systemen getestet. Außerdem führen Anbieter Downstream-Tests durch.
Funktionstest des Linux-Kernels
Beim Linux Kernel Functional Test (LKFT) werden verschiedene Testsuiten wie kselftest, LTP, VTS und CTS auf einer Reihe von physischen arm32- und arm64-Geräten ausgeführt. Die aktuellen Testergebnisse finden Sie auf der Seite android-lkft.
KernelCI-Tests
KernelCI-Build-and-Boot-Tests werden immer dann gestartet, wenn ein neuer Patch in einem gemeinsamen Kernel-Branch committet wird. Mehrere Hundert Build-Konfigurationen werden auf verschiedenen Boards getestet und gebootet. Aktuelle Ergebnisse für Android-Kernel finden Sie auf der KernelCL-Website.
Vorab- und Nachabtests für Android
Mit Tests vor dem Einreichen soll verhindert werden, dass Fehler in die gemeinsamen Android-Kernel eingeführt werden. Die Zusammenfassung der Testergebnisse finden Sie auf dem Tab „Checks“ der Codeänderung in Android Common Kernel Gerrit.
Android-Tests nach dem Einreichen werden für neue veröffentlichte Builds in allgemeinen Android-Kernel-Branches durchgeführt, wenn neue Patches in einem allgemeinen Android-Kernel-Branch in ci.android.com committet werden. Wenn Sie aosp_kernel
als partiellen Branch-Namen in ci.android.com eingeben, wird eine Liste der Kernel-Branches mit verfügbaren Ergebnissen angezeigt. Ergebnisse für android-mainline
finden Sie beispielsweise im Android CI-Dashboard. Klicken Sie auf einen bestimmten Build, um den Teststatus auf dem Tab Test Results
aufzurufen.
Die durch test-mapping mit der Testgruppe kernel-presubmit
im Android-Quellbaum definierten Tests werden als Presubmit für Android-Kernel-Branches ausgeführt. Die folgende Konfiguration in test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING aktiviert beispielsweise vts_kernel_proc_file_api_test
als Presubmit-Test beim Einchecken von Android Common Kernel-Code.
{
"kernel-presubmit": [
{
"name": "vts_kernel_proc_file_api_test"
}
]
}
0-Tage-Test
Beim 0-Day-Test werden alle Android Common Kernel-Branches patchweise getestet, wenn neue Patches übernommen werden. Es werden verschiedene Boot-, Funktions- und Leistungstests ausgeführt. Treten Sie der öffentlichen Gruppe cros-kernel-buildreports bei.
Test matrix
Gemeinsamer Android-Kernel | Android-Plattform-Releases | Test-Suites | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Hauptnavigationsmenü | 16 | 15 | 14 | 13 | 12 | LKFT | KernelCI | Vor dem Einreichen | Nach dem Senden | Zero-Day | |
android-mainline
|
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android16-6.12
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Beiträge zu allgemeinen Android-Kerneln leisten
Im Allgemeinen sollte die Entwicklung von Funktionen im Mainline-Linux-Kernel und nicht in Android-Common-Kernels erfolgen. Die Upstream-Entwicklung wird dringend empfohlen. Nachdem die Entwicklung dort akzeptiert wurde, kann sie bei Bedarf auf den jeweiligen ACK-Branch zurückportiert werden. Das Android Kernel Team unterstützt gerne Upstreaming-Bemühungen zum Wohle des Android-Ökosystems.
Senden Sie Patches an Gerrit und halten Sie sich an diese Beitragsrichtlinien.