Auf dieser Seite wird beschrieben, wie Sie ein neues Kernelfeature als GKI-Modul oder ein vorhandenes integriertes Kernelfeature als GKI-Modul konfigurieren.
Neue Funktion als GKI-Modul konfigurieren
- Bearbeiten Sie für die neue Funktion - gki_defconfigund legen Sie das Konfigurationselement des erforderlichen Kernel-Features von- nauf- m(- =m) fest. Legen Sie diese Einstellung sowohl in- arch/arm64/configs/gki_defconfigals auch in- arch/x86/configs/gki_defconfigfest.
- Fügen Sie die für die Funktion generierten KO-Dateien ( - .ko) dem Abschnitt- COMMON_GKI_MODULES_LISTvon- common/modules.bzlhinzu. Fügen Sie die Dateien in sortierter Reihenfolge hinzu. Wenn Sie sich nicht sicher sind, welche Dateien generiert werden, schlägt der Build fehl und es werden alle erforderlichen KO-Dateien aufgeführt, die der Liste hinzugefügt werden müssen.
- Fügen Sie für Android 14 dieselben KO-Dateien aus Schritt 2, sortiert in aufsteigender Reihenfolge für die binäre Suche zur Laufzeit, 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, sodass sie die neu hinzugefügten Exporte in - common/android/abi_gki_protected_exports_ARCHITECTUREenthält. Wenn Sie beispielsweise die Liste für- aarch64aktualisieren möchten, führen Sie- tools/bazel run //common:kernel_aarch64_abi_update_protected_exportsaus.
- Achten Sie darauf, dass die neu hinzugefügten KO-Dateien aus Schritt 2 in die - out/<androidX-Y.Z>/dist/system_dlkm.imgund- out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzdes Kernels kopiert werden. Module im Archiv- system_dlkm_staging_archive.tar.gzkönnen als Eingabe verwendet werden, um- system_dlkm.imgim Plattform-Build zu generieren.
- Reichen Sie Ihre Änderungen zur Überprüfung ein. GKI-Module sind eine reine Android-Kernelfunktion. Daher müssen keine Patches für die Modulkonvertierung upstream eingereicht werden. Für das Einreichen von ACK-Patches (Android Common Kernel) müssen Sie jedoch andere Richtlinien beachten. 
In den Kernel integrierte Funktion als GKI-Modul konfigurieren
- Bearbeiten Sie für ein vorhandenes integriertes Kernelfeature - gki_defconfigund legen Sie das Konfigurationselement des erforderlichen Kernelfeatures von- yauf- m(- =m) fest. Legen Sie diese Einstellung sowohl in- arch/arm64/configs/gki_defconfigals auch in- arch/x86/configs/gki_defconfigfest.
- Fügen Sie die für die Funktion generierten KO-Dateien ( - .ko) in den Abschnitt- COMMON_GKI_MODULES_LISTvon- common/modules.bzlein. Fügen Sie die Dateien in sortierter Reihenfolge hinzu. Wenn Sie sich nicht sicher sind, welche Dateien generiert werden, schlägt der Build fehl und es werden alle erforderlichen KO-Dateien aufgeführt, die der Liste hinzugefügt werden müssen.
- Fügen Sie für Android 14 dieselben KO-Dateien aus Schritt 2, sortiert in aufsteigender Reihenfolge für die binäre Suche zur Laufzeit, 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, um die Exporte aus dem neu hinzugefügten Modul in - common/android/abi_gki_protected_exports_{ARCH}mit- tools/bazel run //common:kernel_aarch64_abi_update_protected_exportsfür- aarch64einzuschließen.
- Achten Sie darauf, dass die neu konvertierten KO-Dateien aus Schritt 2 in die Kernel-Verzeichnisse - out/<androidX-Y.Z>/dist/system_dlkm.imgund- out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzkopiert werden. Module im Archiv- system_dlkm_staging_archive.tar.gzkönnen als Eingabe verwendet werden, um- system_dlkm.imgim Plattform-Build zu generieren.
- Reichen Sie Ihre Änderungen zur Überprüfung ein. GKI-Module sind eine reine Android-Kernelfunktion. Daher müssen keine Patches für die Modulkonvertierung upstream eingereicht werden. Sie müssen jedoch die anderen Richtlinien befolgen, um ACK-Patches (Android Common Kernel) einzureichen. 
Geschütztes GKI-Modul in ungeschütztes Modul umwandeln
- Fügen Sie bei Android 15 und höher das Modul, das von „geschützt“ in „ungeschützt“ konvertiert wird, der Liste - COMMON_UNPROTECTED_MODULES_LISTin der Datei- common/modules.bzlhinzu.
- 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, um Exporte aus dem neu konvertierten ungeschützten Modul in - common/android/abi_gki_protected_exports_{ARCH}mit- tools/bazel run //common:kernel_aarch64_abi_update_protected_exportsfür- aarch64auszuschließen.
- Reichen Sie Ihre Änderungen zur Überprüfung ein. GKI-Module sind eine reine Android-Kernelfunktion. Daher müssen keine Patches für die Modulkonvertierung upstream eingereicht werden. Sie müssen jedoch die anderen Richtlinien befolgen, um ACK-Patches (Android Common Kernel) einzureichen. 
Kurzanleitung zur Behebung von Symbolverstößen bei GKI-Modulen
Wenn unsignierte 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 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 exportierte GKI-Modulsymbol some_kernel_function beim Laden aufzulösen, ohne in der Anbietersymbolliste 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 Anbieter-Symbolliste 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, das nur von einem signierten GKI-Modul exportiert werden kann, schlägt das Laden mit dieser Meldung fehl.
Lösung:
Dies kann korrigiert werden, indem die GKI-Version des Moduls verwendet wird, das some_kernel_function exportiert, wenn das nicht signierte Modul eine benutzerdefinierte Version ist.
