Na tej stronie opisujemy, jak skonfigurować nową funkcję jądra jako moduł GKI lub skonfigurować istniejącą wbudowaną funkcję jądra jako moduł GKI.
Konfigurowanie nowej funkcji jako modułu GKI
W przypadku nowej funkcji edytuj
gki_defconfigi ustaw wymagany element konfiguracji funkcji jądra znnam(=m). Ustaw to ustawienie w plikacharch/arm64/configs/gki_defconfigiarch/x86/configs/gki_defconfig.Dodaj pliki KO (
.ko) wygenerowane dla funkcji do sekcji_COMMON_GKI_MODULES_LISTw tym pliku. Dodaj pliki w kolejności posortowanej. Jeśli nie masz pewności, które pliki zostały wygenerowane, kompilacja się nie powiedzie i wyświetli listę wszystkich plików KO, które należy dodać do listy.- W przypadku
android17-6.18i nowszych wersji dodaj elementy docommon/bazel/modules_private.bzl. - W przypadku
android16-6.12i starszych wersji dodaj elementy docommon/modules.bzl.
- W przypadku
W przypadku Androida 14 dodaj ten sam zestaw plików KO z kroku 2, posortowanych w kolejności rosnącej na potrzeby wyszukiwania binarnego w czasie działania, do
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ędnić nowo dodane eksporty w
common/android/abi_gki_protected_exports_ARCHITECTURE. Aby na przykład zaktualizować listę, uruchomtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsw przypadkuaarch64.Upewnij się, że nowo dodane pliki KO z kroku 2 zostały skopiowane do plików
out/<androidX-Y.Z>/dist/system_dlkm.imgiout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzjądra. Moduły w archiwumsystem_dlkm_staging_archive.tar.gzmogą być używane jako dane wejściowe do wygenerowania plikusystem_dlkm.imgw kompilacji platformy.Prześlij zmiany do sprawdzenia. Moduły GKI to funkcja jądra dostępna tylko w Androidzie, więc nie trzeba przesyłać poprawek konwersji modułów do upstream. Musisz jednak przestrzegać innych wytycznych dotyczących przesyłania poprawek do wspólnego jądra Androida (ACK).
Konfigurowanie wbudowanej funkcji jądra jako modułu GKI
W przypadku istniejącej wbudowanej funkcji jądra edytuj
gki_defconfigi ustaw wymagany element konfiguracji funkcji jądra zynam(=m). Ustaw to ustawienie w plikacharch/arm64/configs/gki_defconfigiarch/x86/configs/gki_defconfig.Dodaj pliki KO (
.ko) wygenerowane dla funkcji do sekcji_COMMON_GKI_MODULES_LISTw tym pliku. Dodaj pliki w kolejności posortowanej. Jeśli nie masz pewności, które pliki zostały wygenerowane, kompilacja się nie powiedzie i wyświetli listę wszystkich plików KO, które należy dodać do listy.- W przypadku
android17-6.18i nowszych wersji dodaj elementy docommon/bazel/modules_private.bzl. - W przypadku
android16-6.12i starszych wersji dodaj elementy do `common/modules.bzl.
- W przypadku
W przypadku Androida 14 dodaj ten sam zestaw plików KO z kroku 2, posortowanych w kolejności rosnącej na potrzeby wyszukiwania binarnego w czasie działania, do
common/android/gki_{ARCH}_protected_modules, aby oznaczyć moduł jako chroniony moduł GKI.W przypadku Androida 14 i 15 zaktualizuj listę chronionych eksportów, aby uwzględnić eksporty z nowo dodanego modułu w
common/android/abi_gki_protected_exports_{ARCH}za pomocątools/bazel run //common:kernel_aarch64_abi_update_protected_exportsw przypadkuaarch64.Upewnij się, że nowo przekonwertowane pliki KO modułu z kroku 2 zostały skopiowane do jądra
out/<androidX-Y.Z>/dist/system_dlkm.imgiout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz. Moduły w archiwumsystem_dlkm_staging_archive.tar.gzmogą być używane jako dane wejściowe do wygenerowania plikusystem_dlkm.imgw kompilacji platformy.Prześlij zmiany do sprawdzenia. Moduły GKI to funkcja jądra dostępna tylko w Androidzie, więc nie trzeba przesyłać poprawek konwersji modułów do upstream. Musisz jednak przestrzegać innych wytycznych dotyczących przesyłania poprawek do wspólnego jądra Androida (ACK).
Konwertowanie chronionego modułu GKI na niechroniony
W przypadku Androida 15 i nowszych wersji dodaj moduł konwertowany z chronionego na niechroniony do listy
_COMMON_UNPROTECTED_MODULES_LISTw tym pliku:- W przypadku
android17-6.18i nowszych wersji dodaj elementy docommon/bazel/modules_private.bzl. - W przypadku
android16-6.12i starszych wersji dodaj elementy docommon/modules.bzl.
- W przypadku
W przypadku Androida 14 usuń moduł konwertowany z chronionego na niechroniony z listy chronionych modułów w
common/android/gki_protected_modules.W przypadku Androida 14 i 15 zaktualizuj listę chronionych eksportów, aby wykluczyć eksporty z nowo przekonwertowanego niechronionego modułu w
common/android/abi_gki_protected_exports_{ARCH}za pomocątools/bazel run //common:kernel_aarch64_abi_update_protected_exportsw przypadkuaarch64.Prześlij zmiany do sprawdzenia. Moduły GKI to funkcja jądra dostępna tylko w Androidzie, więc nie trzeba przesyłać poprawek konwersji modułów do upstream. Musisz jednak przestrzegać innych wytycznych dotyczących przesyłania poprawek do wspólnego jądra Androida (ACK).
Krótki przewodnik po rozwiązywaniu problemów z naruszeniem symboli modułów GKI
Gdy niepodpisane moduły naruszają ochronę symboli w modułach GKI, podczas wczytywania modułu mogą wystąpić 2 rodzaje błędów, które powodują niepowodzenie.
1. Niepodpisany moduł używający chronionego symbolu
Błąd:
module: Protected symbol: some_kernel_function (err -13)
Przyczyna:
Plik module.ko jest niepodpisanym modułem dostawcy i podczas wczytywania próbuje rozpoznać symbol eksportowany przez moduł GKI some_kernel_function, ale nie znajduje się na liście symboli dostawcy.
Rozwiązanie:
Jeśli module.ko nie jest chronionym modułem GKI, zaktualizowanie listy symboli rozwiąże błąd, ponieważ symbol some_kernel_function zostanie uwzględniony na liście symboli dostawcy.
Możesz też użyć wersji GKI pliku module.ko.
2. Niepodpisany moduł eksportujący chroniony symbol
Błąd:
module: exports protected symbol some_kernel_function
Przyczyna:
Moduł eksportujący some_kernel_function jest chronionym modułem GKI, a module.ko jest prawdopodobnie niepodpisaną wersją niestandardową tego modułu. Gdy module.ko próbuje wyeksportować some_kernel_function, który może być eksportowany tylko przez podpisany moduł GKI, wczytywanie kończy się niepowodzeniem i wyświetla ten komunikat.
Rozwiązanie:
Jeśli niepodpisany moduł jest wersją niestandardową, można to naprawić, używając wersji GKI modułu, który eksportuje some_kernel_function.