Konfigurieren Sie Kernelfunktionen als GKI-Module

Auf dieser Seite erfahren Sie, wie Sie eine neue Kernel-Funktion als GKI-Modul konfigurieren oder eine vorhandene integrierte Kernel-Funktion als GKI-Modul konfigurieren.

Konfigurieren Sie eine neue Funktion als GKI-Modul

  1. Bearbeiten Sie für die neue Funktion gki_defconfig und setzen Sie das Konfigurationselement der erforderlichen Kernel-Funktion von n auf m ( =m ). Legen Sie diese Einstellung sowohl in arch/arm64/configs/gki_defconfig als auch arch/x86/configs/gki_defconfig fest.

  2. Fügen Sie die für die Funktion generierten KO-Dateien ( .ko ) zum Abschnitt COMMON_GKI_MODULES_LIST von common/modules.bzl hinzu. Fügen Sie die Dateien in sortierter Reihenfolge hinzu. Wenn Sie sich über alle generierten Dateien nicht sicher sind, schlägt der Build fehl und listet alle erforderlichen KO-Dateien auf, die der Liste hinzugefügt werden müssen.

  3. Fügen Sie denselben Satz KO-Dateien aus Schritt 2, in aufsteigender Reihenfolge für die binäre Suche zur Laufzeit sortiert, zu common/android/gki_{ARCH}_protected_modules um das Modul als geschütztes GKI-Modul zu kennzeichnen. Aktualisieren Sie die Liste der geschützten Exporte, um diejenigen aus dem neu hinzugefügten Modul in common/android/abi_gki_protected_exports_{ARCH} einzuschließen, indem Sie tools/bazel run //common:kernel_aarch64_abi_update_protected_exports für aarch64 verwenden. Module, die als geschützte GKI-Module gekennzeichnet sind, müssen weiterhin von Google als offiziell geschützte Module genehmigt werden.

  4. Stellen Sie sicher, dass neu hinzugefügte KO-Dateien aus Schritt 2 in die Dateien out/<androidX-YZ>/dist/system_dlkm.img und out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz des Kernels kopiert werden. Module im Archiv system_dlkm_staging_archive.tar.gz können als Eingabe zum Generieren von system_dlkm.img im Plattform-Build verwendet werden.

  5. Senden Sie Ihre Änderungen zur Überprüfung. GKI-Module sind eine Kernelfunktion, die nur für Android verfügbar ist. Daher ist es nicht erforderlich, Patches zur Modulkonvertierung vorab einzureichen. Sie müssen jedoch andere Richtlinien befolgen, um ACK-Patches (Android Common Kernel) einzureichen.

Konfigurieren Sie eine im Kernel integrierte Funktion als GKI-Modul

  1. Bearbeiten Sie für eine vorhandene integrierte Kernel-Funktion gki_defconfig und setzen Sie das Konfigurationselement der erforderlichen Kernel-Funktion von y auf m ( =m ). Legen Sie diese Einstellung sowohl in arch/arm64/configs/gki_defconfig als auch arch/x86/configs/gki_defconfig fest.

  2. Fügen Sie die für die Funktion generierten KO-Dateien ( .ko ) zum Abschnitt COMMON_GKI_MODULES_LIST von common/modules.bzl hinzu. Fügen Sie die Dateien in sortierter Reihenfolge hinzu. Wenn Sie sich über alle generierten Dateien nicht sicher sind, schlägt der Build fehl und listet alle erforderlichen KO-Dateien auf, die der Liste hinzugefügt werden müssen.

  3. Fügen Sie denselben Satz KO-Dateien aus Schritt 2, in aufsteigender Reihenfolge für die binäre Suche zur Laufzeit sortiert, zu common/android/gki_{ARCH}_protected_modules um das Modul als geschütztes GKI-Modul zu kennzeichnen. Aktualisieren Sie die Liste der geschützten Exporte, um diejenigen aus dem neu hinzugefügten Modul in common/android/abi_gki_protected_exports_{ARCH} einzuschließen, indem Sie tools/bazel run //common:kernel_aarch64_abi_update_protected_exports für aarch64 verwenden. Module, die als geschützte GKI-Module gekennzeichnet sind, müssen weiterhin von Google als offiziell geschützte Module genehmigt werden.

  4. Stellen Sie sicher, dass neu konvertierte Modul-KO-Dateien aus Schritt 2 in die Dateien out/<androidX-YZ>/dist/system_dlkm.img und out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz des Kernels kopiert werden. Module im Archiv system_dlkm_staging_archive.tar.gz können als Eingabe zum Generieren von system_dlkm.img im Plattform-Build verwendet werden.

  5. Senden Sie Ihre Änderungen zur Überprüfung. GKI-Module sind eine Kernelfunktion, die nur für Android verfügbar ist. Daher ist es nicht erforderlich, Patches zur Modulkonvertierung vorab einzureichen. Sie müssen jedoch die anderen Richtlinien befolgen, um Android Common Kernel (ACK)-Patches einzureichen.

Konvertieren Sie ein geschütztes GKI-Modul in ein ungeschütztes

  1. Entfernen Sie das Modul, das von geschützt in ungeschützt konvertiert werden soll, aus der Liste der geschützten Module unter common/android/gki_protected_modules .

  2. Aktualisieren Sie die Liste der geschützten Exporte, um diejenigen aus dem neu konvertierten ungeschützten Modul im common/android/abi_gki_protected_exports_{ARCH} auszuschließen, indem Sie tools/bazel run //common:kernel_aarch64_abi_update_protected_exports für aarch64 verwenden.

  3. Senden Sie Ihre Änderungen zur Überprüfung. GKI-Module sind eine Kernelfunktion, die nur für Android verfügbar ist. Daher ist es nicht erforderlich, Patches zur Modulkonvertierung vorab einzureichen. Sie müssen jedoch die anderen Richtlinien befolgen, um Android Common Kernel (ACK)-Patches einzureichen.

Kurzanleitung zur Behebung von Symbolverstößen in GKI-Modulen

Wenn nicht signierte Module den für GKI-Module geltenden Symbolschutz verletzen, können beim Laden des Moduls zwei Arten von Fehlern auftreten, die zu einem Fehler führen.

1. Nicht signiertes Modul mit dem geschützten Symbol

Fehler:

module: Protected symbol: some_kernel_function (err -13)

Ursache:

Die Datei module.ko ist ein nicht signiertes Anbietermodul und versucht, das vom GKI-Modul exportierte Symbol some_kernel_function während des Ladens aufzulösen, ohne in der Anbietersymbolliste aufgeführt zu sein.

Auflösung:

Wenn module.ko kein geschütztes GKI-Modul ist, wird der Fehler durch Aktualisieren der Symbolliste behoben, indem some_kernel_function in die Anbietersymbolliste aufgenommen wird. Alternativ können Sie die GKI-Version von module.ko verwenden.

2. Unsigniertes Modul, das das geschützte Symbol exportiert

Fehler:

module: exports protected symbol some_kernel_function

Ursache:

Das Modul, das die some_kernel_function exportiert, ist ein geschütztes GKI-Modul und module.ko ist wahrscheinlich eine nicht signierte benutzerdefinierte Version dieses Moduls. Wenn module.ko versucht, some_kernel_function zu exportieren, was nur von einem signierten GKI-Modul exportiert werden kann, schlägt das Laden mit dieser Meldung fehl.

Auflösung:

Dies kann durch die Verwendung der GKI-Version des Moduls behoben werden, das some_kernel_function exportiert, wenn das unsignierte Modul eine benutzerdefinierte Version ist.