Kernelfunktionen als GKI-Module konfigurieren

Auf dieser Seite wird beschrieben, wie Sie eine neue Kernelfunktion als GKI-Modul konfigurieren oder eine vorhandene integrierte Kernelfunktion als GKI-Modul konfigurieren.

Neue Funktion als GKI-Modul konfigurieren

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

  2. Fügen Sie die für die Funktion generierten KO-Dateien (.ko) dem Abschnitt _COMMON_GKI_MODULES_LIST der folgenden Datei hinzu. Fügen Sie die Dateien in sortierter Reihenfolge hinzu. Wenn Sie sich nicht sicher sind, welche Dateien generiert wurden, schlägt der Build fehl und listet alle erforderlichen KO-Dateien auf, die der Liste hinzugefügt werden müssen.

    • Fügen Sie in android17-6.18 und höher Elemente zu common/bazel/modules_private.bzl hinzu.
    • Fügen Sie in android16-6.12 und niedriger Elemente zu common/modules.bzl hinzu.
  3. Fügen Sie für Android 14 dieselben KO-Dateien aus Schritt 2, in aufsteigender Reihenfolge für die binäre Suche zur Laufzeit sortiert, zu common/android/gki_{ARCH}_protected_modules hinzu, um das Modul als geschütztes GKI-Modul zu kennzeichnen.

  4. Aktualisieren Sie für Android 14 und 15 die Liste der Exporte, damit sie die neu hinzugefügten Exporte in common/android/abi_gki_protected_exports_ARCHITECTURE enthält. Führen Sie beispielsweise tools/bazel run //common:kernel_aarch64_abi_update_protected_exports für aarch64 aus, um die Liste zu aktualisieren.

  5. Achten Sie darauf, dass die neu hinzugefügten KO-Dateien aus Schritt 2 in out/<androidX-Y.Z>/dist/system_dlkm.img und out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz des Kernels kopiert werden. Module im Archiv system_dlkm_staging_archive.tar.gz können als Eingabe verwendet werden, um system_dlkm.img im Plattformbuild zu generieren.

  6. Senden Sie Ihre Änderungen zur Überprüfung ein. GKI-Module sind eine Kernelfunktion, die nur für Android verfügbar ist. Daher müssen keine Patches für die Modulkonvertierung an Upstream gesendet werden. Sie müssen jedoch andere Richtlinien befolgen, um Patches für den Android Common Kernel (ACK) einzureichen.

Integrierte Kernelfunktion als GKI-Modul konfigurieren

  1. Bearbeiten Sie für eine vorhandene integrierte Kernelfunktion gki_defconfig und legen Sie das Konfigurationselement der erforderlichen Kernelfunktion von y auf m (=m) fest. 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) dem Abschnitt _COMMON_GKI_MODULES_LIST der folgenden Datei hinzu. Fügen Sie die Dateien in sortierter Reihenfolge hinzu. Wenn Sie sich nicht sicher sind, welche Dateien generiert wurden, schlägt der Build fehl und listet alle erforderlichen KO-Dateien auf, die der Liste hinzugefügt werden müssen.

    • Fügen Sie in android17-6.18 und höher Elemente zu common/bazel/modules_private.bzl hinzu.
    • Fügen Sie in android16-6.12 und niedriger Elemente zu `common/modules.bzl` hinzu.
  3. Fügen Sie für Android 14 dieselben KO-Dateien aus Schritt 2, in aufsteigender Reihenfolge für die binäre Suche zur Laufzeit sortiert, zu common/android/gki_{ARCH}_protected_modules hinzu, um das Modul als geschütztes GKI-Modul zu kennzeichnen.

  4. Aktualisieren Sie für Android 14 und 15 die Liste der geschützten Exporte, damit sie Exporte aus dem neu hinzugefügten Modul in enthält. common/android/abi_gki_protected_exports_{ARCH} Verwenden Sie dazu tools/bazel run //common:kernel_aarch64_abi_update_protected_exports für aarch64.

  5. Achten Sie darauf, dass die neu konvertierten KO-Dateien aus Schritt 2 in die out/<androidX-Y.Z>/dist/system_dlkm.img und out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz des Kernels kopiert werden. Module im Archiv system_dlkm_staging_archive.tar.gz können als Eingabe verwendet werden, um system_dlkm.img im Plattformbuild zu generieren.

  6. Senden Sie Ihre Änderungen zur Überprüfung ein. GKI-Module sind eine Kernelfunktion, die nur für Android verfügbar ist. Daher müssen keine Patches für die Modulkonvertierung an Upstream gesendet werden. Sie müssen jedoch die anderen Richtlinien befolgen, um Patches für den Android Common Kernel (ACK) einzureichen.

Geschütztes GKI-Modul in ein ungeschütztes Modul konvertieren

  1. Fügen Sie für Android 15 und höher das Modul, das von geschützt in ungeschützt konvertiert wird, der Liste _COMMON_UNPROTECTED_MODULES_LIST in der folgenden Datei hinzu:

    • Fügen Sie in android17-6.18 und höher Elemente zu common/bazel/modules_private.bzl hinzu.
    • Fügen Sie in android16-6.12 und niedriger Elemente zu common/modules.bzl hinzu.
  2. Entfernen Sie für Android 14 das Modul, das von geschützt in ungeschützt konvertiert wird, aus der Liste der geschützten Module unter common/android/gki_protected_modules.

  3. Aktualisieren Sie für Android 14 und 15 die Liste der geschützten Exporte, damit sie keine Exporte aus dem neu konvertierten ungeschützten Modul in der common/android/abi_gki_protected_exports_{ARCH} enthält. Verwenden Sie dazu tools/bazel run //common:kernel_aarch64_abi_update_protected_exports für aarch64.

  4. Senden Sie Ihre Änderungen zur Überprüfung ein. GKI-Module sind eine Kernelfunktion, die nur für Android verfügbar ist. Daher müssen keine Patches für die Modulkonvertierung an Upstream gesendet werden. Sie müssen jedoch die anderen Richtlinien befolgen, um Patches für den Android Common Kernel (ACK) einzureichen.

Kurzanleitung zur Behebung von Symbolverletzungen bei GKI-Modulen

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

1. Nicht signiertes Modul, das das geschützte Symbol verwendet

Fehler :

module: Protected symbol: some_kernel_function (err -13)

Ursache :

Die Datei module.ko ist ein nicht signiertes Anbietermodul, das versucht, das exportierte Symbol some_kernel_function des GKI-Moduls beim Laden aufzulösen, ohne in der Liste der Anbietersymbole aufgeführt zu sein.

Lösung :

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

2. Nicht signiertes Modul, das das geschützte Symbol exportiert

Fehler :

module: exports protected symbol some_kernel_function

Ursache :

Das Modul, das 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 möglich ist, schlägt das Laden mit dieser Meldung fehl.

Lösung :

Dieser Fehler kann behoben werden, indem Sie die GKI-Version des Moduls verwenden, das some_kernel_function exportiert, wenn das nicht signierte Modul eine benutzerdefinierte Version ist.