Generisches Kernel-Image-Projekt (GKI)

Auf dieser Seite wird das GKI-Projekt (Generic Kernel Image) beschrieben und wie es die Stabilität und Sicherheit von Android verbessert.

Verlauf

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

Diese Anpassung kann dazu führen, dass bis zu 50% des Kernelcodes nicht aus dem Stammbaum stammen, sondern aus Upstream-Linux-Kerneln oder ACKs. Daher führte die benutzerdefinierte Natur der Kernel vor GKI zu einer erheblichen Kernelfragmentierung.

Kosten der Fragmentierung

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

Sicherheitsupdates sind zeitaufwendig

Die im Android Security Bulletin (ASB) genannten Sicherheits-Patches müssen in jeden Gerätekernel zurückportiert werden. Aufgrund der Kernelfragmentierung ist es jedoch extrem teuer, Sicherheitskorrekturen auf Android-Geräte im Einsatz zu übertragen.

Schwierige Zusammenführung von Updates mit langfristiger Unterstützung

Die Long-Term Supported (LTS)-Releases enthalten Sicherheits- und andere kritische Fehlerkorrekturen. Es hat sich erwiesen, dass es am effektivsten ist, sich über die LTS-Releases auf dem Laufenden zu halten, um Sicherheitsfixes zu erhalten. Bei Pixel-Geräten wurde festgestellt, dass 90% der im ASB gemeldeten Kernel-Sicherheitsprobleme bereits für Geräte behoben wurden, die immer auf dem neuesten Stand sind.

Aufgrund der vielen benutzerdefinierten Änderungen an den Gerätekernen ist es jedoch schwierig, die LTS-Fehlerkorrekturen einfach in die Gerätekerne einzubinden.

Upgrades der Android-Plattformversion verhindern

Aufgrund der Fragmentierung ist es schwierig, neuen Android-Funktionen, die Kerneländerungen erfordern, Geräte im Einsatz hinzuzufügen. Der Android-Framework-Code musste die verschiedenen Kernelvarianten berücksichtigen und konnte nicht darauf vertrauen, dass neue Android-Funktionen im Kernel implementiert wurden. Das hat die Innovation verlangsamt und zu einer größeren Codegröße und Komplexität geführt.

Es ist schwierig, Kerneländerungen an Upstream-Linux zurückzugeben.

Die fragmentierte Art und Weise, wie Patches in die Produktionskerne gezogen wurden, führte zu einer Verzögerung von bis zu 18 Monaten zwischen dem Zeitpunkt, an dem eine LTS-Version upstream verfügbar war, und dem Zeitpunkt, an dem sie auf einem Gerät installiert wurde. Diese lange Verzögerung zwischen der Upstream-Kernel-Veröffentlichung und den Produkten erschwert es der Android-Community, die erforderlichen Funktionen und Treiber in die Upstream-Kernel einzubringen. Als ein Nutzer Verbesserungsvorschläge einreichte, hatte sich die Codebasis geändert, was es schwierig machte, die Relevanz des Patches zu zeigen.

Fragmentierung beheben: Allgemeines Kernel-Image

Das Generic Kernel Image (GKI)-Projekt behebt die Kernelfragmentierung, indem der Kernkernel vereinheitlicht und die SoC- und Board-Unterstützung aus dem Kernkernel in ladbare Anbietermodule verschoben wird. GKI bietet außerdem eine stabile Kernel-Modul-Schnittstelle (Kernel Module Interface, KMI) für Anbietermodule, 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 besteht aus einem einzelnen Kernel-Binärcode und zugehörigen ladbaren Modulen pro Architektur und 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 Lebensdauer einer GKI-Kernelversion werden keine Funktionen eingestellt.
  • Der GKI-Kernel stellt Treibern innerhalb eines bestimmten LTS eine stabile KMI bereit.
  • 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 enthalten. Release-Builds des generischen Kernel-Images (GKI) werden regelmäßig aktualisiert und mit LTS- und kritischen Fehlerkorrekturen versehen. Da die Binärstabilität für das KMI beibehalten wird, können Sie diese Boot-Images installieren, ohne Änderungen an den Anbieter-Images vorzunehmen. Das GKI-Projekt hat folgende Ziele:

  • Es dürfen keine erheblichen Leistungs- oder Leistungsrückgänge auftreten, wenn der Produktkernel durch den GKI-Kernel ersetzt wird.
  • Partnern die Bereitstellung von Kernel-Sicherheits- und Fehlerkorrekturen ohne Einbindung des Anbieters ermöglichen.
  • Kosten für die Aktualisierung der Hauptkernelversion für Geräte senken
  • Verwenden Sie für jede Architektur ein einzelnes GKI-Kernel-Binärprogramm. Aktualisieren Sie die Kernelversionen mit einem klaren Upgradeprozess.