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–16 zaktualizuj listę eksportów, aby zawierał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 konfiguracji
gki_defconfig
i ustaw wartość elementu konfiguracji wymaganej funkcji jądra zy
nam
(=m
). Ustaw to ustawienie w elementacharch/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 przypadku Androida 14–16 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}
(lubcommon/gki/{ARCH}/protected_exports
w Androidzie 16), 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 Androida, 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–16 zaktualizuj listę eksportów, które są chronione, aby wykluczyć te z niedawno przekonwertowanego niezabezpieczonego modułu w
common/android/abi_gki_protected_exports_{ARCH}
(lubcommon/gki/{ARCH}/protected_exports
w przypadku Androida 16) z użyciemtools/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 naruszeń 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. Niepodpisany moduł korzystający 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 pojawia się ten komunikat.
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ą.