Gemeinsame Android-Kernel

Allgemeine AOSP-Kernel (auch bekannt als Android Common Kernel oder ACKs ) sind den Kerneln von kernel.org nachgeschaltet und enthalten Patches, die für die Android-Community von Interesse sind und nicht in Mainline- oder Long Term Supported (LTS)-Kernel integriert wurden. Diese Patches können Folgendes umfassen:

  • Backports und ausgewählte Upstream-Funktionalitäten, die für Android-Funktionen benötigt werden
  • Funktionen sind für Android-Geräte bereit, befinden sich jedoch noch in der Upstream-Entwicklung (z. B. Optimierungen bei der Aufgabenplatzierung im Energy Aware Scheduler).
  • Anbieter-/OEM-Funktionen, die für andere Ökosystempartner nützlich sind (z. B. sdcardfs).

android-mainline ist der primäre Entwicklungszweig für Android-Funktionen. Die Linux-Hauptlinie wird immer dann mit der android-mainline zusammengeführt, wenn Linus Torvalds eine Veröffentlichung oder einen Veröffentlichungskandidaten veröffentlicht. Vor 2019 wurden allgemeine Android-Kernel erstellt, indem der kürzlich deklarierte LTS-Kernel geklont und die Android-spezifischen Patches hinzugefügt wurden. Dieser Prozess wurde 2019 geändert, um den neuen gemeinsamen Android-Kernel von android-mainline abzuzweigen. Dieses neue Modell vermeidet den erheblichen Aufwand, Android-Patches weiterzuleiten und zu testen, indem das gleiche Ergebnis inkrementell erzielt wird. android-mainline wird umfangreichen kontinuierlichen Tests unterzogen. Dieses Modell gewährleistet ab dem Tag seiner Veröffentlichung einen qualitativ hochwertigen Kernel.

Wenn ein neues LTS stromaufwärts deklariert wird, wird der entsprechende gemeinsame Kernel von android-mainline abgezweigt. Dadurch können Partner ein Projekt vor der Deklaration der LTS-Version beginnen, indem sie von android-mainline aus zusammenführen. Nachdem der neue gemeinsame Kernel-Zweig erstellt wurde, können Partner die Zusammenführungsquelle nahtlos auf den neuen Zweig ändern.

Andere gemeinsame Kernelzweige erhalten regelmäßige Zusammenführungen von ihrem zugehörigen LTS-Kernel . Diese Zusammenführungen erfolgen normalerweise unmittelbar nach der Veröffentlichung der LTS-Version. Als beispielsweise Linux 4.19.64 veröffentlicht wurde, wurde es in die allgemeinen 4.19-Kernel integriert (z. B. android-4.19-q ). Den Partnern wird dringend empfohlen, die gemeinsamen Kernel regelmäßig in ihre Produktkernel zu integrieren, um über LTS- und Android-spezifische Fehlerkorrekturen auf dem Laufenden zu bleiben.

ACK KMI-Kernelzweig

GKI-Kernel verfügen über eine stabile Kernel-Modul-Schnittstelle. Das KMI wird durch die Kernel-Version und die Android-Plattform-Version eindeutig identifiziert, daher werden die Zweige als <androidRelease>-<kernel version> bezeichnet. Der 5.4 GKI-Kernel für Android 11 heißt beispielsweise android11-5.4. Für Android 12 gibt es zwei zusätzliche GKI-Kernel, android12-5.4 und android12-5.10 .

Legacy-Dessertkernzweige

Es wurden ältere Dessert-Kernel erstellt, um sicherzustellen, dass die Entwicklung neuer Funktionen die Zusammenführung aus dem gemeinsamen Android-Kernel nicht beeinträchtigt. Die Zweige wurden vor dem zugehörigen Dessert-Release erstellt und erhalten von LTS regelmäßige Zusammenführungen, jedoch keine neuen Funktionen. android-4.9-q empfängt beispielsweise Zusammenführungen vom LTS 4.9.y-Zweig.

Wenn eine Kernelversion kein Startkernel war, wurde kein Dessertkernel erstellt, aber der Kernel, der der neuesten Plattformversion zugeordnet ist, ist für ein Upgrade auf zukünftige Android-Plattformversionen gültig. android-4.9-q war beispielsweise der letzte der android-4.9* -Dessertzweige und wird daher mit seiner ursprünglichen Plattformversion, Android 10, unterstützt und getestet. Es wird auch mit den Plattformversionen unterstützt und getestet, die Upgrades von Geräten mit 4.9 unterstützen Kernel: Android 11 und Android 12.

