Jak uruchomić monitorowanie ABI

W tej sekcji opisano sposób tworzenia reprezentacji ABI jądra systemu Android i uruchamiania monitorowania ABI. Dotyczy Androida 14 i nowszych wersji. W przypadku starszych wersji zapoznaj się z sekcją Starsze wersje jądra .

Zobacz także dokumentację referencyjną dla Kleaf: Wsparcie monitorowania ABI (GKI) i Wsparcie monitorowania ABI (urządzenie) .

Zbuduj jądro i jego reprezentację ABI

Po pobraniu źródeł GKI uruchom następującą komendę, aby zbudować jądro GKI i artefakty ABI:

tools/bazel run //common:kernel_aarch64_abi_dist

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

Możesz podać dodatkowe argumenty dla narzędzi ABI na końcu polecenia po -- . Na przykład, aby zmienić miejsce docelowe dla ABI i zbudować artefakty, możesz użyć opcji --dist_dir :

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

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

Cel //common:kernel_aarch64_abi_dist , wykonany w powyższym poleceniu, analizuje i raportuje wszelkie różnice ABI znalezione pomiędzy reprezentacją kompilacji a reprezentacją referencyjną zlokalizowaną pod adresem common/android/abi_gki_aarch64.stg (zdefiniowaną w BUILD.bazel ). Różnice te zostaną wydrukowane na końcu kompilacji, jak pokazano w poniższym 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ę pod out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short wraz z raportami w innych formatach.

Automatyzacja powinna używać kodu zakończenia polecenia kompilacji, który będzie różny od zera, jeśli zostaną znalezione różnice.

Należy pamiętać, że gałęzie fazy rozwojowej , w tym android-mainline , nie mają referencyjnej reprezentacji ABI. Bez tego //common:kernel_aarch64_abi_dist nie wykryje żadnych różnic.

Zaktualizuj referencyjną reprezentację ABI

Wszelkie zmiany wpływające na ABI jądra, takie jak aktualizacja listy symboli , muszą zostać odzwierciedlone w referencyjnej reprezentacji ABI ( common/android/abi_gki_aarch64.stg , zdefiniowana w BUILD.bazel ). Aby to zrobić, musisz uruchomić następujące polecenie:

​​tools/bazel run //common:kernel_aarch64_abi_update

To polecenie wykonuje wszystko w kroku Analiza różnic ABI i dodatkowo aktualizuje reprezentację referencyjną w źródłach. Zaktualizowany ABI można następnie przesłać w tym samym zatwierdzeniu, co zmiana. Proszę uwzględnić różnice ABI z raportu w $DIST_DIR/abi.report.short w komunikacie zatwierdzenia.

Monitorowanie ABI i cele urządzeń

Monitorowanie ABI należy skonfigurować tylko dla podstawowych celów kompilacji jądra. Mieszane konfiguracje kompilacji (te, które definiują base_kernel ), które kompilują się bezpośrednio z jądrem GKI , wymagają jedynie dodania obsługi śledzenia listy symboli urządzeń . Definicja ABI powinna zostać zaktualizowana przy użyciu kompilacji GKI.

Zobacz także dokumentację referencyjną dla Kleaf: Wsparcie monitorowania ABI (urządzenie) .

Starsze wersje jądra

Androida 13

Instrukcje kompilacji są w większości takie same jak w przypadku Androida 14, z tą różnicą, że format ABI to XML, a referencyjna reprezentacja ABI to common/android/abi_gki_aarch64.xml .

Android 12 i starsze

Podobnie jak w Androidzie 13, formatem ABI jest XML.

Starsze jądra używają build.sh zamiast Kleafa. Do monitorowania ABI powinieneś użyć build_abi.sh , który akceptuje te same zmienne środowiskowe w celu dostosowania kompilacji co build.sh . Na przykład:

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

To buduje jądro i wyodrębnia reprezentację ABI do podkatalogu OUT_DIR (domyślnie jest to out_abi ) i jest równoważne celowi //common:kernel_aarch64_abi_dist Kleafa (zobacz Budowanie jądra i artefaktów ABI ).

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

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

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

Opcja --print-report wypisuje różnice ABI pomiędzy istniejącym plikiem a nowo wygenerowanym ABI.

Opcja --update zastępuje referencyjną reprezentację ABI. Wykonuje również aktualizację listy symboli podczas korzystania BUILD_CONFIG dla urządzenia ze skonfigurowaną KMI_SYMBOL_LIST .