Gemeinsame Android-Kernel

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

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

  • Backports und Cherry-Picks von Upstream-Funktionen, die für Android-Funktionen benötigt werden
  • Funktionen, die für Android-Geräte bereit sind, sich aber noch in der Upstream-Entwicklung befinden (z. B. Energy Aware Scheduler-Aufgabenplatzierungsoptimierungen).
  • 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. Linux-Mainline wird immer dann mit 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 zu verzweigen. Dieses neue Modell vermeidet den erheblichen Aufwand, Ports weiterzuleiten und Android-Patches zu testen, indem es inkrementell dasselbe Ergebnis erzielt. android-mainline wird ausgiebigen kontinuierlichen Tests unterzogen, dieses Modell gewährleistet einen qualitativ hochwertigen Kernel ab dem Tag seiner Veröffentlichung.

Wenn ein neuer LTS als Upstream deklariert wird, wird der entsprechende gemeinsame Kernel von android-mainline verzweigt. Dadurch können Partner ein Projekt vor der Deklaration der LTS-Version beginnen, indem sie von android-mainline zusammenführen. Nachdem der neue gemeinsame Kernel-Branch erstellt wurde, können Partner die Merge-Quelle nahtlos auf den neuen Branch ändern.

Andere gängige Kernel-Zweige erhalten regelmäßige Zusammenführungen von ihrem zugehörigen LTS-Kernel . Diese Zusammenführungen werden normalerweise unmittelbar nach der Veröffentlichung der LTS-Veröffentlichung durchgeführt. Als beispielsweise Linux 4.19.64 gepostet wurde, wurde es in die allgemeinen 4.19-Kernel (z. B. android-4.19-q ) integriert. Partnern wird dringend empfohlen, regelmäßig von den gemeinsamen Kerneln in ihre Produktkerne zu fusionieren, um mit LTS- und Android-spezifischen Fehlerkorrekturen auf dem Laufenden zu bleiben.

ACK KMI-Kernel-Zweig

GKI-Kernel haben ein stabiles Kernel Module Interface. Das KMI wird durch die Kernel-Version und die Version der Android-Plattform eindeutig identifiziert, daher heißen die <androidRelease>-<kernel version> . Beispielsweise heißt der 5.4-GKI-Kernel für Android 11 android11-5.4. Für Android 12 gibt es zwei zusätzliche GKI-Kernel, android12-5.4 und android12-5.10 .

Legacy-Dessert-Kernzweige

Legacy-Dessert-Kernel wurden erstellt, um sicherzustellen, dass die Entwicklung neuer Funktionen die Zusammenführung aus dem gemeinsamen Android-Kernel nicht beeinträchtigt. Die Branches wurden vor dem zugehörigen Dessert-Release erstellt und erhalten regelmäßig Merges von LTS, aber keine neuen Features. Beispielsweise erhält android-4.9-q Zusammenführungen vom Zweig LTS 4.9.y.

Wenn eine Kernel-Version kein Start-Kernel war, wurde kein Dessert-Kernel erstellt, aber der mit der neuesten Plattformversion verknüpfte Kernel ist für ein Upgrade auf zukünftige Android-Plattformversionen gültig. Zum Beispiel war android-4.9-q der letzte der android-4.9* -Dessert-Zweige, daher wird es 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-Plattformversionen mit Android 10 aufgegeben wurde, wurden die letzten Dessert-Versionen, die android-4.14-r und android-4.19-r genannt worden wären, stattdessen android-4.14-stable und android-4.19-stable genannt.

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

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

Legacy-Release-Kernel-Zweige

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

Jeden Monat, wenn das Android Security Bulletin veröffentlicht wird, werden diese Kernel mit Backports der im Bulletin zitierten Patches aktualisiert, die für die Upstream-Kernel und die allgemeinen Android-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-Kernels zusammenführen, um die im Android Security Bulletin genannten Patches anzuwenden. Für Plattformversionen von Android 11 oder höher wird kein Release-Kernel erstellt.

Daher wird in dieser Tabelle die vollständige Liste der 14 Release-Kernel angezeigt, und es werden keine 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 Version der Android-Plattform unterstützt das Starten neuer Geräte basierend auf einer der drei Linux-Kernel-Versionen. 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, dennoch zum Starten von Geräten verwendet werden. Daher können Kernel, die für Android 10 entwickelt wurden, wie android-4.19-q , auch nach einem Upgrade der Plattformversion auf Android 11 auf Geräten verwendet werden. Ab Android 12 wird es weniger Feature-Kernel als Launch-Kernel geben, um die Anzahl zu begrenzen stabile KMIs, die unterstützt werden müssen.

Veröffentlichung der Android-Plattform Kernel starten Feature-Kernel
Android 10 (2019) android-4.9-q
android-4.14-q
android-4.19-q

