Häufig gestellte Fragen zum Android-Kernel

Dieses Dokument enthält häufig gestellte Fragen zum Android-Kernel, auch bekannt als GKI-Kernel (Generic Kernel Image). Wenn Sie mit GKI und der GKI-Kernelterminologie nicht vertraut sind, lesen Sie die Kernelübersicht.

Können KMI-Symbollisten (Kernel Module Interface) in einem stabilen Kernel geändert werden?

Änderungen, die sich nicht auf das vorhandene KMI auswirken, können Kerneln hinzugefügt werden, die eingefroren sind. Dazu gehören neue exportierte Funktionen und Symboleinträge. Weitere Informationen finden Sie unter Symbollisten verwalten.

Kann ich Strukturen ändern, die von Vendormodulen in einem stabilen Kernel verwendet werden?

Strukturen, die Teil einer KMI-Schnittstelle sind, können in Kernels mit einer eingefrorenen KMI nicht geändert werden. Vor dem KMI-Freeze können diese Strukturen geändert werden.

Kann ich den Kernel ändern, solange ich die binäre oder Quellcode-Kompatibilität nicht beeinträchtige?

Änderungen, die sich nicht auf den 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 Änderungen an gki_defconfig.

Wie gehe ich mit Upstream-Fehlerkorrekturen für Überschreibungen vorhandener GKI-Module um?

Wenn Sie ein Anbietermodul auf Grundlage eines Treibers im 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 in Ihrem besten Interesse, den GKI-Kernel und die GKI-Module ohne Änderungen zu verwenden, damit diese Updates konsistent von Google bereitgestellt werden.

Gibt es GKI-spezifische Tests?

Es gibt Vendor Test Suite (VTS)-Tests, mit denen überprüft wird, ob ein zertifizierter GKI-Build installiert ist, und mit denen die GKI-Anforderungen für die einzelnen Releases durchgesetzt werden. Es gibt beispielsweise Android 12-VTS-Tests für den Boot-Header v3 und zum Überprüfen des Vorhandenseins erforderlicher Partitionen auf einem Gerät mit einem 5.10-Kernel.

Wie erstelle ich die Projekt-Defconfig-Fragmentdatei für Geräte-Builds?

Viele GKI-kompatible Geräte verwenden ein Konfigurationsfragment, um die zusätzlich zu gki_defconfig erforderlichen Konfigurationsoptionen zum Erstellen der Anbietermodule zu beschreiben. Beispiele, die Teil der ACK-Codebasis sind, sind Cuttlefish und DB845c. Eine manuelle Überprüfung der Konfigurationsoptionen zur Optimierung des Fragments lässt sich nicht 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 dafür, dass „modprobe“ „-“ und „_“ als gleichwertig behandelt?

Die Manpage für modprobe enthält die folgende Beschreibung: „modprobe fügt ein Modul auf intelligente Weise zum Linux-Kernel hinzu oder entfernt es daraus. Beachten Sie, dass aus Gründen der Einfachheit kein Unterschied zwischen _ und - in Modulnamen besteht (automatische Unterstrichkonvertierung wird durchgeführt).“ Das GKI-Team hält sich an die standardmäßige Upstream-Konvention. Daher müssen Anbieter-Tools oder Modul-Namenskonventionen dies berücksichtigen.

Wie aktiviere ich debugfs für die interne Verwendung?

Weitere Informationen zum Aktivieren von debugfs finden Sie unter Intrusive Downstream-Debugging-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 erstellt wurde, erstellen Sie einen Fehler im Issue Tracker und laden Sie eine Änderung an der Symbolliste hoch.