Da das Dessert-Benennungsschema für Android-Plattform-Releases mit Android 10 abgeschafft wurde, wurden die letzten Dessert-Releases, die android-4.14-r und android-4.19-r hießen, stattdessen android-4.14-stable und android-4.19-stable genannt.

Dessert-Kernel werden ab Android 11 durch GKI-Kernel ersetzt, daher finden Sie in dieser Tabelle die vollständige Liste der unterstützten Dessert-Kernel.

Veröffentlichung der Android-Plattform Kernel Unterstützt bis
Android 10 android-4.9-q
android-4.14-q
android-4.19-q
Januar 2023
Android 11 android-4.14-stable
android-4.19-stable
Januar 2024
Dezember 2024

Kernelzweige der älteren Version

Release-Kernel werden gepflegt, um Backports der im monatlichen Android Security Bulletin genannten Patches bereitzustellen. Sie wurden für jeden Startkernel erstellt, als es eine neue Android-Plattformversion gab. Sie sind veraltet, wenn die zugehörige Kernel- oder Plattformversion veraltet ist, wie unter Support-Lebensdauer und Sicherheitspatches beschrieben.

Jeden Monat, wenn das Android Security Bulletin veröffentlicht wird, werden diese Kernel mit Backports der im Bulletin genannten Patches aktualisiert, die für die Upstream-Kernel und Android Common Kernel relevant sind. Sie erhalten keine LTS-Patches, daher ändert sich die Nebenversionsnummer nie. Sie enthalten keine Backports für herstellerspezifische Patches.

In Android 11 und späteren Plattformversionen müssen Partner aus Dessert- oder GKI-Kerneln zusammenführen, um die im Android Security Bulletin genannten Patches anzuwenden. Für Android 11 oder spätere Plattformversionen wird kein Release-Kernel erstellt.

Daher wird in dieser Tabelle die vollständige Liste der 14 Release-Kernel angezeigt und es wird keiner hinzugefügt.

Veröffentlichung der Android-Plattform Kernel Unterstützt bis
Android 10 android-4.9-q-release
android-4.14-q-release
android-4.19-q-release
Januar 2023

Feature- und Launch-Kernel

Jede Android-Plattformversion unterstützt die Einführung neuer Geräte, die auf einer von drei Linux-Kernelversionen basieren. Wie in der folgenden Tabelle gezeigt, sind die Startkernel für Android 11 android-4.14-stable , android-4.19-stable und android11-5.4 .

Da beim Aktualisieren der Plattformversion im Allgemeinen keine Kernel-Upgrades erforderlich sind, können Kernel, denen die neuesten Funktionen für eine Plattformversion fehlen, weiterhin zum Starten von Geräten verwendet werden. Daher können Kernel, die für Android 10 entwickelt wurden, wie beispielsweise android-4.19-q , auf Geräten auch nach einem Upgrade der Plattformversion auf Android 11 verwendet werden. Ab Android 12 wird es weniger Feature-Kernel als Startkernel geben, um die Anzahl zu begrenzen stabile KMIs, die unterstützt werden müssen.

Veröffentlichung der Android-Plattform Kernel starten Feature-Kernel
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10 1
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10 1
android12-5.4 1
android11-5.4 1
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4 1
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android-4.14-stable
android11-5.4
android-4.19-stable
android-4.14-stable
Android 10 (2019) android-4.19-q
android-4.14-q
android-4.9-q

android-4.19-q
android-4.14-q
android-4.9-q

1 Es können zusätzliche Einschränkungen gelten, wenn das zugehörige BSP für die Plattformversion aktualisiert wurde. Allgemeiner ausgedrückt muss die Android-Release-Nummer des Kernels höher oder gleich der FCM-Zielversion sein. Weitere Informationen finden Sie unter Vendor Interface Object – Kernelzweige abgleichen .

Gemeinsame Kernel-Hierarchie

Zweig von Android-Mainline

Die oberste Ebene der gemeinsamen Kernel-Hierarchie ist in Abbildung 1 dargestellt.

Erstellen allgemeiner Kernel aus dem Android-Mainline-Kernel

Abbildung 1. Gemeinsame Kernel aus dem Android-Mainline-Kernel erstellen

Beachten Sie, dass der neue gemeinsame Android-Kernel android12-5.10 im Jahr 2020 von android-mainline abgezweigt wurde. Im Jahr 2021, als das nächste LTS deklariert wurde, wurde android13-5.15 von android-mainline abgezweigt.

