Na tej stronie znajdziesz informacje o tym, jak skonfigurować nową funkcję jądra jako moduł GKI lub skonfigurować dotychczasową wbudowaną funkcję jądra jako moduł 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 zarówno warch/arm64/configs/gki_defconfig
, jak iarch/x86/configs/gki_defconfig
.Dodaj wygenerowane dla funkcji pliki KO (
.ko
) do sekcjiCOMMON_GKI_MODULES_LIST
w plikucommon/modules.bzl
. Dodaj pliki w takiej 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, które należy dodać do listy.Dodaj ten sam zestaw plików KO z etapu 2, posortowany w kolejności rosnącej na potrzeby wyszukiwania binarnego w czasie wykonywania, do pliku
common/android/gki_{ARCH}_protected_modules
, aby oznaczyć moduł jako chroniony moduł GKI. Zaktualizuj listę eksportów, które są chronione, aby uwzględnić te z nowo dodanego modułu wcommon/android/abi_gki_protected_exports_{ARCH}
, używająctools/bazel run //common:kernel_aarch64_abi_update_protected_exports
dlaaarch64
. Aby moduły oznaczone jako chronione moduły GKI były oficjalnie chronione, muszą być zatwierdzone przez Google.Sprawdź, czy nowo dodane pliki KO z kroku 2 zostały skopiowane do jądra
out/<androidX-Y.Z>/dist/system_dlkm.img
iout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
. 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ły GKI to funkcja jądra systemu Android, dlatego nie trzeba przesyłać poprawek konwersji modułów na zewnątrz. 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
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 kolejności posortowanej. Jeśli nie masz pewności, czy wszystkie wygenerowane pliki zostały wygenerowane, kompilacja się nie uda i wyświetli listę wszystkich plików KO, które należy dodać do listy.Dodaj ten sam zestaw plików KO z kroku 2, posortowanych w kolejności rosnącej dla wyszukiwania binarnego w czasie działania do
common/android/gki_{ARCH}_protected_modules
, aby oznaczyć moduł jako chroniony moduł GKI. Zaktualizuj listę eksportów, które są chronione, aby uwzględnić te z nowo dodanego modułu wcommon/android/abi_gki_protected_exports_{ARCH}
, używająctools/bazel run //common:kernel_aarch64_abi_update_protected_exports
dlaaarch64
. Aby moduły oznaczone jako chronione moduły GKI były oficjalnie chronione, muszą być zatwierdzone przez Google.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ły GKI to funkcja jądra systemu Android, dlatego nie trzeba przesyłać poprawek konwersji modułów na zewnątrz. Aby jednak przesłać poprawki Android Common Kernel (ACK), musisz przestrzegać innych wskazówek.
Przekształcanie chronionego modułu GKI w niechroniony
Usuń moduł, który jest przekształcany z chronionego w niechroniony, z listy
common/android/gki_protected_modules
.Zaktualizuj listę eksportów chronionych, aby wykluczyć te z nowo przekonwertowanego modułu niechronionego w
common/android/abi_gki_protected_exports_{ARCH}
za pomocątools/bazel run //common:kernel_aarch64_abi_update_protected_exports
dlaaarch64
.Prześlij zmiany do sprawdzenia. Moduł GKI to funkcja jądra dostępna tylko na Androida, więc nie trzeba przesyłać łatek konwersji modułów do upstream. 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. Niepodpisany moduł korzystający z ochronionego symbolu
Błąd:
module: Protected symbol: some_kernel_function (err -13)
Przyczyna:
Plik module.ko
jest niepodpisanym modułem dostawcy, który próbuje rozpoznać symbol wyeksportowanego przez moduł GKI some_kernel_function
podczas wczytywania bez umieszczania go na liście symboli dostawcy.
Rozwiązanie:
Jeśli module.ko
nie jest chronionym modułem GKI, zaktualizowanie listy symboli spowoduje usunięcie błędu przez dodanie some_kernel_function
do listy 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
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ś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ą.