Istotne jest utrzymanie stabilnego interfejsu modułu jądra (KMI) dla dostawcy modułów. Jądro GKI jest są tworzone i wysyłane w postaci binarnej, a moduły ładowane przez dostawcę są oddzielne drzewo. Powstałe w ten sposób jądro GKI i moduły dostawcy muszą działać jako chociaż istniały razem.
W społeczności użytkowników Linuksa nie podoba mi się koncepcja ABI w jądrze stabilność dla jądra Mainline. W obliczu różnych łańcuchów narzędzi, konfiguracji i stale rozwijające się maszynę wirtualną Linuxa, nie uda się utrzymać na stabilnym wskaźniku KMI w mainline. Można jednak utrzymać stabilny wskaźnik KMI z dużymi ograniczeniami środowiska GKI z tymi ograniczeniami:
Do utworzenia
gki_defconfig
jądro.KMI jest stabilne tylko w ramach tej samej wersji LTS i Androida jądra, na przykład
android13-5.10
,android12-5.10
lubandroid13-5.15
.- W przypadku
android-mainline
nie jest utrzymywana stabilność KMI.
- W przypadku
Tylko konkretny łańcuch narzędzi Clang udostępniony w AOSP i zdefiniowany dla odpowiadająca jej gałąź służy do tworzenia jądra i modułów.
Tylko symbole używane przez moduły wymienione na liście symboli są są monitorowane pod kątem stabilności i są uznawane za symbole KMI.
- Pamiętaj, że moduły dostawcy mogą używać tylko symboli KMI. Ten jest egzekwowane przez błędy ładowania modułów, jeśli
Po zamrożeniu gałęzi KMI zmiany są dozwolone, ale nie mogą spowodować uszkodzenia KMI. Zmiany te obejmują:
- Zmiany konfiguracji
- Zmiany kodu jądra
- zmiany w łańcuchu narzędzi (w tym aktualizacje),
Użyj hermetycznego procesu kompilacji i łańcucha narzędzi LLVM
Hermetyczny proces kompilacji zapewnia stabilny wskaźnik KMI dzięki plikom manifestu repo
w
Pole kernel/manifest
w pełni opisuje środowisko kompilacji. Na przykład parametr
manifestuj dla: android13-5.15
obejmuje łańcuch narzędzi, skrypty
tworzenia i wszelkie inne elementy niezbędne do stworzenia
Jądro obrazu jądra (GKI). Odpowiednia konfiguracja build.config
takich jak konfiguracja kompilacji GKI build.config.gki.aarch64
,
Zadbaj o to, aby dołączone narzędzia były prawidłowo używane do generowania spójnej kompilacji
wyników.
Użycie hermetycznego procesu kompilacji gwarantuje również, że opis interfejsu ABI
drzewo jest spójne niezależnie od tego, czy są generowane przez Google (na przykład
abi_gki_aarch64.xml
dla android13-5.15
) lub wygenerowane w lokalnym drzewie, które obejmuje dostawcę
modułów.
Narzędzia do tworzenia i porównywania opisu ABI
dla interfejsu Kernel Module Interface (KMI) są również częścią repozytorium,
opisane w pliku manifestu.
Łańcuch narzędzi użyty do utworzenia jądra GKI musi być w pełni zgodny z z łańcucha narzędzi służącego do tworzenia modułów dostawców. Od Androida 10, wszystkie jądra Androida muszą być za pomocą łańcucha narzędzi LLVM. z GKI – łańcuchem narzędzi LLVM służącym do tworzenia jądra i moduły dostawców muszą generować ten sam interfejs ABI co łańcuch narzędzi LLVM, z którego AOSP i partnerzy muszą zapewnić zgodność KMI z jądrem GKI. Zdecydowanie zalecamy korzystanie z dostarczonych narzędzi, ponieważ zapewniają i najlepszą zgodność.
Co dalej?
Instrukcje dotyczące budowania jądra przy użyciu hermetycznego procesu kompilacji oraz Łańcuch narzędzi LLVM, patrz sekcja Twórz jądra.
Instrukcje dotyczące monitorowania interfejsu ABI i rozwiązywania problemów znajdziesz tutaj: Monitorowanie interfejsu ABI Androida