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
Bearbeiten Sie für die neue Funktion
gki_defconfigund legen Sie das Konfigurationselement der erforderlichen Kernel Funktion vonnaufm(=m) fest. Legen Sie diese Einstellung sowohl inarch/arm64/configs/gki_defconfigals auch inarch/x86/configs/gki_defconfigfest.Fügen Sie die für die Funktion generierten KO-Dateien (
.ko) dem Abschnitt_COMMON_GKI_MODULES_LISTder 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.18und höher Elemente zucommon/bazel/modules_private.bzlhinzu. - Fügen Sie in
android16-6.12und niedriger Elemente zucommon/modules.bzlhinzu.
- Fügen Sie in
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_moduleshinzu, um das Modul als geschütztes GKI-Modul zu kennzeichnen.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_ARCHITECTUREenthält. Führen Sie beispielsweisetools/bazel run //common:kernel_aarch64_abi_update_protected_exportsfüraarch64aus, um die Liste zu aktualisieren.Achten Sie darauf, dass die neu hinzugefügten KO-Dateien aus Schritt 2 in
out/<androidX-Y.Z>/dist/system_dlkm.imgundout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzdes Kernels kopiert werden. Module im Archivsystem_dlkm_staging_archive.tar.gzkönnen als Eingabe verwendet werden, umsystem_dlkm.imgim Plattformbuild zu generieren.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
Bearbeiten Sie für eine vorhandene integrierte Kernelfunktion
gki_defconfigund legen Sie das Konfigurationselement der erforderlichen Kernelfunktion vonyaufm(=m) fest. Legen Sie diese Einstellung sowohl inarch/arm64/configs/gki_defconfigals aucharch/x86/configs/gki_defconfigfest.Fügen Sie die für die Funktion generierten KO-Dateien (
.ko) dem Abschnitt_COMMON_GKI_MODULES_LISTder 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.18und höher Elemente zucommon/bazel/modules_private.bzlhinzu. - Fügen Sie in
android16-6.12und niedriger Elemente zu `common/modules.bzl` hinzu.
- Fügen Sie in
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_moduleshinzu, um das Modul als geschütztes GKI-Modul zu kennzeichnen.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 dazutools/bazel run //common:kernel_aarch64_abi_update_protected_exportsfüraarch64.Achten Sie darauf, dass die neu konvertierten KO-Dateien aus Schritt 2 in die
out/<androidX-Y.Z>/dist/system_dlkm.imgundout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzdes Kernels kopiert werden. Module im Archivsystem_dlkm_staging_archive.tar.gzkönnen als Eingabe verwendet werden, umsystem_dlkm.imgim Plattformbuild zu generieren.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
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_LISTin der folgenden Datei hinzu:- Fügen Sie in
android17-6.18und höher Elemente zucommon/bazel/modules_private.bzlhinzu. - Fügen Sie in
android16-6.12und niedriger Elemente zucommon/modules.bzlhinzu.
- Fügen Sie in
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.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 dazutools/bazel run //common:kernel_aarch64_abi_update_protected_exportsfüraarch64.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.