Na tej stronie dowiesz się, 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 zmień
gki_defconfigi ustaw wymagany element konfiguracji funkcji jądra znnam(=m). Ustaw to warch/arm64/configs/gki_defconfigiarch/x86/configs/gki_defconfig.Dodaj pliki KO (
.ko) wygenerowane dla funkcji do sekcjiCOMMON_GKI_MODULES_LISTwcommon/modules.bzl. Dodaj pliki w posortowanej kolejności. Jeśli nie masz pewności, jakie pliki zostały wygenerowane, kompilacja zakończy się niepowodzeniem i wyświetli listę wszystkich niezbędnych plików KO, które należy dodać do listy.W przypadku Androida 14 dodaj ten sam zestaw plików KO z kroku 2, posortowanych rosnąco pod kątem 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 zawierała nowo dodane eksporty w
common/android/abi_gki_protected_exports_ARCHITECTURE. Aby na przykład zaktualizować listę, uruchom polecenietools/bazel run //common:kernel_aarch64_abi_update_protected_exportsforaarch64.Upewnij się, że nowo dodane pliki KO z kroku 2 zostały skopiowane do katalogów
out/<androidX-Y.Z>/dist/system_dlkm.imgiout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzjądra. Moduły wsystem_dlkm_staging_archive.tar.gzarchiwum mogą być używane jako dane wejściowe do generowaniasystem_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ć do upstreamu poprawek konwersji modułów. Aby przesłać łatki do wspólnego jądra Androida (ACK), musisz jednak przestrzegać innych wytycznych.
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 warch/arm64/configs/gki_defconfigiarch/x86/configs/gki_defconfig.Dodaj pliki KO (
.ko) wygenerowane dla funkcji do sekcjiCOMMON_GKI_MODULES_LISTwcommon/modules.bzl. Dodaj pliki w posortowanej kolejności. Jeśli nie masz pewności, jakie pliki zostały wygenerowane, kompilacja zakończy się niepowodzeniem i wyświetli listę wszystkich niezbędnych plików KO, które należy dodać do listy.W przypadku Androida 14 dodaj ten sam zestaw plików KO z kroku 2, posortowanych rosnąco pod kątem 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_exportsdlaaarch64.Upewnij się, że nowo przekonwertowane pliki KO modułu z kroku 2 zostały skopiowane do folderów
out/<androidX-Y.Z>/dist/system_dlkm.imgiout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzw jądrze. Moduły wsystem_dlkm_staging_archive.tar.gzarchiwum mogą być używane jako dane wejściowe do generowaniasystem_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ć do upstreamu poprawek konwersji modułów. Musisz jednak przestrzegać pozostałych wytycznych, aby przesyłać łatki do wspólnego jądra Androida (ACK).
Konwertowanie chronionego modułu GKI na niechroniony
W przypadku Androida 15 i nowszych dodaj moduł, który ma zostać przekonwertowany z chronionego na niechroniony, do listy
COMMON_UNPROTECTED_MODULES_LISTw plikucommon/modules.bzl.W przypadku Androida 14 usuń z listy chronionych modułów w
common/android/gki_protected_modulesmoduł, który jest przekształcany z chronionego na niechroniony.W przypadku Androida 14 i 15 zaktualizuj listę eksportów, które są chronione, tak aby wykluczyć z niej 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_exportsdlaaarch64.Prześlij zmiany do sprawdzenia. Moduły GKI to funkcja jądra dostępna tylko w Androidzie, więc nie trzeba przesyłać do upstreamu poprawek konwersji modułów. Musisz jednak przestrzegać pozostałych wytycznych, aby przesyłać łatki 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 obowiązującą w przypadku modułów GKI, podczas wczytywania modułów 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 to niepodpisany moduł dostawcy, który podczas wczytywania próbuje rozwiązać wyeksportowany symbol modułu GKI some_kernel_function, nie będąc wymienionym na liście symboli dostawcy.
Rozwiązanie:
Jeśli module.ko nie jest chronionym modułem GKI, zaktualizowanie listy symboli rozwiąże problem, ponieważ some_kernel_function zostanie dodany do listy symboli dostawcy.
Możesz też użyć wersji GKI polecenia 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żna wyeksportować tylko za pomocą podpisanego modułu GKI, ładowanie kończy się niepowodzeniem i wyświetla się ten komunikat.
Rozwiązanie:
Można to naprawić, używając wersji modułu GKI, która eksportuje
some_kernel_function, jeśli niepodpisany moduł jest wersją niestandardową.