Utrzymanie stabilnego interfejsu modułu jądra

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 utworzeniagki_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 lub android13-5.15.

    • W przypadku android-mainline nie jest utrzymywana stabilność KMI.
  • 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