Wie in Abbildung 1 dargestellt, ist jede Kernelversion die Basis für zwei GKI-Kernel. Beispielsweise sind die beiden v5.4-Kernel android11-5.4 und android12-5.4 , beide Feature-Kernel für ihre jeweiligen Plattformversionen. Dies wird auch für 5.10 der Fall sein; android12-5.10 wurde erstellt, als das LTS deklariert wurde, und android13-5.10 wird von android12-5.10 abzweigen, wenn der Kernel-Feature-Complete-Meilenstein im Frühjahr 2021 erreicht ist, um die Entwicklung von Funktionen für Android 13 zu ermöglichen.

ACK KMI-Zweig-Lebenszyklus

Der Lebenszyklus eines ACK-KMI-Zweigs ist unten in Abbildung 2 dargestellt.

5.10 ACK-KMI-Zweig-Lebenszyklus

Abbildung 2. 5.10 ACK KMI-Zweig-Lebenszyklus

Um den Entwicklungsprozess und den Branch-Lebenszyklus zu verdeutlichen, konzentriert sich Abbildung 2 auf die ACK-KMI-Branches für 5.10.

Jeder ACK-KMI-Zweig durchläuft drei Phasen, die in Abbildung 2 durch unterschiedliche Farben in jedem Zweig angezeigt werden. Wie gezeigt, wird LTS unabhängig von der Phase regelmäßig zusammengeführt.

Entwicklungsphase

Nach der Erstellung tritt ein ACK-KMI-Zweig in die Entwicklungsphase ein ( dev in Abbildung 2) und ist offen für Funktionsbeiträge für die nächste Version der Android-Plattform. In Abbildung 2 wurde android12-5.10 erstellt, als 5.10 als neuer Upstream-LTS-Kernel deklariert wurde. Der zweite ACK-KMI-Zweig für eine Kernelversion wird möglicherweise früher erstellt, um die Entwicklung der nachfolgenden Version zu ermöglichen. In Abbildung 2 wird android13-5.10 erstellt, wenn android12-5.10 die Entwicklungsphase verlässt.

Stabilisierungsphase

Wenn die Funktion des ACK-KMI-Zweigs als abgeschlossen erklärt wird, tritt er in die Stabilisierungsphase ein, die in Abbildung 2 als „Stab“ bezeichnet wird. Partnerfunktionen und Fehlerbehebungen werden weiterhin akzeptiert, aber die KMI-Verfolgung ist aktiviert, um alle Änderungen zu erkennen, die sich auf die Schnittstelle auswirken. In dieser Phase werden KMI-bahnbrechende Änderungen akzeptiert, die KMI-Definition muss jedoch bei Bedarf aktualisiert werden. Einzelheiten zur KMI-Überwachung finden Sie in der GKI-Übersicht .

KMI-Gefrierphase

Bevor eine neue Plattformversion an AOSP übertragen wird, wird der ACK-KMI-Zweig eingefroren und bleibt für die gesamte Lebensdauer des Zweigs eingefroren. Dies bedeutet, dass keine KMI-verletzenden Änderungen akzeptiert werden, es sei denn, es wird ein schwerwiegendes Sicherheitsproblem festgestellt, das nicht entschärft werden kann, ohne den stabilen KMI zu beeinträchtigen. Um KMI-Fehler zu vermeiden, können einige aus LTS zusammengeführte Patches geändert oder gelöscht werden, wenn der Fix für Android-Geräte nicht erforderlich ist.

Wenn ein ACK-KMI-Zweig eingefroren ist, können Fehlerbehebungen und Partnerfunktionen akzeptiert werden, solange der vorhandene gemeinsame KMI-Kernel nicht beschädigt ist. Das KMI kann mit neuen exportierten Symbolen erweitert werden, solange die Schnittstellen des aktuellen KMI nicht betroffen sind. Wenn dem KMI neue Schnittstellen hinzugefügt werden, werden diese sofort stabil und können durch zukünftige Änderungen nicht beschädigt werden.

