Na tej stronie opisano, jak skonfigurować nową funkcję jądra jako moduł GKI lub skonfigurować istniejącą wbudowaną funkcję jądra jako moduł GKI.
Skonfiguruj nową funkcję jako moduł GKI
W przypadku nowej funkcji edytuj
gki_defconfig
i ustaw element konfiguracji wymaganej funkcji jądra zn
nam
(=m
). Ustaw to ustawienie zarówno warch/arm64/configs/gki_defconfig
iarch/x86/configs/gki_defconfig
.Dodaj pliki KO (
.ko
) wygenerowane dla tej funkcji do sekcjiCOMMON_GKI_MODULES_LIST
plikucommon/modules.bzl
. Dodaj pliki w posortowanej kolejności. Jeśli nie masz pewności co do wszystkich wygenerowanych plików, 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 kroku 2, posortowany w kolejności rosnącej na potrzeby wyszukiwania binarnego w czasie wykonywania, do
common/android/gki_{ARCH}_protected_modules
, aby wyznaczyć moduł jako chroniony moduł GKI. Zaktualizuj listę chronionych eksportów, aby uwzględnić eksporty z nowo dodanego modułu w plikucommon/android/abi_gki_protected_exports_{ARCH}
za pomocątools/bazel run //common:kernel_aarch64_abi_update_protected_exports
dlaaarch64
. Moduły oznaczone jako chronione moduły GKI nadal muszą zostać zatwierdzone przez firmę Google, aby były oficjalnymi modułami chronionymi.Upewnij się, że nowo dodane pliki KO z kroku 2 zostały skopiowane do jądra
out/<androidX-YZ>/dist/system_dlkm.img
iout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
. Moduły w archiwumsystem_dlkm_staging_archive.tar.gz
mogą zostać użyte jako dane wejściowe do wygenerowania plikusystem_dlkm.img
w kompilacji platformy.Prześlij zmiany do sprawdzenia. Moduły GKI są funkcją jądra dostępną tylko w systemie Android, więc poprawki konwersji modułów nie muszą być przesyłane wcześniej. Aby przesyłać poprawki wspólnego jądra systemu Android (ACK), należy jednak postępować zgodnie z innymi wytycznymi.
Skonfiguruj wbudowaną funkcję jądra jako moduł GKI
W przypadku istniejącej wbudowanej funkcji jądra edytuj
gki_defconfig
i ustaw element konfiguracji wymaganej funkcji jądra zy
nam
(=m
). Ustaw to ustawienie zarówno warch/arm64/configs/gki_defconfig
iarch/x86/configs/gki_defconfig
.Dodaj pliki KO (
.ko
) wygenerowane dla tej funkcji do sekcjiCOMMON_GKI_MODULES_LIST
plikucommon/modules.bzl
. Dodaj pliki w posortowanej kolejności. Jeśli nie masz pewności co do wszystkich wygenerowanych plików, 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 kroku 2, posortowany w kolejności rosnącej na potrzeby wyszukiwania binarnego w czasie wykonywania, do
common/android/gki_{ARCH}_protected_modules
, aby wyznaczyć moduł jako chroniony moduł GKI. Zaktualizuj listę chronionych eksportów, aby uwzględnić eksporty z nowo dodanego modułu w plikucommon/android/abi_gki_protected_exports_{ARCH}
za pomocątools/bazel run //common:kernel_aarch64_abi_update_protected_exports
dlaaarch64
. Moduły oznaczone jako chronione moduły GKI nadal muszą zostać zatwierdzone przez firmę Google, aby były oficjalnymi modułami chronionymi.Upewnij się, że nowo przekonwertowane pliki KO modułu z kroku 2 zostały skopiowane do jądra
out/<androidX-YZ>/dist/system_dlkm.img
iout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
. Moduły w archiwumsystem_dlkm_staging_archive.tar.gz
mogą zostać użyte jako dane wejściowe do wygenerowania plikusystem_dlkm.img
w kompilacji platformy.Prześlij zmiany do sprawdzenia. Moduły GKI są funkcją jądra dostępną tylko w systemie Android, więc poprawki konwersji modułów nie muszą być przesyłane wcześniej. Aby przesyłać poprawki wspólnego jądra systemu Android (ACK), należy jednak postępować zgodnie z innymi wytycznymi.
Konwertuj chroniony moduł GKI na niechroniony
Usuń moduł konwertowany z chronionego na niechroniony z listy modułów chronionych pod
common/android/gki_protected_modules
.Zaktualizuj listę chronionych eksportów, aby wykluczyć je 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ły GKI są funkcją jądra dostępną tylko w systemie Android, więc poprawki konwersji modułów nie muszą być przesyłane wcześniej. Aby przesyłać poprawki wspólnego jądra systemu Android (ACK), należy jednak postępować zgodnie z innymi wytycznymi.
Szybki przewodnik dotyczący rozwiązywania naruszeń symboli modułów GKI
Kiedy niepodpisane moduły naruszają ochronę symboli obowiązującą w modułach GKI, podczas ładowania modułu mogą wystąpić dwa rodzaje błędów, co skutkuje awarią.
1. Moduł bez znaku wykorzystujący chroniony symbol
Błąd:
module: Protected symbol: some_kernel_function (err -13)
Przyczyna:
Plik module.ko
jest modułem niepodpisanego dostawcy i próbuje rozpoznać wyeksportowany przez moduł GKI symbol some_kernel_function
podczas ładowania, bez umieszczania go na liście symboli dostawcy.
Rezolucja:
Jeśli module.ko
nie jest chronionym modułem GKI, aktualizacja listy symboli rozwiąże błąd poprzez dodanie some_kernel_function
do listy symboli dostawcy. Alternatywnie użyj wersji GKI 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ą niestandardową wersją tego modułu. Gdy module.ko
próbuje wyeksportować some_kernel_function
, którą może wyeksportować tylko za pomocą podpisanego modułu GKI, ładowanie kończy się niepowodzeniem i wyświetleniem tego komunikatu.
Rezolucja:
Można to naprawić, używając wersji modułu GKI, która eksportuje some_kernel_function
, jeśli moduł bez znaku jest wersją niestandardową.