Od 27 marca 2025 r. zalecamy używanie android-latest-release zamiast aosp-main do kompilowania i wspołtworzenia AOSP. Więcej informacji znajdziesz w artykule o zmianach w AOSP.
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Na tej stronie znajdziesz informacje o konfigurowaniu nowej funkcji jądra jako modułu GKI lub konfigurowaniu dotychczasowej wbudowanej funkcji jądra jako modułu GKI.
Konfigurowanie nowej funkcji jako modułu GKI
W przypadku nowej funkcji edytuj gki_defconfig i ustaw wymagany element konfiguracji funkcji jądra z n na m (=m). Ustaw to ustawienie w obu plikach arch/arm64/configs/gki_defconfig i arch/x86/configs/gki_defconfig.
Dodaj wygenerowane w przypadku funkcji pliki KO (.ko) do sekcji COMMON_GKI_MODULES_LIST w pliku common/modules.bzl. Dodaj pliki w posortowanej kolejności. Jeśli nie masz pewności, czy wszystkie wygenerowane pliki są prawidłowe, kompilacja zakończy się niepowodzeniem i wyświetli listę wszystkich niezbędnych plików KO.
W przypadku Androida 14 dodaj ten sam zestaw plików KO z kroku 2, posortowany w rosnącej kolejności, aby umożliwić wyszukiwanie binarne w czasie wykonywania. Użyj do tego pliku common/android/gki_{ARCH}_protected_modules, aby oznaczyć moduł jako chroniony moduł GKI.
W przypadku Androida 14 i 15 zaktualizuj listę eksportów, aby uwzględniała nowo dodane eksporty w pliku common/android/abi_gki_protected_exports_ARCHITECTURE. Aby na przykład zaktualizować listę, uruchom polecenie tools/bazel run //common:kernel_aarch64_abi_update_protected_exports zamiast aarch64.
Upewnij się, że nowo dodane pliki KO z etapu 2 zostały skopiowane do właściwości out/<androidX-Y.Z>/dist/system_dlkm.img i out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz jądra.
Moduły z archiwum system_dlkm_staging_archive.tar.gz mogą służyć jako dane wejściowe do generowania system_dlkm.img w kompilacji platformy.
Prześlij zmiany do sprawdzenia. Moduł GKI to funkcja jądra dostępna tylko na Androidzie, więc nie trzeba przesyłać poprawek do konwersji modułów. Aby jednak przesłać poprawki Android Common Kernel (ACK), musisz przestrzegać innych wytycznych.
Konfigurowanie funkcji wbudowanej w jądro jako modułu GKI
W przypadku istniejącej wbudowanej funkcji jądra zmodyfikuj element gki_defconfig i ustaw element konfiguracji wymaganej funkcji jądra z y na m (=m). Ustaw to ustawienie w obiektach arch/arm64/configs/gki_defconfig i arch/x86/configs/gki_defconfig.
Dodaj wygenerowane dla funkcji pliki KO (.ko) do sekcji COMMON_GKI_MODULES_LIST w pliku common/modules.bzl. Dodaj pliki w uporządkowanej kolejności. Jeśli nie masz pewności, czy wszystkie wygenerowane pliki są prawidłowe, kompilacja zakończy się niepowodzeniem i wyświetli listę wszystkich niezbędnych plików KO.
W przypadku Androida 14 dodaj ten sam zestaw plików KO z kroku 2, posortowany w rosnącej kolejności, aby umożliwić wyszukiwanie binarne w czasie wykonywania. Użyj do tego pliku common/android/gki_{ARCH}_protected_modules, aby oznaczyć moduł jako chroniony moduł GKI.
W Androidzie 14 i 15 zaktualizuj listę eksportów, które są chronione, aby uwzględnić te z nowo dodanego modułu w common/android/abi_gki_protected_exports_{ARCH}, używając tools/bazel run
//common:kernel_aarch64_abi_update_protected_exports zamiast aarch64.
Upewnij się, że nowo przekonwertowane pliki KO modułu z etapu 2 zostały skopiowane do out/<androidX-Y.Z>/dist/system_dlkm.img i out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz jądra.
Moduły z archiwum system_dlkm_staging_archive.tar.gz mogą służyć jako dane wejściowe do generowania system_dlkm.img w kompilacji platformy.
Prześlij zmiany do sprawdzenia. Moduł GKI to funkcja jądra dostępna tylko na Androidzie, więc nie trzeba przesyłać poprawek do konwersji modułów. Aby jednak przesłać poprawki Android Common Kernel (ACK), musisz przestrzegać innych wskazówek.
Przekształcanie chronionego modułu GKI w niechroniony
W przypadku Androida 15 i wyższych dodaj moduł, który jest przekształcany z chronionego na niezabezpieczony, do listy COMMON_UNPROTECTED_MODULES_LIST w pliku common/modules.bzl.
W przypadku Androida 14 usuń moduł, który ma być przekształcony z modułu chronionego w niechroniony, z listy chronionych modułów na stronie common/android/gki_protected_modules.
W przypadku Androida 14 i 15 zaktualizuj listę eksportów, które są chronione, aby wykluczyć te z nowo przekonwertowanego niezabezpieczonego modułu w common/android/abi_gki_protected_exports_{ARCH}, używając tools/bazel run
//common:kernel_aarch64_abi_update_protected_exports zamiast aarch64.
Prześlij zmiany do sprawdzenia. Moduł GKI to funkcja jądra dostępna tylko na Androidzie, więc nie trzeba przesyłać poprawek do konwersji modułów. Aby jednak przesłać poprawki Android Common Kernel (ACK), musisz przestrzegać innych wskazówek.
Krótki przewodnik po rozwiązywaniu problemów z naruszeniem zasad dotyczących symboli w modułach GKI
Jeśli niepodpisane moduły naruszają ochronę symboli w modułach GKI, podczas ich wczytywania mogą wystąpić 2 rodzaje błędów, które mogą spowodować niepowodzenie.
1. Niepodpisane moduły korzystające z ochronionego symbolu
Plik module.ko to niezatwierdzony moduł dostawcy, który podczas wczytywania próbuje rozwiązać symbol wyeksportowany z modułu GKI some_kernel_function, mimo że nie jest wymieniony na liście symboli dostawcy.
Rozwiązanie:
Jeśli module.ko nie jest chronionym modułem GKI, zaktualizowanie listy symboli rozwiąże błąd poprzez uwzględnienie some_kernel_function na liście symboli dostawcy.
Możesz też użyć wersji module.ko dla GKI.
2. Moduł bez podpisu eksportujący chroniony symbol
Błąd:
module: exports protected symbol some_kernel_function
Przyczyna:
Moduł eksportujący some_kernel_function to chroniony moduł GKI, a module.ko to prawdopodobnie niestandardowa wersja tego modułu bez podpisu. Gdy module.ko próbuje wyeksportować some_kernel_function, który może być eksportowany tylko przez podpisany moduł GKI, ładowanie kończy się niepowodzeniem i wyświetleniem tego komunikatu.
Rozwiązanie:
Można to naprawić, używając wersji modułu GKI, który eksportuje some_kernel_function, jeśli nie podpisany moduł jest wersją niestandardową.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-07-27 UTC."],[],[],null,["# Configure kernel features as GKI modules\n\nThis page covers how to configure a new kernel feature as a GKI module or\nconfigure an existing built-in kernel feature as a GKI module.\n| **Note:** Changes that result in a new GKI module or that change the protection status of a GKI module must be approved by Google.\n\nConfigure a new feature as a GKI module\n---------------------------------------\n\n1. For the new feature, edit `gki_defconfig` and set the required kernel\n feature's config item from `n` to `m` (`=m`). Set this setting in both\n `arch/arm64/configs/gki_defconfig` and `arch/x86/configs/gki_defconfig`.\n\n2. Add the KO (`.ko`) files generated for the feature\n to the `COMMON_GKI_MODULES_LIST` section of `common/modules.bzl`. Add the\n files in a sorted order. If you're unsure of all the files generated,\n the build fails and lists all the necessary KO files to be added to the list.\n\n3. For Android 14, add the same set of KO files from step 2, sorted in ascending\n order for binary search at runtime, to\n `common/android/gki_{ARCH}_protected_modules` to designate the module as a\n protected GKI module.\n\n4. For Android 14 and 15, update the list of exports so that it includes the\n newly-added exports in `common/android/abi_gki_protected_exports_`\u003cvar translate=\"no\"\u003eARCHITECTURE\u003c/var\u003e. For example, to update the list, run\n `tools/bazel run //common:kernel_aarch64_abi_update_protected_exports` for\n `aarch64`.\n\n5. Make sure newly added KO files from step 2 are copied to the kernel's\n `out/\u003candroidX-Y.Z\u003e/dist/system_dlkm.img` and\n `out/`\u003cvar translate=\"no\"\u003eandroidX-Y.Z\u003c/var\u003e`/dist/system_dlkm_staging_archive.tar.gz`.\n Modules in the `system_dlkm_staging_archive.tar.gz` archive can be used as\n input to generate the `system_dlkm.img` in the platform build.\n\n6. Submit your changes for review. GKI modules are an Android-only kernel\n feature, so module conversion patches aren't required to be submitted\n upstream. However, you must follow other guidelines to submit\n [Android Common Kernel (ACK) patches](/docs/core/architecture/kernel/kernel-code#ack-patches).\n\nConfigure a kernel built-in feature as a GKI module\n---------------------------------------------------\n\n1. For an existing built-in kernel feature, edit `gki_defconfig` and set the\n required kernel feature's config item from `y` to `m` (`=m`). Set this\n setting in both `arch/arm64/configs/gki_defconfig` and\n `arch/x86/configs/gki_defconfig`.\n\n2. Add the KO (`.ko`) files generated for the feature to the\n `COMMON_GKI_MODULES_LIST` section of `common/modules.bzl`. Add the files\n in a sorted order. If you're unsure of all the files generated,\n the build fails and lists all the necessary KO files to be added to the list.\n\n3. For Android 14, add the same set of KO files from step 2, sorted in ascending\n order for binary search at runtime, to\n `common/android/gki_{ARCH}_protected_modules` to designate the module as a\n protected GKI module.\n\n4. For Android 14 and 15, update the list of exports that are protected to\n include ones from the newly added module in\n `common/android/abi_gki_protected_exports_{ARCH}` using `tools/bazel run\n //common:kernel_aarch64_abi_update_protected_exports` for `aarch64`.\n\n5. Make sure newly converted module KO files from step 2 are copied to the\n kernel's `out/\u003candroidX-Y.Z\u003e/dist/system_dlkm.img` and\n `out/`\u003cvar translate=\"no\"\u003eandroidX-Y.Z\u003c/var\u003e`/dist/system_dlkm_staging_archive.tar.gz`.\n Modules in the `system_dlkm_staging_archive.tar.gz` archive can be used as\n input to generate the `system_dlkm.img` in the platform build.\n\n6. Submit your changes for review. GKI modules are an Android-only kernel\n feature, so module conversion patches aren't required to be submitted\n upstream. However, you must follow the other guidelines to submit\n [Android Common Kernel (ACK)\n patches](/docs/core/architecture/kernel/kernel-code#ack-patches).\n\nConvert a protected GKI module to unprotected\n---------------------------------------------\n\n1. For Android 15 and higher, add the module being converted from protected to\n unprotected to the `COMMON_UNPROTECTED_MODULES_LIST` list in\n `common/modules.bzl` file.\n\n2. For Android 14, remove the module being converted from protected to\n unprotected from the list of protected modules at\n `common/android/gki_protected_modules`.\n\n3. For Android 14 and 15, update the list of exports that are protected to\n exclude ones from the newly converted unprotected module in the\n `common/android/abi_gki_protected_exports_{ARCH}` using `tools/bazel run\n //common:kernel_aarch64_abi_update_protected_exports` for `aarch64`.\n\n4. Submit your changes for review. GKI modules are an Android-only kernel\n feature, so module conversion patches aren't required to be submitted\n upstream. However, you must follow the other guidelines to submit\n [Android Common Kernel (ACK)\n patches](/docs/core/architecture/kernel/kernel-code#ack-patches).\n\nGKI modules symbol violation resolution quick guide\n---------------------------------------------------\n\nWhen unsigned modules violate the symbol protection in place for GKI modules,\ntwo types of errors may be encountered during module loading, resulting in\nfailure.\n\n### 1. Unsigned module using the protected symbol\n\n**Error:**\n\n`module: Protected symbol: some_kernel_function (err -13)`\n\n**Cause:**\n\nThe `module.ko` file is an unsigned vendor module and attempts to resolve the\nGKI module exported symbol `some_kernel_function` during loading, without\nbeing listed in the vendor symbol list.\n\n**Resolution:**\n\nIf `module.ko` is not a protected GKI module, updating the symbol list will\nresolve the error by including `some_kernel_function` in the vendor symbol list.\nAlternatively, use the GKI version of `module.ko`.\n\n### 2. Unsigned module exporting the protected symbol\n\n**Error:**\n\n`module: exports protected symbol some_kernel_function`\n\n**Cause:**\n\nThe module exporting the `some_kernel_function` is a protected GKI module, and\n`module.ko` is likely an unsigned custom version of that module. When\n`module.ko` tries to export `some_kernel_function`, which can only be exported\nby a signed GKI module, loading fails with this message.\n\n**Resolution:**\n\nThis can be corrected by using the GKI version of the module that exports\n`some_kernel_function`, if the unsigned module is a custom version."]]