Stabile Oberfläche für Kernelmodule

Es ist wichtig, eine stabile Kernel-Modulschnittstelle (KMI) für den Anbieter aufrechtzuerhalten Module. Der GKI-Kernel ist werden in binärer Form erstellt und ausgeliefert. separater Baum. Die resultierenden GKI-Kernel- und Anbietermodule müssen obwohl sie zusammen entwickelt wurden.

Im Allgemeinen hat die Linux-Community sein skeptisch gegenüber dem Konzept des In-Kernel-ABI Stabilität für den Mainline-Kernel. Bei unterschiedlichen Toolchains, Konfigurationen, und einem sich ständig weiterentwickelnden Linux-Mainline-Kernel ist es nicht machbar, KMI in Mainline stabil. Es ist jedoch möglich, der stark eingeschränkten GKI-Umgebung mit diesen Einschränkungen:

  • Nur eine Konfiguration (gki_defconfig) kann zum Erstellen des Kernel.

  • Die KMI ist nur innerhalb derselben Version von Langzeitsupport und Android-Version eines Kernels stabil, z. B. android13-5.10, android12-5.10 oder android13-5.15.

    • Für android-mainline wird keine KMI-Stabilität beibehalten.
  • Nur die spezifische Clang-Toolchain, die in AOSP bereitgestellt und für den der entsprechende Zweig für die Erstellung des Kernels und der Module verwendet wird.

  • Nur Symbole, die von Modulen aus einer Symbolliste verwendet werden können, sind werden auf Stabilität überwacht und als KMI-Symbole betrachtet.

    • Folglich dürfen in den Anbietermodulen nur KMI-Symbole verwendet werden. Dieses wird erzwungen, wenn das Laden von Modulen fehlschlägt, wenn Nicht-KMI-Symbole erforderlich.
  • Nachdem der KMI-Zweig eingefroren ist, sind Änderungen zulässig, die KMI kann jedoch nicht unterbrochen werden. Zu diesen Änderungen gehören:

    • Konfigurationsänderungen
    • Änderungen am Kernel-Code
    • Änderungen an der Toolchain (einschließlich Aktualisierungen)

Hermetischen Build-Prozess und LLVM-Toolchain verwenden

Der hermetische Build-Prozess sorgt mit repo-Manifesten in kernel/manifest beschreibt die Build-Umgebung umfassend. Beispiel: Der Parameter Manifest für android13-5.15 enthält die Toolchain, Build-Skripts und alles andere, was zum Erstellen der Generischer Kernel-Image-Kernel (GKI). Die entsprechende build.config-Konfiguration z. B. die GKI-Build-Konfiguration build.config.gki.aarch64, Sie stellen sicher, dass die enthaltenen Tools korrekt verwendet werden, um konsistente Builds zu generieren. Ergebnisse.

Die Verwendung eines hermetischen Build-Prozesses stellt außerdem sicher, dass die ABI-Beschreibung für die ist einheitlich, ob von Google generiert (z. B. abi_gki_aarch64.xml für android13-5.15) oder in einer lokalen Baumstruktur generiert, die den Anbieter enthält Module. Die Tools zum Erstellen und Vergleichen der ABI-Beschreibung für das Kernel Module Interface (KMI) werden ebenfalls als Teil des Repositorys bereitgestellt. die im Manifest beschrieben sind.

Die zum Erstellen des GKI-Kernels verwendete Toolchain muss vollständig kompatibel sein mit Die Toolchain, die zum Erstellen von Anbietermodulen verwendet wird. Ab Android 10, alle Android-Kernel müssen erstellt werden mit einer LLVM-Toolchain. Mit GKI, der LLVM-Toolchain, die zum Erstellen des Produkts verwendet wird Kernel und Anbietermodule müssen dasselbe ABI generieren wie die LLVM-Toolchain aus AOSP und Partner müssen sicherstellen, dass die KMI mit dem GKI-Kernel kompatibel ist. Es wird dringend empfohlen, die bereitgestellten Build-Tools zu verwenden, da diese beste Kompatibilität.

Wie geht es weiter?

  • Anleitungen zum Erstellen des Kernels mithilfe des hermetischen Build-Prozesses und LLVM-Toolchain, siehe Verweis auf Build-Kernel

  • Anweisungen zum Überwachen des ABI und zum Beheben von Problemen findest du unter ABI-Monitoring unter Android-Kernel