Auf dieser Seite erfahren Sie, wie Sie eine neue Kernelfunktion als GKI-Modul oder eine vorhandene integrierte Kernelfunktion als GKI-Modul konfigurieren.
Neue Funktion als GKI-Modul konfigurieren
Bearbeiten Sie für die neue Funktion
gki_defconfig
und legen Sie das Konfigurationselement der erforderlichen Kernelfunktion vonn
aufm
(=m
) fest. Legen Sie diese Einstellung sowohl inarch/arm64/configs/gki_defconfig
als auch inarch/x86/configs/gki_defconfig
fest.Fügen Sie die für die Funktion generierten KO-Dateien (
.ko
) dem BereichCOMMON_GKI_MODULES_LIST
voncommon/modules.bzl
hinzu. Fügen Sie die Dateien in sortierter Reihenfolge hinzu. Wenn Sie sich nicht sicher sind, ob alle generierten Dateien vorhanden sind, schlägt der Build fehl und alle erforderlichen KO-Dateien werden aufgelistet, 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_modules
hinzu, um das Modul als geschütztes GKI-Modul zu kennzeichnen.Aktualisieren Sie für Android 14 bis 16 die Liste der Exporte, sodass sie die neu hinzugefügten Exporte in
common/android/abi_gki_protected_exports_ARCHITECTURE
enthält. Wenn Sie beispielsweise die Liste aktualisieren möchten, führen Sietools/bazel run //common:kernel_aarch64_abi_update_protected_exports
füraarch64
aus.Achten Sie darauf, dass die neu hinzugefügten KO-Dateien aus Schritt 2 in die
out/<androidX-Y.Z>/dist/system_dlkm.img
undout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
des Kernels kopiert werden. Module imsystem_dlkm_staging_archive.tar.gz
-Archiv können als Eingabe verwendet werden, um diesystem_dlkm.img
im Plattformbuild zu generieren.Reichen Sie Ihre Änderungen zur Überprüfung ein. GKI-Module sind eine nur für Android verfügbare Kernelfunktion. Daher müssen keine Patches zur Modulkonvertierung gesendet werden. Für das Einreichen von Android Common Kernel (ACK)-Patches gelten jedoch andere Richtlinien.
Eine integrierte Kernelfunktion als GKI-Modul konfigurieren
Bearbeiten Sie für eine vorhandene integrierte Kernelfunktion
gki_defconfig
und ändern Sie das Konfigurationselement der erforderlichen Kernelfunktion vony
inm
(=m
). Legen Sie diese Einstellung sowohl inarch/arm64/configs/gki_defconfig
als auch inarch/x86/configs/gki_defconfig
fest.Fügen Sie die für die Funktion generierten KO-Dateien (
.ko
) dem AbschnittCOMMON_GKI_MODULES_LIST
voncommon/modules.bzl
hinzu. Fügen Sie die Dateien in sortierter Reihenfolge hinzu. Wenn Sie sich nicht sicher sind, ob alle generierten Dateien vorhanden sind, schlägt der Build fehl und alle erforderlichen KO-Dateien werden aufgelistet, 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_modules
hinzu, um das Modul als geschütztes GKI-Modul zu kennzeichnen.Aktualisieren Sie für Android 14 bis 16 die Liste der geschützten Exporte, um auch Exporte aus dem neu hinzugefügten Modul in
common/android/abi_gki_protected_exports_{ARCH}
(odercommon/gki/{ARCH}/protected_exports
für Android 16) anzugeben. Verwenden Sie dazutools/bazel run //common:kernel_aarch64_abi_update_protected_exports
anstelle vonaarch64
.Achten Sie darauf, dass die neu konvertierten KO-Dateien des Moduls aus Schritt 2 in die
out/<androidX-Y.Z>/dist/system_dlkm.img
undout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
des Kernels kopiert werden. Module imsystem_dlkm_staging_archive.tar.gz
-Archiv können als Eingabe verwendet werden, um diesystem_dlkm.img
im Plattformbuild zu generieren.Reichen Sie Ihre Änderungen zur Überprüfung ein. GKI-Module sind eine nur für Android verfügbare Kernelfunktion. Daher müssen keine Patches zur Modulkonvertierung gesendet werden. Sie müssen jedoch die anderen Richtlinien einhalten, um Android Common Kernel (ACK)-Patches einzureichen.
Geschütztes GKI-Modul in nicht geschütztes Modul umwandeln
Fügen Sie unter Android 15 und höher das Modul, das von geschützt zu ungeschützt konvertiert wird, der Liste
COMMON_UNPROTECTED_MODULES_LIST
in der Dateicommon/modules.bzl
hinzu.Entfernen Sie unter Android 14 das Modul, das von geschützt zu nicht geschützt konvertiert wird, aus der Liste der geschützten Module unter
common/android/gki_protected_modules
.Aktualisieren Sie für Android 14 bis 16 die Liste der geschützten Exporte, um die Exporte aus dem neu konvertierten ungeschützten Modul in der
common/android/abi_gki_protected_exports_{ARCH}
(odercommon/gki/{ARCH}/protected_exports
für Android 16) auszuschließen. Verwenden Sie dazutools/bazel run //common:kernel_aarch64_abi_update_protected_exports
füraarch64
.Reichen Sie Ihre Änderungen zur Überprüfung ein. GKI-Module sind eine nur für Android verfügbare Kernelfunktion. Daher müssen keine Patches zur Modulkonvertierung gesendet werden. Sie müssen jedoch die anderen Richtlinien einhalten, um Android Common Kernel (ACK)-Patches einzureichen.
Kurzanleitung zur Behebung von Symbolverstößen bei GKI-Modulen
Wenn unsignierte Module gegen den für GKI-Module geltenden Symbolschutz verstoßen, können beim Laden des Moduls zwei Arten von Fehlern auftreten, die zu einem Fehler führen.
1. Unsigniertes 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 aus dem GKI-Modul exportierte Symbol 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 Symbolliste des Anbieters 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 some_kernel_function
exportiert, ist ein geschütztes GKI-Modul und module.ko
ist wahrscheinlich eine signaturlose 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:
Wenn das signaturlose Modul eine benutzerdefinierte Version ist, kann das Problem durch Verwendung der GKI-Version des Moduls behoben werden, das some_kernel_function
exportiert.