Gemeinsame Android-Kernel

Die AOSP gemeinsamen Kerne (auch als Android gemeinsamen Kernel oder ACKs bekannt) sind stromabwärts von kernel.org Kerne und umfassen Patches von Interesse für die Android - Community , die nicht gewesen sein in Fern- oder Long Term Unterstützt fusionierte (LTS) Kerne. Diese Patches können Folgendes umfassen:

  • Backports und Rosinenpicks der Upstream-Funktionalität, die für Android-Funktionen benötigt werden
  • Funktionen, die für Android-Geräte bereit sind, sich jedoch noch in der Upstream-Entwicklung befinden (z. B. Optimierungen bei der Aufgabenplatzierung des 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. Linux Mainline in fusionierte android-mainline , wenn Linus Torvalds Beiträge eine Freigabe oder Release Candidate. Vor 2019 wurden gängige Android-Kernel erstellt, indem der kürzlich deklarierte LTS-Kernel geklont und die Android-spezifischen Patches hinzugefügt wurden. Dieser Prozess im Jahr 2019 geändert , um den neuen Android gemeinsamen Kerns aus verzweigen android-mainline . Dieses neue Modell vermeidet den erheblichen Aufwand für die Weiterleitung von Ports und das Testen von Android-Patches, indem das gleiche Ergebnis inkrementell erreicht wird. android-mainline erfährt signifikante kontinuierliche Prüfung gewährleistet dieses Modell einen hochwertigen Kern aus dem Tag es veröffentlicht.

Wenn eine neue LTS stromauf deklariert wird, wird der entsprechende gemeinsame Kern aus verzweigten android-mainline . Dies ermöglicht es Partner ein Projekt vor der Erklärung der LTS - Version zu beginnen, indem aus der Verschmelzung android-mainline . Nachdem der neue gemeinsame Kernel-Zweig erstellt wurde, können Partner die Merge-Quelle nahtlos in den neuen Zweig ändern.

Andere häufige Kernel Filialen erhalten regelmäßig verschmilzt von ihrer zugehörigen LTS - Kernel . Dies erfolgt normalerweise unmittelbar nach der Veröffentlichung der LTS-Version. Wenn zum Beispiel Linux 4.19.64 veröffentlicht wurde, wurde es in den 4,19 gemeinsamen Kern verschmolzen (zum Beispiel android-4.19-q ). Partnern wird dringend empfohlen, regelmäßig von den gemeinsamen Kerneln in ihre Produkt-Kernel zu fusionieren, um bei LTS- und Android-spezifischen Fehlerkorrekturen auf dem Laufenden zu bleiben.

Bedingungen

Hier sind einige neue Begriffe, die in diesem Dokument verwendet werden, um die allgemeinen Android-Kernelrichtlinien zu beschreiben.

Funktionskernel

Kerneln , die mit Funktionen für die neueste Android - Plattform - Release verbessert werden , Feature - Kernel genannt. Für Android 11 basieren die Feature-Kernel auf den Kernel-Versionen 4.14.y, 4.19.y und 5.4.y. In früheren Plattformversionen waren Feature-Kernel die gleichen wie Start-Kernel. In Android 12 wird es jedoch zwei Feature-Kernel und drei Launch-Kernel geben.

Generisches Kernel-Image

Ab Android 11 werden gängige Android-Kernel verwendet, um generische Kernel-Images (GKIs) zu erstellen, bei denen es sich um Aarch64-Kernel-Images handelt, die verwendet werden können, um jedes Gerät mit der SoC- und Treiberunterstützung, die in Anbietermodulen implementiert ist, auszuführen. Weitere Einzelheiten finden Sie in der GKI Überblick .

Kernel-Modul-Schnittstelle

GKI stellt das Konzept eine stabilen Kernel - Modul - Schnittstelle (KMI) , die der Core - Kernel ermöglicht von der Lieferantenmodule asynchron aktualisiert werden. Wenn das KMI eingefroren ist, können keine Änderungen vorgenommen werden, die die Binärkompatibilität mit bestehenden Anbietermodulen beeinträchtigen. Sehen Sie sich die GKI Übersicht für Details über die KMI.

Kernel starten

Die vorgesehenen Startkerne können für die Start - Geräte mit einer bestimmten Android - Plattform - Release verwendet werden. Für Android 11 können Geräte mit Kerneln gestartet werden, die auf den Kernel-Versionen 4.14.y, 4.19.y und 5.4.y basieren.

Gängige Kernel-Zweigtypen

KMI-Kernel-Zweig

KMI Kerne haben eine stabile Kernel - Modul - Schnittstelle. Die KMI ist eindeutig durch die Kernel - Version und die Android - Plattform - Release identifiziert, so dass die Zweige genannt werden <androidRelease>-<kernel version> . Zum Beispiel wird der 5,4 KMI - Kernel für Android 11 genannt android11-5.4. Für Android 12 gibt es zwei weitere KMI Kerne, android12-5.4 und android12-5.10 .

Alte Dessertkernzweige

Legacy-Dessert-Kernel wurden erstellt, um zu gewährleisten, dass die Entwicklung neuer Funktionen das Zusammenführen aus dem gemeinsamen Android-Kernel nicht beeinträchtigt. Die Branches wurden vor dem dazugehörigen Dessert-Release erstellt und erhalten regelmäßige Merges von LTS, jedoch keine neuen Features. Zum Beispiel android-4.9-q verschmilzt vom LTS 4.9.y Zweig empfängt.

Wenn eine Kernel-Version kein Startkernel 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 android-4.4-p war die letzte die android-4.4* Dessert Zweige, so dass er mit seiner ursprünglichen Plattform - Release, Android 9 (Pie) getestet unterstützt und ist. Es wird auch mit den Plattformversionen unterstützt und getestet, die Upgrades von Geräten mit 4.4-Kernel unterstützen: Android 10 und Android 11.

Da das Dessert Namensschema für Freisetzungen Android - Plattform wurde mit Android 10, den letzten Dessert Veröffentlichungen fallen gelassen , die genannt worden wäre , android-4.14-r und android-4.19-r statt genannt wurden android-4.14-stable und android-4.19-stable .

Dessertkernel werden ab Android 11 durch KMI-Kernel abgelöst, daher finden Sie die vollständige Liste der unterstützten Dessertkernel in dieser Tabelle.

Veröffentlichung der Android-Plattform Kernel Unterstützt bis
Android 8.1 (Oreo) android-4.4-o
android-4.9-o
Juni 2021
Android 9 (Kuchen) android-4.4-p
android-4.9-p
android-4.14-p
Januar 2022
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-Branches

Release Kerne werden beibehalten in dem monatlichen zitiert updates von Patches bereitzustellen Android Security Bulletin . Sie wurden für jeden Startkernel erstellt, als es eine neue Version der Android-Plattform gab. Sie sind veraltet , wenn die zugehörige Kernel oder Plattform Version veraltet ist , wie in der Support - Lebensdauern und Sicherheits - Patches .

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 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 von Dessert- oder KMI-Kernels zusammengeführt werden, 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 keiner wird hinzugefügt.

Veröffentlichung der Android-Plattform Kernel Unterstützt bis
Android 8.0 (Oreo) android-3.18-o-release
android-4.4-o-release
android-4.9-o-release
Januar 2021
Android 8.1 (Oreo MR1) android-3.18-o-mr1
android-4.4-o-mr1
android-4.9-o-mr1
Juni 2021
Android 9 (Kuchen) android-4.4-p-release
android-4.9-p-release
android-4.14-p-release
Januar 2022
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 das Starten neuer Geräte basierend auf einer der drei Linux-Kernelversionen. Wie in der nachstehenden Tabelle hervorgeht , sind die Start - Kernel 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 Kernel , die für Android 10, wie entworfen wurden android-4.19-q kann auf Geräten verwendet werden , auch nach der Plattform - Release auf Android Upgrade 11. mit Android Ab 12 wird es weniger Feature - Kernel als Start - Kernels die Anzahl der zu begrenzen stabile KMIs, die unterstützt werden müssen.

Veröffentlichung der Android-Plattform Kernel starten Funktionskerne
Android 9 (2018) android-4.4-p
android-4.9-p
android-4.14-p
android-4.4-p
android-4.9-p
android-4.14-p

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
android12-5.4
android12-5.10
android12-5.4
android12-5.10
Android T (AOSP experimentell) (2022) 1 android12-5.4
android12-5.10
android13-5.10
android13-5.x
android13-5.10
android13-5.x 2

1 Android T (AOSP experimentell) (2022) ist nicht verpflichtet und ist nur zu zeigen , gezeigt , wie das neue Verzweigungsmodell in Zukunft mit zwei Features und drei Start - Kernel voranschreiten.

Wo 2 5.x ist die Kernel - Version als LTS am Ende 2021 ausgewählt.

Gemeinsame Kernel-Hierarchie

Abzweigung von Android-Mainline

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

Gemeinsame Kernel aus Android-Mainline-Kernel erstellen

Abbildung 1. Erstellen von gemeinsamen Kernel von Android-Mainline - Kernel

Beachten Sie, dass die neue Android gemeinsamen Kernel android12-5.10 wurde aus verzweigten android-mainline im Jahr 2020. Im Jahr 2021 , wenn die nächste LTS deklariert wird, android13-5.x (wo 5.xy die Kernel - Version als LTS ausgewählt ist) wird verzweigen aus android-mainline .

Wie in Abbildung 1 gezeigt, ist jede Kernel-Version die Basis für zwei KMI-Kernel. Zum Beispiel sind die beiden v5.4 Kernel android11-5.4 und android12-5.4 , die beide Feature - Kernel für ihre jeweiligen Plattform - Releases. Dies wird auch für 5.10 der Fall sein; android12-5.10 erstellt wurde , als die LTS erklärt wurde und android13-5.10 wird von Ast android12-5.10 auf Kernel - Funktion komplett Meilenstein im Frühjahr 2021 die Entwicklung von Funktionen für Android T (AOSP experimentell) zu ermöglichen.

KMI-Zweiglebenszyklus

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

5.10 KMI-Zweiglebenszyklus

Abbildung 2. 5.10 KMI Zweig Lebenszyklus

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

Jeder 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

Wenn es erstellt wird , tritt ein KMI Zweig die Entwicklungsphase (dev in Abbildung 2) und ist für die nächste Android - Plattform - Release für Feature - Beiträge offen. In Figur 2 android12-5.10 erstellt wurde , als 5,10 als neue vorgeschalteten LTS kernel erklärt wurde. Der zweite KMI-Zweig für eine Kernel-Version wurde möglicherweise früher erstellt, um die Entwicklung der nachfolgenden Version zu ermöglichen. In Figur 2 android13-5.10 wird erstellt , wenn android12-5.10 Übergänge aus der Entwicklungsphase.

Stabilisierungsphase

Wenn der KMI - Zweig - Funktion vollständig erklärt, tritt es in die Stabilisierungsphase, etikettiert als Dolchstoß in Abbildung 2. Partner Funktionen und Fehlerbehebungen sind noch akzeptiert, aber KMI - Tracking aktiviert wird , um alle Änderungen zu erkennen, die die Schnittstelle beeinflussen. In dieser Phase werden KMI-brechende Änderungen akzeptiert, aber die KMI-Definition muss bei Bedarf aktualisiert werden. Sehen Sie sich die GKI Überblick Einzelheiten über KMI Überwachung.

KMI eingefrorene Phase

Bevor eine neue Plattform - Release zu AOSP gedrückt wird, wird der KMI Zweig eingefroren und bleibt über die gesamte Lebensdauer der Branche eingefroren. Dies bedeutet, dass keine KMI-schädigenden Änderungen akzeptiert werden, es sei denn, es wird ein schwerwiegendes Sicherheitsproblem identifiziert, das nicht ohne Auswirkungen auf das stabile KMI behoben werden kann. Um KMI-Ausfälle zu vermeiden, werden einige Patches, die von LTS zusammengeführt wurden, möglicherweise geändert oder gelöscht, wenn der Fix für Android-Geräte nicht erforderlich ist.

Wenn ein 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 des aktuellen KMI 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 gemeinsamen 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 KMI-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. Kontinuierliches Testen mit früheren Releases stellt sicher, dass die Kompatibilität gewahrt bleibt. So in Abbildung 2, die android12-5.10 Kernel für Android 12 Geräte und Android T (AOSP experimentell) Geräte verwendet werden. Da die Android - Plattform - Release auch mit früheren Versionen kompatibel ist, der android12-5.4 kann Kernel für Android T (AOSP experimentell) Geräte entweder für den Start oder ein Upgrade verwendet werden.

Beim Eintritt in die eingefrorene Phase wird der Zweig mit der KMI-Versionszeichenfolge mit der KMI-Generierungsnummer mit einem Git-Tag versehen. Wenn zum Beispiel android11-5.4 gefroren war, wurde es mit der KMI Version String getaggt 5.4-android11-0 wo die Hinter 0 ist die KMI Generationsnummer. Wenn ein Sicherheitsproblem oder ein anderes Ereignis auftritt, das die Annahme eines KMI-ändernden Patches erfordert, wird die KMI-Generierungsnummer erhöht und die Verzweigung neu gekennzeichnet. Zum Beispiel, wenn eine solche Änderung in angenommen wird android11-5.4 , wird der Zweig mit der neuen Version KMI markiert werden, 5.4-android11-1 . Die aktuelle Generation KMI kann mit dem finden uname - Befehl:

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

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

Wenn sich die KMI-Generation ändert, ist der Kernel nicht mit Herstellermodulen 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 Änderungen der KMI-Generation sehr selten sind.

Kompatibilität zwischen Kerneln

Die Kompatibilitätsanforderungen zwischen Kerneln derselben LTS-Familie ändern sich ab den neuen KMI-Kerneln.

KMI-Kernel

Die neuen KMI-Kernel behalten die Abwärtskompatibilität mit allen Android-Plattformversionen bei, die die Kernel-Version unterstützten. So ist der android12-5.4 Kernel für Android entwickelt 12 läuft mit früheren Versionen gewährleistet die Kompatibilität Continuous VTS und CTS Prüfung der Stable - Kernel 11. Android sicher auf Geräten verwendet werden , erhalten bleibt.

Das KMI ist stabil, sodass der Kernel aktualisiert werden kann, ohne dass Kernel-Module im Hersteller-Image neu erstellt werden müssen.

Legacy-Kernel

Die Legacy - Dessert - Kernel ( *-o , *-p , *-q , *-stable ) sind nicht rückwärtskompatibel über Android - Plattform Mitteilungen, aber Kerne aus den beiden vorherigen Android - Plattform - Releases werden für das Upgrade unterstützt. Daher ist ein Gerät mit Android ins Leben gerufen 10 basierend einen Kernel auf android-4.19-q kann entweder weiterhin die verwenden android-4.19-q - Kernel , wenn ein Upgrade auf Android 2020 oder aktualisieren Sie die herstellerspezifischen Code Unterstützung android-4.19-stable .

Kompatibilitätsmatrix

Diese Tabelle zeigt die unterstützten und getesteten Kernel-Versionen mit jeder Android-Plattformversion.

Veröffentlichung der Android-Plattform Unterstützte Kernel für Upgrades Unterstützte Kernel für den Start
Android 9 (2018) android-3.10
android-3.18
android-4.4-o
android-4.9-o
android-4.4-p
android-4.9-p
android-4.14-p
Android 10 (2019) android-3.18
android-4.4-o
android-4.9-o
android-4.4-p
android-4.9-p
android-4.14-p
android-4.9-q
android-4.14-q
android-4.19-q
Android 11 (2020) android-4.4-o
android-4.4-p
android-4.9-o
android-4.9-p
android-4.9-q
android-4.14-p
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
android-4.9-p
android-4.9-q
android-4.14-p
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

Support-Lebensdauer und Sicherheitspatches

Allgemeine Android-Kernel werden unterstützt, bis entweder der zugehörige LTS-Kernel oder die Android-Plattform-Version nicht mehr unterstützt wird. Während ein Kernel unterstützt wird, erhält er weiterhin LTS-Merges vom Upstream und Fehlerbehebungen für Android-spezifischen Code. Diese Updates enthalten alle Kernel - Sicherheits - Patches in den monatlichen zitiert Android Security Bulletins , die den Android gemeinsamen Kernel relevant sind.

Partner können sich darauf verlassen, dass sie durch die regelmäßige Zusammenführung von gängigen Android-Kernels alle möglichen Kernel-Sicherheitspatches erhalten.

Allgemeine Kernel-Tests

Die gängigen Kernel werden mit mehreren CI-Systemen getestet, zusätzlich zu Downstream-Tests durch die Hersteller.

Linaro-Kernel-Funktionstests

Linaro Kernel Functional Testing (LKFT) Tests initiieren verschiedene Testreihen einschließlich kselftest, LTP, VTS und CTS auf eine Reihe von physikalischen arm32 und arm64 Geräte. Aktuelle Testergebnisse finden sich hier .

KernelCI-Tests

KernelCI Build-and-Boot - Tests ausgelöst werden , wenn ein neuer Patch auf einen gemeinsamen Kernel Zweig verpflichtet. Mehrere hundert Build-Konfigurationen werden auf verschiedenen Boards getestet und gebootet. Aktuelle Ergebnisse für Android - Kernel gefunden werden können hier .

Android-Pre-Submit- und Post-Submit-Tests

Pre-Submit-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 durchgeführt, wenn ein neuer Patch auf einen gemeinsamen Kernel Zweig verpflichtet. Durch Eingabe aosp_kernel als Teilzweignamen finden Sie eine Liste der Kernel - Zweige mit den Ergebnissen zur Verfügung. Zum Beispiel Ergebnisse für android-mainline gefunden werden können hier .

0-Tage-Tests

0-day Prüfung führt Patch-by-Patch auf allen Android gemeinsamen Kernel Zweige testen , wenn neue Patches verpflichtet. Es werden verschiedene Boot-, Funktions- und Leistungstests durchgeführt. Verbinden Sie die öffentliche Gruppe cros-kernel-buildreports

Testmatrix

Gemeinsamer Android-Kernel Android-Plattform-Versionen Testsuiten
Meister 11 10 9 (Kuchen) 8 (Oreo) LKFT KernelCI Vorab senden Beitrag senden 0-Tag
android-mainline
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
android-4.14-p
android-4.9-p
android-4.4-p
android-4.9-o
android-4.4-o
android-3.18

Beitrag zu allgemeinen 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 in den spezifischen ACK-Zweig zurückportiert werden. Das Android - Kernel - Team freut Steig Bemühungen zum Wohle des Android - Ökosystem zu unterstützen.

Reichen Sie Patches zu Gerrit und entsprechen diesen Beitrag Richtlinien .