Skonfiguruj funkcje jądra jako moduły GKI

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

  1. W przypadku nowej funkcji edytuj gki_defconfig i ustaw element konfiguracji wymaganej funkcji jądra z n na m ( =m ). Ustaw to ustawienie zarówno w arch/arm64/configs/gki_defconfig i arch/x86/configs/gki_defconfig .

  2. Dodaj pliki KO ( .ko ) wygenerowane dla tej funkcji do sekcji COMMON_GKI_MODULES_LIST pliku common/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.

  3. 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 pliku common/android/abi_gki_protected_exports_{ARCH} za pomocą tools/bazel run //common:kernel_aarch64_abi_update_protected_exports dla aarch64 . Moduły oznaczone jako chronione moduły GKI nadal muszą zostać zatwierdzone przez firmę Google, aby były oficjalnymi modułami chronionymi.

  4. Upewnij się, że nowo dodane pliki KO z kroku 2 zostały skopiowane do jądra out/<androidX-YZ>/dist/system_dlkm.img i out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz . Moduły w archiwum system_dlkm_staging_archive.tar.gz mogą zostać użyte jako dane wejściowe do wygenerowania pliku system_dlkm.img w kompilacji platformy.

  5. 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

  1. W przypadku istniejącej wbudowanej funkcji jądra edytuj gki_defconfig i ustaw element konfiguracji wymaganej funkcji jądra z y na m ( =m ). Ustaw to ustawienie zarówno w arch/arm64/configs/gki_defconfig i arch/x86/configs/gki_defconfig .

  2. Dodaj pliki KO ( .ko ) wygenerowane dla tej funkcji do sekcji COMMON_GKI_MODULES_LIST pliku common/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.

  3. 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 pliku common/android/abi_gki_protected_exports_{ARCH} za pomocą tools/bazel run //common:kernel_aarch64_abi_update_protected_exports dla aarch64 . Moduły oznaczone jako chronione moduły GKI nadal muszą zostać zatwierdzone przez firmę Google, aby były oficjalnymi modułami chronionymi.

  4. 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 i out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz . Moduły w archiwum system_dlkm_staging_archive.tar.gz mogą zostać użyte jako dane wejściowe do wygenerowania pliku system_dlkm.img w kompilacji platformy.

  5. 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

  1. Usuń moduł konwertowany z chronionego na niechroniony z listy modułów chronionych pod common/android/gki_protected_modules .

  2. 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 dla aarch64 .

  3. 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ą.