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
.