Dieses Dokument enthält häufig gestellte Fragen zum Android-Kernel, auch als GKI-Kernel (Generic Kernel Image) bezeichnet. Wenn Sie mit der Terminologie von GKI und GKI-Kernel nicht vertraut sind, lesen Sie die Kernel-Übersicht.
Können Symbollisten der Kernelmodulschnittstelle (Kernel Module Interface, KMI) in einem stabilen Kernel geändert werden?
Änderungen, die sich nicht auf die vorhandene KMI auswirken, können zu eingefrorenen Kerneln hinzugefügt werden. Zu diesen Änderungen gehören neue exportierte Funktionen und Einträge in der Symbolliste. Weitere Informationen finden Sie unter Symbollisten verwalten.
Kann ich Strukturen ändern, die von Anbietermodulen in einem stabilen Kernel verwendet werden?
Strukturen, die Teil einer KMI-Schnittstelle sind, können in Kerneln mit einer eingefrorenen KMI nicht geändert werden. Vor dem Einfrieren der KMI können diese Strukturen geändert werden.
Kann ich den Kernel ändern, solange ich die binäre oder Quellcodekompatibilität nicht beeinträchtige?
Änderungen, die sich nicht auf die KMI auswirken, können wie unter Android-spezifische Patches beschrieben vorgenommen werden.
Wie wird die Kernelkonfiguration in GKI gehandhabt?
Informationen zur Kernelkonfiguration finden Sie unter den Änderungen an gki_defconfig.
Wie gehe ich mit Upstream-Fehlerkorrekturen für Überschreibungen vorhandener GKI-Module um?
Wenn Sie ein Anbietermodul auf der Grundlage eines Treibers in Android Common Kernel (ACK), erstellen, müssen Sie dafür sorgen, dass Fehlerkorrekturen aus Upstream und ACK in Ihr Modul übernommen werden. Im Allgemeinen ist es am besten, den GKI-Kernel und die GKI-Module unverändert zu verwenden, damit diese Updates konsistent von Google bereitgestellt werden.
Gibt es GKI-spezifische Tests?
Es gibt VTS-Tests (Vendor Test Suite), mit denen geprüft wird, ob ein zertifizierter GKI-Build installiert ist, und mit denen GKI-Anforderungen pro Release erzwungen werden. Es gibt beispielsweise Android 12 VTS-Tests für den Boot-Header v3 und um zu prüfen, ob die erforderlichen Partitionen auf einem Gerät mit einem 5.10-Kernel vorhanden sind.
Wie erstelle ich die Projekt-Defconfig-Fragmentdatei für Geräte-Builds?
Viele GKI-kompatible Geräte verwenden ein Konfigurationsfragment, um die Konfigurationsoptionen zu beschreiben, die zusätzlich zu gki_defconfig erforderlich sind, um die Anbietermodule zu erstellen.
Beispiele, die Teil der ACK-Codebasis sind, sind Cuttlefish und DB845c.
Eine manuelle Überprüfung der Konfigurationsoptionen
zur Optimierung des Fragments ist nicht zu vermeiden. scripts/diffconfig aus den Kernelquellen
ist jedoch nützlich, um die Ergebnisse von gki_defconfig und
gki_defconfig+device.fragment zu vergleichen.
Gibt es eine Problemumgehung für modprobe, wenn „-“ und „_“ als gleichwertig behandelt werden?
Die
Manpage von modprobe
enthält diese Beschreibung: "modprobe fügt dem Linux-Kernel auf intelligente Weise ein Modul hinzu
oder entfernt es. Beachten Sie, dass es aus Gründen der Einfachheit
keinen Unterschied zwischen „_“ und „-“ in Modulnamen gibt (automatische Unterstrichkonvertierung
wird durchgeführt)." Das GKI-Team hält sich an die Standardkonventionen von Upstream. Daher müssen Anbietertools oder Modulnamenskonventionen diese Einhaltung berücksichtigen.
Wie aktiviere ich debugfs für die interne Verwendung?
Weitere Informationen zum Aktivieren von debugfs finden Sie unter Intrusive Downstream-Debug funktionen.
Wie kann ich nicht übereinstimmende ABIs zwischen dem GKI-Kernel und einer bestimmten aktivierten Modulkonfiguration beheben?
Nicht übereinstimmende ABIs zwischen dem GKI-Kernel und der Modulkonfiguration stellen eine implizite Modulkonfigurationsabhängigkeit dar. Wenn ein Modul aktiviert wird, wird eine binäre Konfiguration in das resultierende Kernel-Image eingebunden. Wenden Sie sich an das Android Kernel-Team (kernel-team@android.com), um eine Lösung zu finden. Nachdem die Liste der Symbole festgelegt wurde, erstellen Sie einen Fehler im Issue Tracker und laden Sie eine Änderung an der Symbolliste hoch.