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_defconfig
i ustaw wymagany element konfiguracji funkcji jądra zn
nam
(=m
). Ustaw to warch/arm64/configs/gki_defconfig
iarch/x86/configs/gki_defconfig
.Dodaj pliki KO (
.ko
) wygenerowane dla funkcji do sekcjiCOMMON_GKI_MODULES_LIST
wcommon/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_exports
foraarch64
.Upewnij się, że nowo dodane pliki KO z kroku 2 zostały skopiowane do katalogów
out/<androidX-Y.Z>/dist/system_dlkm.img
iout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
jądra. Moduły wsystem_dlkm_staging_archive.tar.gz
archiwum mogą być używane jako dane wejściowe do generowaniasystem_dlkm.img
w 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_defconfig
i ustaw wymagany element konfiguracji funkcji jądra zy
nam
(=m
). Ustaw to warch/arm64/configs/gki_defconfig
iarch/x86/configs/gki_defconfig
.Dodaj pliki KO (
.ko
) wygenerowane dla funkcji do sekcjiCOMMON_GKI_MODULES_LIST
wcommon/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_exports
dlaaarch64
.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.img
iout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
w jądrze. Moduły wsystem_dlkm_staging_archive.tar.gz
archiwum mogą być używane jako dane wejściowe do generowaniasystem_dlkm.img
w 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_LIST
w plikucommon/modules.bzl
.W przypadku Androida 14 usuń z listy chronionych modułów w
common/android/gki_protected_modules
moduł, 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_exports
dlaaarch64
.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ą.