android-4.9-q
android-4.14-q
android-4.19-q
Android 11 (2020) android-4.14-stable
android-4.19-stable
android11-5.4
android-4.14-stable
android-4.19-stable
android11-5.4
Android 12 (2021) android-4.19-stable
android11-5.4 1
android12-5.4
android12-5.10
android12-5.4
android12-5.10
Android 13 (2022) android12-5.4 1
android12-5.10 1
android13-5.10
android13-5.15
android13-5.10
android13-5.15

1 Zusätzliche Einschränkungen können gelten, wenn das zugehörige BSP für das Plattform-Release aktualisiert wurde. Allgemeiner ausgedrückt muss die Android-Release-Nummer des Kernels größer oder gleich der Ziel-FCM-Version sein. Weitere Informationen finden Sie unter Vendor Interface Object – Match-Kernel-Zweige .

Gemeinsame Kernel-Hierarchie

Verzweigung von Android-Mainline

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

Erstellen gemeinsamer Kernel aus dem Android-Mainline-Kernel

Abbildung 1. Erstellen gemeinsamer Kernel aus dem Android-Mainline-Kernel

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, bildet jede Kernel-Version die Grundlage für zwei GKI-Kernel. Beispielsweise sind die beiden v5.4-Kernel android11-5.4 und android12-5.4 , die beide Feature-Kernel für ihre jeweiligen Plattformversionen sind. 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 beim Kernel-Feature-Completion-Meilenstein im Frühjahr 2021 von android12-5.10 abzweigen, um die Entwicklung von Funktionen für Android 13 zu ermöglichen.

ACK KMI-Zweiglebenszyklus

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

5.10 ACK KMI-Zweiglebenszyklus

Abbildung 2. 5.10 ACK KMI-Zweiglebenszyklus

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

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

Entwicklungsphase

Nach seiner Erstellung tritt ein ACK-KMI-Zweig in die Entwicklungsphase ein ( dev in Abbildung 2) und ist offen für Featurebeiträ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 Kernel-Version kann früher erstellt werden, 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 der ACK-KMI-Zweig als Feature vollständig deklariert wird, tritt er in die Stabilisierungsphase ein , die in Abbildung 2 als stab gekennzeichnet ist. Partnerfunktionen und Fehlerkorrekturen werden weiterhin akzeptiert, aber die KMI-Verfolgung ist aktiviert, um alle Änderungen zu erkennen, die sich auf die Schnittstelle auswirken. In dieser Phase werden bahnbrechende KMI-Änderungen akzeptiert, aber die KMI-Definition muss bei Bedarf aktualisiert werden. Einzelheiten zur KMI-Überwachung finden Sie in der GKI-Übersicht .

KMI-eingefrorene Phase

Bevor eine neue Plattformversion an AOSP gepusht wird, wird der ACK KMI-Zweig eingefroren und bleibt für die Lebensdauer des Zweigs eingefroren. Dies bedeutet, dass keine KMI-brechenden Änderungen akzeptiert werden, es sei denn, es wird ein schwerwiegendes Sicherheitsproblem identifiziert, das nicht gemindert werden kann, ohne das stabile KMI zu beeinträchtigen. Um KMI-Unterbrechungen zu vermeiden, werden einige aus LTS zusammengeführte Patches möglicherweise geändert oder gelöscht, wenn der Fix für Android-Geräte nicht erforderlich ist.

Wenn ein ACK-KMI-Zweig eingefroren ist, können Fehlerkorrekturen 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, die das aktuelle KMI umfassen, nicht betroffen sind. Wenn dem KMI neue Schnittstellen hinzugefügt werden, werden sie sofort stabil und können nicht durch zukünftige Änderungen beschädigt werden.

Beispielsweise ist eine Änderung, die ein Feld zu einer Struktur hinzufügt, die von einem allgemeinen Kernel einer KMI-Schnittstelle verwendet wird, 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 Lebensdauer des GKI-Kernels wird die Abwärtskompatibilität mit dem Userspace aufrechterhalten, sodass der Kernel sicher für die Android-Plattformversion verwendet werden kann, mit der das Gerät gestartet wurde. Kontinuierliche Tests mit früheren Releases stellen sicher, dass die Kompatibilität erhalten bleibt. In Abbildung 2 kann also der android12-5.10 -Kernel 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 Android android12-5.4 -Kernel für Android 13-Geräte entweder zum Start oder zum Upgrade verwendet werden.

Beim Eintritt in die eingefrorene Phase wird der Zweig mit dem KMI-Versionsstring, der 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 wobei die nachgestellte 0 die KMI-Generierungsnummer ist. Wenn es ein Sicherheitsproblem oder ein anderes Ereignis gibt, das die Annahme eines KMI-Änderungspatches erfordert, wird die KMI-Generierungsnummer erhöht und der Zweig neu gekennzeichnet. Wenn beispielsweise eine solche Änderung in android11-5.4 akzeptiert wird, wird der Zweig mit der neuen KMI-Version 5.4-android11-1 . 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 Anbietermodulen kompatibel, die der vorherigen KMI-Generation entsprechen, sodass die Module neu erstellt und synchron mit dem Kernel aktualisiert werden müssen. Es wird erwartet, dass KMI-Generationswechsel sehr selten sind.

