Uruchom monitorowanie ABI

Na tej stronie dowiesz się, jak tworzyć reprezentacje interfejsu ABI jądra Androida i uruchamiać monitorowanie ABI. Dotyczy to Androida 14 i nowszych wersji. Informacje o starszych wersjach znajdziesz w artykule o starszych wersjach jądra.

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

Kompilowanie jądra i jego reprezentacji ABI

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

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 utworzonym jądrem i modułami.

Dodatkowe argumenty narzędzia ABI możesz podać na końcu polecenia po --. Aby na przykład zmienić miejsce docelowe dla ABI i elementów kompilacji, możesz użyć opcji --dist_dir:

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

Analiza różnic ABI między wersją kompilacji a reprezentacją referencyjną

Docelowy parametr //common:kernel_aarch64_abi_dist, który jest wykonywany w powyższym poleceniu, analizuje i zgłasza wszelkie różnice w ABI między wersją kompilacji a reprezentacją odniesienia znajdującą się w katalogu common/android/abi_gki_aarch64.stg (zdefiniowanym w pliku BUILD.bazel). Te różnice są wyprowadzane na koniec kompilacji, jak pokazano w tym przykładzie:

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ę w lokalizacji out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short oraz raportów w innych formatach.

Automatyzacja powinna używać kodu wyjścia polecenia kompilacji, który w przypadku wykrycia różnic ma wartość różną od 0.

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

Aktualizowanie odwołania do reprezentacji ABI

Każda zmiana, która wpływa na ABI jądra, np. aktualizacja listy symboli, musi być odzwierciedlona w reprezentacji ABI odniesienia (common/android/abi_gki_aarch64.stg zdefiniowanej w pliku BUILD.bazel). W tym celu uruchom następujące polecenie:

​​tools/bazel run //common:kernel_aarch64_abi_update

To polecenie wykonuje wszystkie czynności z etapu Analiza różnic w ABI, a dodatkowo aktualizuje reprezentację referencyjną w źródłach. Zaktualizowany ABI można następnie przesłać w ramach tego samego zatwierdzenia, co zmiana. W wiadomości zatwierdzenia dołącz różnice ABI z raportu $DIST_DIR/abi.report.short.

Monitorowanie interfejsu ABI i docelowe urządzenia

Monitorowanie ABI musi być skonfigurowane tylko w przypadku docelowych wersji jądra. Mieszane konfiguracje kompilacji (takie, które definiują base_kernel), które kompilują się bezpośrednio z jądrem GKI, wymagają tylko dodania obsługi śledzenia listy symboli urządzenia. Definicję interfejsu ABI należy zaktualizować za pomocą kompilacji GKI.

Zobacz też dokumentację referencyjną Kleaf: Obsługa monitorowania ABI (urządzenie).

Starsze wersje jądra

Android 13

Instrukcje kompilacji są w większości takie same jak w Androidzie 14, z wyjątkiem tego, że format ABI to XML, a 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ć polecenia build_abi.sh, które akceptuje te same zmienne środowiskowe do dostosowywania kompilacji co polecenie build.sh. Na przykład:

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

Spowoduje to skompilowanie jądra i wyodrębnienie reprezentacji ABI w podkatalogu OUT_DIR (domyślnie out_abi) i jest równoważne docelowi //common:kernel_aarch64_abi_dist Kleaf (patrz Kompilowanie artefaktów jądra i ABI).

Referencyjna reprezentacja ABI jest przechowywana w android/abi_gki_aarch64.xml zgodnie z definicją zmiennej ABI_DEFINITIONcommon/build.config.gki.aarch64.

Jeśli chcesz zaktualizować reprezentację ABI jądra, najwygodniej jest użyć opcji --update--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 a nowo wygenerowanym interfejsem ABI.

Opcja --update zastępuje referencyjną reprezentację ABI. Nie wykonuje też aktualizacji listy symboli, gdy używasz elementu BUILD_CONFIG na urządzeniu z konfigurowanym elementem KMI_SYMBOL_LIST.