Beispielsweise ist eine Änderung, die ein Feld zu einer Struktur hinzufügt, die von einem gemeinsamen Kernel der KMI-Schnittstelle verwendet wird, nicht zulässig, da dadurch die Schnittstellendefinition geändert wird:

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 bleibt die Abwärtskompatibilität mit dem Userspace erhalten, sodass der Kernel sicher für die Android-Plattformversion verwendet werden kann, mit der das Gerät gestartet wurde. Kontinuierliche Tests mit früheren Versionen stellen sicher, dass die Kompatibilität erhalten bleibt. In Abbildung 2 kann der Kernel android12-5.10 für Android 12-Geräte und Android 13-Geräte verwendet werden. Da die Android-Plattformversion auch mit früheren Versionen kompatibel ist, kann der Kernel android12-5.4 für Android 13-Geräte entweder zum Start oder zum Upgrade verwendet werden.

Beim Eintritt in die eingefrorene Phase wird der Zweig mit der KMI-Versionszeichenfolge, die die KMI-Generierungsnummer enthält, mit einem Git-Tag versehen. Als beispielsweise android11-5.4 eingefroren war, wurde es mit der KMI-Versionszeichenfolge 5.4-android11-0 getaggt, wobei die nachgestellte 0 die KMI-Generierungsnummer ist. Wenn ein Sicherheitsproblem oder ein anderes Ereignis vorliegt, das die Annahme eines KMI-Änderungspatches erfordert, wird die KMI-Generierungsnummer erhöht und der Zweig neu markiert. Wenn beispielsweise eine solche Änderung in android11-5.4 akzeptiert wird, wird der Zweig mit der neuen KMI-Version 5.4-android11-1 getaggt. Die aktuelle KMI-Generation kann mit dem Befehl uname gefunden werden:

$ uname -r
5.4.61-android11-0-00153-ga972f59040e4

Die Zahl nach der Plattformfreigabe ist die KMI-Generation (in diesem Fall 0).

Wenn sich die KMI-Generation ändert, ist der Kernel nicht mit Herstellermodulen kompatibel, die der vorherigen KMI-Generation entsprechen. Daher müssen die Module synchron mit dem Kernel neu erstellt und aktualisiert werden. Änderungen der KMI-Generation werden voraussichtlich sehr selten sein.

Kompatibilität zwischen Kerneln

Die Kompatibilitätsanforderungen zwischen Kerneln derselben LTS-Familie ändern sich beginnend mit den neuen GKI-Kerneln.

GKI-Kernel

GKI-Kernel bleiben abwärtskompatibel mit allen Android-Plattformversionen, die die Kernelversion unterstützten. Darüber hinaus sind die Versionen der Android-Plattform abwärtskompatibel mit GKI-Kerneln früherer Versionen. So können Sie den für Android 12 entwickelten Kernel android12-5.4 sicher auf Geräten mit Android 13 verwenden. Die Kompatibilität wird durch kontinuierliche VTS- und CTS-Tests der GKI-Kernel mit allen unterstützten Versionen überprüft.

Das KMI ist stabil, sodass der Kernel aktualisiert werden kann, ohne dass eine Neuerstellung der Kernelmodule im Hersteller-Image erforderlich ist.

Die KMI-Kompatibilität zwischen verschiedenen GKI-Kerneln wird nicht gewährleistet. So kann beispielsweise ein android12-5.10 nicht durch einen android13-5.10 Kernel ersetzt werden, ohne alle Module neu zu erstellen.

GKI-Kernel werden nur für ihre ersten und nachfolgenden Versionen unterstützt. Sie werden für ältere Versionen nicht unterstützt. Daher wird ein android13-5.10 Kernel auf Android 12-Geräten nicht unterstützt.

Legacy-Kernel

Die älteren Dessert-Kernel ( *-q und *-stable ) sind nicht abwärtskompatibel mit allen Android-Plattformversionen, aber Kernel aus den beiden vorherigen Android-Plattformversionen werden für Upgrades unterstützt. Daher kann ein Gerät, das mit Android 10 gestartet wurde und einen auf android-4.19-q basierenden Kernel verwendet, beim Upgrade auf Android 2020 entweder weiterhin den android-4.19-q Kernel verwenden oder den herstellerspezifischen Code aktualisieren, um android-4.19-stable zu unterstützen .

Kompatibilitätsmatrix

Diese Tabelle zeigt die Kernelversionen, die mit jeder Android-Plattformversion unterstützt und getestet werden.

