Der Android-Kernel basiert auf einem Upstream-Linux-LTS-Kernel (Long Term Support). Bei Google werden LTS-Kernel mit Android-spezifischen Patches kombiniert, um sogenannte Android Common Kernels (ACKs) zu bilden.
Neuere ACKs (Version 5.4 und höher) werden auch als GKI-Kernel bezeichnet. GKI-Kernel unterstützen die Trennung des hardwareunabhängigen generischen Kern-Kernels und der GKI-Module von den hardwarespezifischen Anbietermodulen.
Der GKI-Kernel interagiert mit hardwarespezifischen Anbietermodulen, die ein System-on-a-Chip (SoC) und platinenspezifischen Code enthalten. Die Interaktion zwischen dem GKI-Kernel und den Anbietermodulen wird durch die Kernel Module Interface (KMI) ermöglicht. Diese besteht aus Symbollisten, in denen die Funktionen und globalen Daten aufgeführt sind, die von Anbietermodulen benötigt werden. Abbildung 1 zeigt die Architektur des GKI-Kernels und des Anbietermoduls:
![GKI-Architektur](https://source.android.com/static/docs/core/architecture/images/generic-kernel-image-architecture.png?authuser=0&hl=de)
Kernel-Glossar
In diesem Abschnitt werden die in der Kerneldokumentation verwendeten Begriffe erläutert.
Kerneltypen
- Android Common Kernel (ACK)
- Ein Kernel, der einem LTS-Kernel nachgeordnet ist und Patches enthält, die für die Android-Community von Interesse sind und nicht in den Linux-Mainline- oder LTS-Kernel (Long Term Support) eingeflossen sind. Neuere ACKs (Version 5.4 und höher) werden auch als GKI-Kernel bezeichnet, da sie die Trennung von hardwareunabhängigem Generic Kernel-Code und hardwareunabhängigen GKI-Modulen unterstützen.
- AOSP-Kernel (Android Open Source Project)
- Android Common Kernel
- Feature-Kernel
- Ein Kernel, in dem die Funktionen der Plattformversion garantiert implementiert sind. In Android 12 waren das beispielsweise android12-5.4 und android12-5.10. Android 12-Funktionen können nicht auf 4.19-Kernel zurückportiert werden. Die Funktionen würden denen eines Geräts ähneln, das mit 4.19 auf Android 11 gestartet und auf Android 12 aktualisiert wurde.
- Generic Core Kernel
- Der Teil des GKI-Kernels, der für alle Geräte gleich ist.
- Generic Kernel Image (GKI)-Kernel
- Jeder neuere ACK-Kernel (5.4 und höher, derzeit nur aarch64). Dieser Kernel besteht aus zwei Teilen: dem GKI-Kern mit Code, der für alle Geräte identisch ist, und von Google entwickelten GKI-Modulen, die bei Bedarf dynamisch auf Geräten geladen werden können.
- Kernel der Kernel-Modul-Schnittstelle (KMI)
- GKI-Kernel
- Launch Kernel
- Ein Kernel, der für die Markteinführung eines Geräts für eine bestimmte Android-Plattformversion gültig ist. In Android 12 waren beispielsweise 4.19, 5.4 und 5.10 gültige Startkernel.
- LTS-Kernel (Long Term Support)
- Ein Linux-Kernel, der 2 bis 6 Jahre lang unterstützt wird. LTS-Kernel werden einmal pro Jahr veröffentlicht und bilden die Grundlage für alle ACKs von Google.
Filialtypen
- ACK KMI-Kernel-Branch
- Der Branch, für den GKI-Kernel erstellt werden. Beispiel: android12-5.10 und android13-5.15.
- Android-Mainline
- Der primäre Entwicklungszweig für Android-Funktionen. Wenn ein neuer LTS-Kernel upstream deklariert wird, wird der entsprechende neue GKI-Kernel von android-mainline abgezweigt.
- Linux-Mainline
- Der primäre Entwicklungszweig für die Upstream-Linux-Kernel, einschließlich LTS-Kernel.
Sonstige Begriffe
- Zertifiziertes Boot-Image
- Der Kernel wird in Binärform (
boot.img
) bereitgestellt und auf das Gerät geflasht. Dieses Image ist insofern zertifiziert, als es eingebettete Zertifikate enthält, damit Google überprüfen kann, ob das Gerät mit einem von Google zertifizierten Kernel ausgeliefert wird. - Dynamisch ladbares Kernel-Modul (Dynamically Loadable Kernel Module, DLKM)
- Ein Modul, das je nach den Anforderungen des Geräts beim Starten des Geräts dynamisch geladen werden kann. GKI- und Anbietermodule sind beides Arten von DLKMs. DLKMs werden in
.ko
-Form veröffentlicht und können Treiber oder andere Kernelfunktionen bereitstellen. - GKI-Projekt
- Ein Google-Projekt, das die Kernelfragmentierung angeht, indem die Funktionen des gemeinsamen Kerns des Kernels von der anbieterspezifischen SoC- und Board-Unterstützung in ladbare Module getrennt werden.
- Generisches Kernel-Image (GKI)
- Ein von Google zertifiziertes Boot-Image, das einen GKI-Kernel enthält, der aus einem ACK-Quellbaum erstellt wurde und zum Flashen auf die Bootpartition eines Android-Geräts geeignet ist.
- KMI
- Eine Schnittstelle zwischen dem GKI-Kernel und Anbietermodulen, die es ermöglicht, Anbietermodule unabhängig vom GKI-Kernel zu aktualisieren. Diese Schnittstelle besteht aus Kernelfunktionen und globalen Daten, die anhand von Symbollisten pro Partner als Anbieter-/OEM-Abhängigkeiten identifiziert wurden.
- GKI-Module
- Von Google entwickelte Kernelmodule, die bei Bedarf dynamisch auf Geräten geladen werden können.
Diese Module werden als Artefakte des GKI-Kernels erstellt und zusammen mit GKI als
system_dlkm_staging_archive.tar.gz
-Archiv bereitgestellt. GKI-Module werden von Google mit dem Schlüsselpaar zur Kernel-Buildzeit signiert und sind nur mit dem GKI-Kernel kompatibel, mit dem sie erstellt wurden. - Anbietermodul
- Ein von einem Partner entwickeltes hardwarespezifisches Modul mit SoC- und gerätespezifischen Funktionen. Ein Anbietermodul ist eine Art dynamisch ladbares Kernelmodul.
Wie geht es weiter?
- Wenn Sie mit der Android-Kernel-Entwicklung noch nicht vertraut sind, sollten Sie sich zuerst mit den folgenden Themen vertraut machen:
- Long Term Stable Kernels: Informationen zu Upstream-LTS-Kerneln, die in ACKs einfließen.
- Android Common Kernels: Informationen zu ACKs.
- Wenn Sie neu in der GKI-Kernelentwicklung sind, lesen Sie zuerst den Artikel GKI-Entwicklung.