Utrzymanie stabilnego KMI dla modułów dostawców ma kluczowe znaczenie. Jądro GKI jest budowane i dostarczane w formie binarnej, a moduły ładowalne przez dostawcę są budowane w osobnym drzewie. Wynikowe jądro GKI i moduły dostawcy muszą działać tak, jakby były zbudowane razem.
Ogólnie rzecz biorąc, społeczność Linuksa z dezaprobatą przyjęła koncepcję stabilności ABI w jądrze dla jądra głównego. W obliczu różnych zestawów narzędzi, konfiguracji i stale rozwijającego się głównego jądra Linuksa utrzymanie stabilnego KMI w głównym trybie jest niewykonalne. Jednakże możliwe jest utrzymanie stabilnego KMI w bardzo ograniczonym środowisku GKI z następującymi ograniczeniami:
Do zbudowania jądra można użyć tylko jednej konfiguracji,
gki_defconfig
.KMI jest stabilny tylko w tej samej wersji jądra LTS i Androida, takiej jak
android13-5.10
,android12-5.10
lubandroid13-5.15
.- Dla
android-mainline
nie jest utrzymywana stabilność KMI.
- Dla
Do budowania jądra i modułów używany jest tylko specyficzny zestaw narzędzi Clang dostarczony w AOSP i zdefiniowany dla odpowiedniej gałęzi.
Tylko symbole, o których wiadomo, że są używane przez moduły, jak określono na liście symboli, są monitorowane pod kątem stabilności i uznawane za symbole KMI.
- Konsekwencją tego jest to, że moduły dostawców muszą używać wyłącznie symboli KMI. To ograniczenie jest wymuszane przez nieudane ładowanie modułów, jeśli wymagane są symbole inne niż KMI.
Po zamrożeniu gałęzi KMI zmiany są dozwolone, ale nie mogą uszkodzić KMI. Zmiany te obejmują:
- Zmiany w konfiguracji
- Zmiany w kodzie jądra
- Zmiany w zestawie narzędzi (w tym aktualizacje)
Skorzystaj z hermetycznego procesu kompilacji i zestawu narzędzi LLVM
Hermetyczny proces kompilacji zapewnia stabilny KMI, ponieważ manifesty repo
w kernel/manifest
całkowicie opisują środowisko kompilacji. Na przykład manifest dla android13-5.15
zawiera łańcuch narzędzi, skrypty kompilacji i wszystko inne wymagane do zbudowania jądra ogólnego obrazu jądra (GKI). Odpowiednie pliki konfiguracyjne build.config
, takie jak GKI build config build.config.gki.aarch64
, zapewniają prawidłowe użycie dołączonych narzędzi w celu wygenerowania spójnych wyników kompilacji.
Stosowanie hermetycznego procesu kompilacji zapewnia również spójność opisu ABI drzewa, niezależnie od tego, czy jest on wygenerowany przez Google (na przykład abi_gki_aarch64.xml
dla android13-5.15
, czy wygenerowany w lokalnym drzewie zawierającym moduły dostawcy. Narzędzia do tworzenia i porównywania Opis ABI dla interfejsu modułu jądra (KMI) jest również udostępniany jako część repozytorium opisanego w manifeście.
Łańcuch narzędzi używany do budowania jądra GKI musi być w pełni kompatybilny z łańcuchem narzędzi używanym do budowania modułów dostawców. Począwszy od Androida 10, wszystkie jądra Androida muszą być zbudowane przy użyciu zestawu narzędzi LLVM. W przypadku GKI łańcuch narzędzi LLVM używany do tworzenia jąder produktów i modułów dostawców musi generować ten sam ABI, co łańcuch narzędzi LLVM z AOSP, a partnerzy muszą upewnić się, że KMI jest kompatybilny z jądrem GKI. Zdecydowanie zaleca się korzystanie z dostarczonych narzędzi do kompilacji, ponieważ zapewniają one gwarancję zgodności.
Co dalej?
Aby uzyskać instrukcje dotyczące budowania jądra przy użyciu hermetycznego procesu kompilacji i zestawu narzędzi LLVM, zobacz Kompilacja jąder .
Instrukcje dotyczące monitorowania ABI i rozwiązywania problemów można znaleźć w artykule Monitorowanie ABI jądra systemu Android