Veröffentlichung der Android-Plattform Unterstützte Kernel für Upgrades Unterstützte Kernel für den Start
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
android-4.14-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
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.9-q (EOL)
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.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.14-p (EOL)
android-4.9-q (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.14-p (EOL)
android-4.9-q (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.4-p (EOL)
android-4.4-o (EOL)
android11-5.4
android-4.19-stable
android-4.14-stable
Android 10 (2019) android-4.14-stable
android-4.14-p (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.4-p (EOL)
android-4.4-o (EOL)
android-3.18 (EOL)
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.9-q (EOL)

Support-Lebensdauer und Sicherheitspatches

Gemeinsame Android-Kernel werden unterstützt, bis entweder der zugehörige LTS-Kernel oder die Android-Plattformversion nicht mehr unterstützt wird. Während ein Kernel unterstützt wird, erhält er weiterhin LTS-Merges von Upstream-Anbietern und Fehlerbehebungen für Android-spezifischen Code. Diese Korrekturen umfassen alle Kernel-Sicherheitspatches, die in den monatlichen Android-Sicherheitsbulletins aufgeführt sind und für die gängigen Android-Kernel relevant sind.

Partner können sicher sein, dass sie durch die regelmäßige Zusammenführung gängiger Android-Kernel alle möglichen Kernel-Sicherheitspatches erhalten.

Allgemeine Kerneltests

Die gängigen Kernel werden zusätzlich zu nachgelagerten Tests durch Anbieter mit mehreren CI-Systemen getestet.

Funktionstest des Linux-Kernels

LKFT-Tests (Linux Kernel Functional Test) initiieren verschiedene Testsuiten, darunter kselftest, LTP, VTS und CTS, auf einer Reihe physischer arm32- und arm64-Geräte. Aktuelle Testergebnisse finden Sie hier .

KernelCI-Tests

KernelCI- Build-and-Boot-Tests werden immer dann initiiert, wenn ein neuer Patch in einen gemeinsamen Kernel-Zweig übernommen wird. Mehrere hundert Build-Konfigurationen werden auf verschiedenen Boards getestet und gebootet. Aktuelle Ergebnisse für Android-Kernel finden Sie hier .

Android-Presubmit- und Postsubmit-Tests

Presubmit-Tests werden verwendet, um zu verhindern, dass Fehler in die gängigen Android-Kernel eingeführt werden. Die Zusammenfassung der Testergebnisse finden Sie auf der Registerkarte „Prüfungen“ der Codeänderung im Android Common Kernel Gerrit.

Android-Postsubmit-Tests werden für neu veröffentlichte Builds in gemeinsamen Android-Kernelzweigen durchgeführt, wenn neue Patches an einen gemeinsamen Android-Kernelzweig in ci.android.com übergeben werden. Wenn Sie aosp_kernel als Teilzweignamen in ci.android.com eingeben, wird eine Liste der Kernelzweige mit verfügbaren Ergebnissen angezeigt. Ergebnisse für android-mainline finden Sie beispielsweise hier . Wenn Sie auf einen bestimmten Build klicken, finden Sie den Teststatus auf der Registerkarte Test Results .

Die durch Test-Mapping mit der Testgruppe kernel-presubmit im Quellbaum der Android-Plattform definierten Tests werden als Presubmit für Android-Kernelzweige ausgeführt. Wenn Sie beispielsweise die Konfiguration in test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING befolgen, wird vts_kernel_proc_file_api_test als Presbumit-Test beim Einchecken des allgemeinen Android-Kernelcodes aktiviert.

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

0-Tage-Test

Beim 0-Tage -Test werden Patch-für-Patch-Tests für alle gängigen Android-Kernelzweige durchgeführt, wenn neue Patches festgeschrieben werden. Es werden verschiedene Boot-, Funktions- und Leistungstests durchgeführt. Treten Sie der öffentlichen Gruppe cros-kernel-buildreports bei

Testmatrix

Gemeinsamer Android-Kernel Veröffentlichungen der Android-Plattform Testsuiten
Hauptsächlich 14 13 12 11 10 LKFT KernelCI Vorab einreichen Beitrag senden 0-Tag
android-mainline
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
android-4.19-stable
android-4.14-stable

Tragen Sie zu gängigen Android-Kerneln bei

Im Allgemeinen sollte die Funktionsentwicklung auf Mainline-Linux und nicht auf gängigen Android-Kerneln erfolgen. Die Upstream-Entwicklung wird dringend empfohlen, und nachdem die Entwicklung dort akzeptiert wurde, kann sie bei Bedarf problemlos in den spezifischen ACK-Zweig zurückportiert werden. Das Android-Kernel-Team unterstützt gerne Upstreaming-Bemühungen zum Nutzen des Android-Ökosystems.

Senden Sie Patches an Gerrit und halten Sie sich an diese Beitragsrichtlinien .