Generisches Kernel-Image-Projekt (GKI)

Auf dieser Seite wird das Generic Kernel Image-Projekt (GKI) beschrieben und erläutert, wie es die Android-Stabilität erhöht und die Sicherheit verbessert.

Verlauf

Jedes Android-Gerät benötigt einen Produktionskernel. Vor GKI waren die Kernel benutzerdefiniert und basierten auf dem Android Common Kernel (ACK). Gerätebezogene Änderungen wurden von SoC-Anbietern (System-on-Chip) und OEMs vorgenommen.

Diese Anpassung kann dazu führen, dass bis zu 50% des Kernelcodes Out-of-Tree-Code sind und nicht aus Upstream-Linux-Kerneln oder ACKs stammen. Die benutzerdefinierte Natur von Pre-GKI-Kerneln führte zu einer erheblichen Kernel-Fragmentierung.

Kosten der Fragmentierung

Die Kernel-Fragmentierung hat mehrere negative Auswirkungen auf die Android-Community.

Sicherheitsupdates sind arbeitsintensiv

Die im Sicherheitsbulletin für Android genannten Sicherheitspatches müssen in jeden der Geräte-Kernel zurückportiert werden. Aufgrund der Kernel-Fragmentierung ist es jedoch sehr kostspielig, Sicherheitskorrekturen auf Android-Geräte zu übertragen.

Schwierigkeiten beim Zusammenführen von LTS-Updates

Die LTS-Releases (Long-Term Supported) enthalten Sicherheits- und andere wichtige Fehlerkorrekturen. Die Aktualisierung auf LTS-Releases hat sich als effektivste Methode für die Bereitstellung von Sicherheitskorrekturen erwiesen. Auf Pixel-Geräten wurde festgestellt, dass 90% der im ASB gemeldeten Kernel-Sicherheitsprobleme bereits für Geräte behoben wurden, die auf dem neuesten Stand sind.

Aufgrund der vielen benutzerdefinierten Änderungen in den Geräte-Kernels ist es jedoch schwierig, die LTS-Korrekturen einfach in die Geräte-Kernels zu übernehmen.

Aktualisierungen der Android-Plattformversion verhindern

Durch die Fragmentierung ist es schwierig, neue Android-Funktionen, für die Kerneländerungen erforderlich sind, auf Geräten im Feld hinzuzufügen. Der Android Framework-Code musste die verschiedenen Kernel-Variationen berücksichtigen und konnte sich nicht darauf verlassen, dass neue Android-Funktionen im Kernel implementiert werden. Dies verlangsamte Innovationen und führte zu einer größeren Code-Größe und -Komplexität.

Schwierig, Kernel-Änderungen an Upstream-Linux zurückzugeben

Die fragmentierte Art und Weise, wie Patches in die Produktionskernel aufgenommen wurden, führte zu einer Verzögerung von bis zu 18 Monaten zwischen der Verfügbarkeit einer LTS-Version im Upstream und der Verfügbarkeit auf einem Gerät. Diese lange Verzögerung zwischen der Veröffentlichung des Upstream-Kernels und den Produkten erschwert es der Android-Community, benötigte Funktionen und Treiber in die Upstream-Kernel einzubringen. Bis ein Nutzer Verbesserungsvorschläge einreichte, hatte sich die Codebasis geändert, sodass es schwierig war, die Relevanz des Patches zu zeigen.

Fragmentierung beheben: Allgemeines Kernel-Image

Das Generic Kernel Image (GKI) Project (Projekt für generische Kernel-Images) soll die Kernel-Fragmentierung beheben, indem der Core-Kernel vereinheitlicht und die SoC- und Board-Unterstützung aus dem Core-Kernel in ladbare Vendormodule verschoben wird. GKI bietet außerdem eine stabile Kernelmodulschnittstelle (Kernel Module Interface, KMI) für Vendormodule, sodass Module und Kernel unabhängig voneinander aktualisiert werden können. Einige Merkmale des GKI-Kernels:

  • Der GKI-Kernel wird aus den ACK-Quellen erstellt.
  • Der GKI-Kernel ist ein einzelnes Kernel-Binärprogramm plus zugehörige ladbare Module pro Architektur und pro LTS-Release.
  • Der GKI-Kernel wird mit allen Android-Plattform-Releases getestet, die für das zugehörige ACK unterstützt werden. Während der gesamten Lebensdauer einer GKI-Kernelversion werden keine Funktionen eingestellt.
  • Der GKI-Kernel stellt Treibern innerhalb eines bestimmten LTS eine stabile KMI zur Verfügung.
  • Der GKI-Kernel enthält keinen SoC- oder board-spezifischen Code.

Ein Bild der GKI-Architektur finden Sie in der Kernelübersicht.

Allgemeines Bild

Ab Android 12 müssen Geräte, die mit der Kernelversion 5.10 oder höher ausgeliefert werden, den GKI-Kernel verwenden. GKI-Release-Builds (Generic Kernel Image) werden regelmäßig aktualisiert und mit LTS- und kritischen Fehlerkorrekturen versehen. Da die binäre Stabilität für den KMI beibehalten wird, können Sie diese Boot-Images installieren, ohne Änderungen an Anbieter-Images vorzunehmen. Das GKI-Projekt hat folgende Ziele:

  • Beim Ersetzen des Produkt-Kernels durch den GKI-Kernel dürfen keine erheblichen Leistungs- oder Stromverbrauchseinbußen auftreten.
  • Partner können Kernel-Sicherheitskorrekturen und Fehlerkorrekturen ohne Beteiligung des Anbieters bereitstellen.
  • Die Kosten für das Aktualisieren der Hauptkernelversion für Geräte werden gesenkt.
  • Halten Sie ein einzelnes GKI-Kernel-Binärprogramm pro Architektur aufrecht, indem Sie Kernelversionen mit einem klaren Verfahren für das Upgrade aktualisieren.