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 zmodyfikuj plik
gki_defconfig
i ustaw wymagany element konfiguracji funkcji jądra zn
nam
(=m
). Ustaw to ustawienie w plikacharch/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 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.(Opcjonalnie) W przypadku Androida 15 i nowszych pomiń ten krok.
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, 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
z parametremaarch64
. Aby moduły oznaczone jako chronione moduły GKI były oficjalnie chronione, muszą być zatwierdzone przez Google.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 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 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 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, 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.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ć łatek konwersji modułów do upstream. Aby jednak przesłać poprawki Android Common Kernel (ACK), musisz przestrzegać innych wskazówek.
Przekształcanie chronionego modułu GKI w niechroniony
- Android 14 i starsze: na stronie
common/android/gki_protected_modules
usuń z listy chronionych modułów moduł, który został przekształcony z chronionego w niechroniony.
- Android 15 i nowsze: dodaj moduł, który jest przekształcany z modułu chronionego na niezabezpieczony, do listy
COMMON_UNPROTECTED_MODULES_LIST
w plikucommon/modules.bzl
.
- Android 14 i starsze: na stronie
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}
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
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, wczytywanie 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ą.