Uruchom monitorowanie ABI

Na tej stronie dowiesz się, jak utworzyć i uruchomić reprezentacje interfejsu ABI jądra Androida Monitorowanie ABI. Dotyczy Androida 14 oraz wyższe. Informacje o starszych wersjach znajdziesz tutaj Starsze wersje jądra.

Zapoznaj się też z dokumentacją Kleaf: Obsługa monitorowania ABI (GKI) oraz Obsługa monitorowania ABI (Urządzenie).

Tworzenie jądra i jego reprezentacji ABI

Po pobraniu źródeł GKI uruchom to polecenie, aby utworzyć jądro GKI i artefakty ABI:

tools/bazel run //common:kernel_aarch64_abi_dist

To polecenie tworzy bieżącą reprezentację ABI i kopiuje ją do out_abi/kernel_aarch64/dist/abi.stg wraz z jednym jądrem i modułami.

Na końcu polecenia możesz podać dodatkowe argumenty narzędzia ABI po --. Aby na przykład zmienić miejsce docelowe interfejsu ABI i artefakty kompilacji, można użyć opcji --dist_dir:

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist

Przeanalizuj różnice w interfejsie ABI między kompilacją a reprezentacją referencyjną

Cel //common:kernel_aarch64_abi_dist wykonany w powyższym poleceniu, analizuje i raportuje wszelkie różnice w interfejsie ABI wykryte między kompilacją a dokumentem referencyjnym reprezentacja z siedzibą w common/android/abi_gki_aarch64.stg (zdefiniowaną w BUILD.bazel). Różnice te są wydrukowane na końcu kompilacji, jak widać w następujący przykład:

INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!

Wydrukowany raport pochodzi z artefaktu kompilacji znajdującego się pod adresem out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short wraz z raportami w w innych formatach.

Automatyzacja powinna używać kodu wyjścia polecenia kompilacji, który ma wartość różną od 0, jeśli: między wykrytymi różnicami.

Pamiętaj, że faza rozwoju gałęzie, w tym android-mainline, nie mają reprezentacji referencyjnej ABI. W przeciwnym razie //common:kernel_aarch64_abi_dist nie wykryje żadnych różnic.

Zaktualizuj referencyjną reprezentację ABI

Każda zmiana, która wpływa na interfejs ABI jądra, taka jak aktualizacja listy symboli, musi być odzwierciedlone w referencyjnym interfejsie ABI. (common/android/abi_gki_aarch64.stg, zdefiniowane w BUILD.bazel). W tym celu uruchom następujące polecenie:

​​tools/bazel run //common:kernel_aarch64_abi_update

To polecenie wykonuje wszystkie czynności w kroku Analiza różnic w interfejsie ABI i dodatkowo aktualizuje reprezentacja odwołania w źródłach. Zaktualizowany interfejs ABI możesz następnie przesłać w to samo zatwierdzenie co zmiana. Uwzględnij różnice pod względem interfejsu ABI w $DIST_DIR/abi.report.short w komunikacie zatwierdzenia.

Monitorowanie ABI i urządzenia docelowe

Monitorowanie ABI musisz skonfigurować tylko pod kątem celów kompilacji podstawowej jądra. Mieszana konfiguracje kompilacji (takie, które definiują base_kernel), które kompilują się bezpośrednio z jądro GKI wymaga jedynie dodania obsługi śledzenia symbolu urządzenia . Definicję interfejsu ABI należy zaktualizować za pomocą kompilacji GKI.

Zapoznaj się też z dokumentacją Kleaf: Obsługa monitorowania ABI (Urządzenie).

Starsze wersje jądra

Android 13

Instrukcje kompilacji są w większości takie same na Androidzie 14, ale format ABI to XML i referencyjna reprezentacja ABI to common/android/abi_gki_aarch64.xml.

Android 13 i starsze

Podobnie jak w przypadku Androida 13 format ABI to XML.

Starsze jądra używają build.sh zamiast Kleaf. Do monitorowania ABI należy użyć build_abi.sh, który akceptuje te same zmienne środowiskowe, aby dostosowywać utwórz jako build.sh. Na przykład:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

Spowoduje to utworzenie jądra i wyodrębnienie reprezentacji ABI do interfejsu OUT_DIR. (domyślnie out_abi) i odpowiada on Cel //common:kernel_aarch64_abi_dist systemu Kleaf (patrz Kompiluj jądro i artefakty ABI).

Referencyjna reprezentacja ABI jest przechowywana w android/abi_gki_aarch64.xml jako zdefiniowane przez zmienną ABI_DEFINITION w funkcji common/build.config.gki.aarch64.

Jeśli musisz zaktualizować reprezentację interfejsu ABI jądra, najwygodniejszym sposobem jest aby użyć opcji --update i --print-report:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report

--print-report wyświetla różnice pod względem interfejsu ABI między istniejącym plikiem. i nowo wygenerowany interfejs ABI.

Opcja --update zastępuje referencyjną reprezentację ABI. Dodatkowo aktualizacja listy symboli gdy używasz BUILD_CONFIG na urządzeniu ze skonfigurowanym KMI_SYMBOL_LIST.