Kompatibilität zwischen Kerneln

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

GKI-Kernel

GKI-Kernel behalten die Abwärtskompatibilität mit allen Versionen der Android-Plattform bei, die die Kernel-Version unterstützt haben. Darüber hinaus sind die Versionen der Android-Plattform abwärtskompatibel mit GKI-Kerneln aus früheren 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 Kernel-Module im Anbieter-Image neu erstellt werden müssen.

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

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 Android android13-5.10 -Kernel auf Android 12-Geräten nicht unterstützt.

Legacy-Kernel

Die Legacy-Dessert-Kernel ( *-q und *-stable ) sind nicht abwärtskompatibel zwischen Android-Plattformversionen, aber Kernel aus den vorherigen zwei 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 wurden.

Veröffentlichung der Android-Plattform Unterstützte Kernel für das Upgrade Unterstützte Kernel für den Start
Android 10 (2019) android-3.18 (EOL)
android-4.4-o (EOL)
android-4.9-o
android-4.4-p
(EOL)
android-4.9-p (EOL)
android-4.14-p (EOL)
android-4.9-q
android-4.14-q
android-4.19-q
Android 11 (2020) android-4.4-o (EOL)
android-4.4-p (EOL)
android-4.9-o (EOL)
android-4.9-p (EOL)
android-4.9-q
android-4.14-p (EOL)
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
Android 12 (2021) android-4.9-o (EOL)
android-4.9-p (EOL)
android-4.9-q
android-4.14-p
(EOL)
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 13 (2022) android-4.9-q
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
android13-5.10
android13-5.15
android11-5.4
android12-5.4
android12-5.10
android13-5.10
android13-5.15

Supportlebensdauer und Sicherheitspatches

Allgemeine Android-Kernel werden unterstützt, bis entweder der zugehörige LTS-Kernel oder die Version der Android-Plattform nicht mehr unterstützt wird. Während ein Kernel unterstützt wird, erhält er weiterhin LTS-Zusammenführungen von Upstream- und Fehlerbehebungen für Android-spezifischen Code. Diese Fixes umfassen alle in den monatlichen Android Security Bulletins genannten Kernel-Sicherheitspatches, die für die gängigen Android-Kernel relevant sind.

Partner können sicher sein, dass sie durch regelmäßiges Zusammenführen von gemeinsamen Android-Kernels alle möglichen Kernel-Sicherheitspatches erhalten.

Gemeinsame Kernel-Tests

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

Linaro-Kernel-Funktionstests

Linaro Kernel Functional Testing (LKFT) -Tests initiieren verschiedene Testsuiten, darunter kselftest, LTP, VTS und CTS, auf einer Reihe von physischen arm32- und arm64-Geräten. Aktuelle Testergebnisse finden Sie hier .

KernelCI-Tests

KernelCI -Build-and-Boot-Tests werden immer dann initiiert, wenn ein neuer Patch an einen gemeinsamen Kernel-Zweig übergeben 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 gemeinsamen Kernel eingeführt werden. Die Ergebnisse sind derzeit nicht öffentlich verfügbar.

Android-Postsubmit-Tests werden durchgeführt, wenn ein neuer Patch an einen gemeinsamen Kernel-Zweig übergeben wird. Durch die Eingabe von aosp_kernel als partiellen Branch-Namen sehen Sie eine Liste von Kernel-Branches mit verfügbaren Ergebnissen. Ergebnisse für android-mainline finden Sie beispielsweise hier .

0-Tage-Test

0-Day- Tests führen Patch-für-Patch-Tests auf allen gängigen Android-Kernelzweigen durch, wenn neue Patches festgeschrieben werden. Es werden verschiedene Boot-, Funktions- und Leistungstests durchgeführt. Treten Sie der öffentlichen Gruppe cros-kernel-buildreports bei

Testmatrix

Allgemeiner Android-Kernel Veröffentlichungen der Android-Plattform Testsuiten
Meister 13 12 11 10 9 (Kuchen) LKFT KernelCI Vorab einreichen Beitrag senden 0-Tag
android-mainline
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
android-4.14-q
android-4.9-q

Beitrag zu den gemeinsamen Android-Kernels

Im Allgemeinen sollte die Funktionsentwicklung auf Mainline-Linux und nicht auf gängigen Android-Kernels erfolgen. Upstream-Entwicklung wird dringend empfohlen, und nachdem die Entwicklung dort akzeptiert wurde, kann sie bei Bedarf problemlos auf 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 .