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
.