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 zn
nam
(=m
). Ustaw to ustawienie w obu plikacharch/arm64/configs/gki_defconfig
iarch/x86/configs/gki_defconfig
.Dodaj wygenerowane w przypadku funkcji pliki KO (
.ko
) do sekcjiCOMMON_GKI_MODULES_LIST
w plikucommon/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 polecenietools/bazel run //common:kernel_aarch64_abi_update_protected_exports
zamiastaarch64
.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
iout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
jądra. Moduły z archiwumsystem_dlkm_staging_archive.tar.gz
mogą służyć jako dane wejściowe do generowaniasystem_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 zy
nam
(=m
). Ustaw to ustawienie w obiektacharch/arm64/configs/gki_defconfig
iarch/x86/configs/gki_defconfig
.Dodaj wygenerowane dla funkcji pliki KO (
.ko
) do sekcjiCOMMON_GKI_MODULES_LIST
w plikucommon/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ąctools/bazel run //common:kernel_aarch64_abi_update_protected_exports
zamiastaarch64
.Upewnij się, że nowo przekonwertowane pliki KO modułu z etapu 2 zostały skopiowane do
out/<androidX-Y.Z>/dist/system_dlkm.img
iout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
jądra. Moduły z archiwumsystem_dlkm_staging_archive.tar.gz
mogą służyć jako dane wejściowe do generowaniasystem_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 plikucommon/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ąctools/bazel run //common:kernel_aarch64_abi_update_protected_exports
zamiastaarch64
.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
Błąd:
module: Protected symbol: some_kernel_function (err -13)
Przyczyna:
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ą.