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 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.Optional: Bei Android 15 und höher können Sie diesen Schritt überspringen.
Fügen Sie 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 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. Module, die als geschützte GKI-Module gekennzeichnet sind, müssen von Google als offizielle geschützte Module genehmigt werden.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 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 die Liste der geschützten Exporte, um die Exporte aus dem neu hinzugefügten Modul in diecommon/android/abi_gki_protected_exports_{ARCH}
aufzunehmen. Verwenden Sie dazutools/bazel run //common:kernel_aarch64_abi_update_protected_exports
anstelle vonaarch64
. Module, die als geschützte GKI-Module gekennzeichnet sind, müssen von Google als offizielle geschützte Module genehmigt werden.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 ein ungeschütztes Modul umwandeln
- Android 14 und niedriger: Entfernen Sie das Modul, das von geschützt zu ungeschützt konvertiert werden soll, aus der Liste der geschützten Module unter
common/android/gki_protected_modules
.
- Android 15 und höher: Fügen Sie das Modul, das von geschützt zu ungeschützt konvertiert wird, der Liste
COMMON_UNPROTECTED_MODULES_LIST
in der Dateicommon/modules.bzl
hinzu.
- Android 14 und niedriger: Entfernen Sie das Modul, das von geschützt zu ungeschützt konvertiert werden soll, aus der Liste der geschützten Module unter
Aktualisieren Sie die Liste der geschützten Exporte, um die Exporte aus dem neu konvertierten ungeschützten Modul in
common/android/abi_gki_protected_exports_{ARCH}
auszuschließen. Verwenden Sie dazutools/bazel run //common:kernel_aarch64_abi_update_protected_exports
anstelle vonaarch64
.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.