Kernelmodule – Übersicht

Es gibt zwei Arten von Kernelmodulen: hardwareunabhängig GKI-Module und hardwarespezifische Anbietermodule. Diese Seite bietet einen Überblick über beide von Modulen.

GKI-Module

Generische Kernel-Image-Module (GKI) werden verwendet, um Kernel bereitzustellen, für die kein Boot erforderlich ist vom generischen Core-Kernel getrennt. Mit GKI-Modulen können Sie Bestimmte Kernel-Funktionen auswählen, die oft die Größe des Kernel-Images reduzieren und Verbrauch des Laufzeitarbeitsspeichers. Aufgrund der geringeren Größe eignet sich GKI gut für Android Go-Geräte und andere Formfaktoren mit eingeschränkten Ressourcen

GKI-Module bieten auch einen Mechanismus, mit dem Anbieter neue vorgelagerte Funktionen nach dem Meilenstein zur KMI-Fixierung. Integrierter Code kann nicht ersetzt werden, ohne ein weiteres Image zu erstellen, während Code als kann durch ein anderes ersetzt werden.

GKI-Module nutzen die Build Time Signing-Infrastruktur des Kernels zur Unterscheidung Modulen während der Laufzeit. Nicht signierte Module dürfen geladen werden solange sie nur Symbole enthalten, die auf der Zulassungsliste stehen oder von anderen Module ohne Signatur.

Es gibt zwei logische Typen von GKI-Modulen: geschütztes GKI-Modul und ein ungeschütztes GKI-Modul.

Geschütztes GKI-Modul

Ein geschütztes GKI-Modul wird von Google bereitgestellt und ist in keiner Weise eingeschränkt. verhält sich so, als wäre sie nach dem Laden mit dem Kernel erstellt worden. Außerdem Geschützte GKI-Module haben folgende Eigenschaften:

  • Geschützte GKI-Module haben Zugriff auf Nicht-KMI-Kernel-Symbole, die nicht für Anbietermodule oder ungeschützte GKI-Module verfügbar.
  • Geschützte GKI-Module können Symbole exportieren, die Teil der KMI-Oberfläche werden. Voraussetzung ist, dass diese Symbole in einer Symbolliste zitiert werden.
  • Geschützte GKI-Module können nicht von Anbietermodulen überschrieben werden.

Ein geschütztes GKI-Modul ist die Standardklasse von GKI-Modulen. Gesamter GKI Module gelten zum Zeitpunkt der Sperre für KMI als geschützt.

Ungeschütztes GKI-Modul

Ein ungeschütztes GKI-Modul kann von einem Anbietermodul überschrieben werden. Nach der KMI-Frist Ein geschütztes GKI-Modul könnte als ungeschützt gelten, entscheidet, dass Anbieter die Standardimplementierung mit einer Version, die neue Funktionen von Upstream-Linux-Funktionen enthält. In der nächsten GKI-Release, ungeschützte Module werden nach dem Upstream-Code erreicht einen gemeinsamen Android-Kernel (ACK). Ungeschützte GKI-Module folgende Merkmale haben:

  • Ungeschützte GKI-Module haben denselben Zugriff auf exportierte Symbole wie der Anbieter Module.
  • Ungeschützte GKI-Module können keine von geschützten GKI exportierten Symbole exportieren Module.
  • Ungeschützte GKI-Module müssen alle KMI-Schnittstellen beibehalten, als wären sie Teil des Core Kernel.
  • Nicht geschützte GKI-Module können von Anbietermodulen überschrieben werden.

Anbietermodule

Partner stellen ein Anbietermodul bereit, um SoC und gerätespezifische Geräte zu implementieren. Funktionen. Vorhandene Kernel-Module, die nicht als Teil des Der GKI-Kernel kann als Anbietermodul bereitgestellt werden.

Da eines der Hauptziele des GKI-Projekts darin besteht, Hardware-spezifischen Code im Kernkernel verwenden, können Anbieter davon ausgehen, enthält der Kernel keine Module, die eindeutig ihre eigene Hardware verwalten. Für kann der Anbieter ABC Inc. davon ausgehen, dass Konfigurationen wie CONFIG_ABC_SOC_SUPPORT wird weder als integriert noch als ladebar aktiviert GKI-Module ohne deren Unterstützung.

Wenn ein Kernel-Treiber oder ein Framework in ACK vorhanden ist, aber nicht als Teil des GKI-Kernels hinzufügen, können Anbieter den Treiber modifizieren und als Anbieter bereitstellen. -Modul. Bei nicht anbieterspezifischen Modulen wird davon abgeraten, solche Änderungen vorzunehmen. da dieselben Funktionen mit dem GKI-Kernel in einem zukünftige Version. Wenn der GKI-Kernel Funktionen enthält, die von einem Anbieter bereitgestellt werden wird es nicht geladen. Beispiel: CONFIG_GREYBUS ist in Android 11 nicht auf GKI eingestellt, also Anbieter können Greybus-Anbietermodule bereitstellen. CONFIG_GREYBUS ist aber möglicherweise als integriertes GKI- oder GKI-Modul in Android 12, in in welchem Fall die Greybus-Anbietermodule nicht geladen werden. Eine bewährte Methode besteht darin, die vorgelagerte Version nicht anbieterspezifischer Treiber, wenn diese als Anbietermodule.

Du kannst Anbietermodule in der vendor oder im vendor_boot Bild. Module, die zu Beginn des Bootvorgangs erforderlich sind, müssen sich in vendor_boot befinden. Das Laden von Modulen aus vendor_boot ist mit Startzeit verbunden.