Auf dieser Seite wird beschrieben, wie Sie ABI-Darstellungen des Android-Kernels erstellen und ABI-Monitoring ausführen. Sie ist für Android 16 und höher verfügbar. Informationen zu niedrigeren Versionen finden Sie unter ABI-Monitor für frühere Kernelversionen.
Weitere Informationen finden Sie in der Referenzdokumentation für Kleaf: ABI-Monitoring unterstützen (GKI) und ABI-Monitoring unterstützen (Gerät).
Kernel und ABI-Darstellung erstellen
Nachdem Sie die GKI-Quellen heruntergeladen haben, führen Sie den folgenden Befehl aus, um den GKI-Kernel und die ABI-Artefakte zu erstellen:
tools/bazel run //common:kernel_aarch64_abi_dist
Mit diesem Befehl wird die aktuelle ABI-Darstellung erstellt und zusammen mit dem erstellten Kernel und den Modulen in $DIST_DIR/abi.stg
kopiert. Die Standardeinstellung für $DIST_DIR
ist out_abi/kernel_aarch64_abi_dist/dist
.
Sie können zusätzliche Argumente für das ABI-Tooling am Ende des Befehls nach --
angeben. Wenn Sie beispielsweise das Ziel für ABI und Build-Artefakte ändern möchten, können Sie die Option --dist_dir
verwenden:
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
ABI-Unterschiede zwischen dem Build und einer Referenzdarstellung analysieren
Das Ziel //common:kernel_aarch64_abi_dist
, das im vorherigen Befehl ausgeführt wird, analysiert und meldet alle ABI-Unterschiede zwischen dem Build und der Referenzrepräsentation unter common/gki/aarch64/abi.stg
(definiert in BUILD.bazel
). Diese Unterschiede werden am Ende des Builds ausgegeben, wie im folgenden Beispiel gezeigt:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
Der gedruckte Bericht stammt aus dem Build-Artefakt unter $DIST_DIR/abi_stgdiff/abi.report.short
zusammen mit Berichten in anderen Formaten.
Für die Automatisierung sollte der Exit-Code des Build-Befehls verwendet werden. Dieser ist ungleich Null, wenn Unterschiede gefunden werden.
Beachten Sie, dass Äste der Entwicklungsphase, einschließlich android-mainline
, keine Referenz-ABI-Darstellung haben.
Andernfalls erkennt //common:kernel_aarch64_abi_dist
keine Unterschiede.
Referenz-ABI-Darstellung aktualisieren
Alle Änderungen, die sich auf die Kernel-ABI auswirken, z. B. eine Aktualisierung der Symbolliste, müssen in der Referenz-ABI-Darstellung (common/gki/aarch64/abi.stg
, definiert in BUILD.bazel) berücksichtigt werden.
Führen Sie dazu den folgenden Befehl aus:
tools/bazel run //common:kernel_aarch64_abi_update
Mit diesem Befehl werden alle Schritte im Abschnitt ABI-Unterschiede analysieren ausgeführt und zusätzlich die Referenzdarstellung in den Quellen aktualisiert. Das aktualisierte ABI kann dann im selben Commit wie die Änderung hochgeladen werden. Fügen Sie die ABI-Unterschiede aus dem Bericht in $DIST_DIR/abi_stgdiff/abi.report.short
in die Commit-Nachricht ein.
ABI-Monitoring und Geräteziele
Das ABI-Monitoring muss nur für Kern-Kernel-Buildziele konfiguriert werden. Bei gemischten Buildkonfigurationen (die base_kernel
definieren), die direkt mit dem GKI-Kernel kompiliert werden, muss nur die Unterstützung für das Tracking der Gerätesymbolliste hinzugefügt werden.
Die ABI-Definition sollte mit dem GKI-Build aktualisiert werden.
Weitere Informationen finden Sie in der Referenzdokumentation für Kleaf: ABI-Überwachung unterstützen (Gerät).
ABI-Überwachung für vorherige Kernelversionen (Android 15 und niedriger)
Für frühere Kernelversionen unterscheiden sich die Anleitungen zum Erstellen und Überwachen von ABIs wie unten beschrieben.
Android 15 und 14
Die Anleitung ist weitgehend mit der für Android 16 identisch, mit der Ausnahme, dass die Referenz-ABI-Darstellung common/android/abi_gki_aarch64.stg
ist und $DIST_DIR
standardmäßig auf out_abi/kernel_aarch64/dist
festgelegt ist.
Android 13
Android 13 kann entweder mit Kleaf oder mit alten Build-Scripts erstellt werden.
Für Kleaf gelten dieselben Anweisungen wie für Android 14, mit der Ausnahme, dass das ABI-Format XML ist und die Referenz-ABI-Darstellung common/android/abi_gki_aarch64.xml
ist.
Für Legacy-Build-Scripts gelten dieselben Anweisungen wie für Android 12.
Android 12 und niedriger
Das ABI-Format ist XML und die Referenz-ABI-Darstellung ist common/android/abi_gki_aarch64.xml
.
Bei diesen Kerneln wird build.sh
anstelle von Kleaf verwendet. Für das ABI-Monitoring sollten Sie build_abi.sh
verwenden. Für die Anpassung des Builds werden dabei dieselben Umgebungsvariablen wie bei build.sh
akzeptiert. Beispiel:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Dadurch wird der Kernel erstellt und die ABI-Darstellung in das Unterverzeichnis OUT_DIR
(standardmäßig out_abi
) extrahiert. Dies entspricht dem //common:kernel_aarch64_abi_dist
-Ziel von Kleaf (siehe Kernel und ABI-Artefakte erstellen).
Die Referenz-ABI-Darstellung wird in android/abi_gki_aarch64.xml
gemäß der ABI_DEFINITION
-Variablen in common/build.config.gki.aarch64
gespeichert.
Wenn Sie die Kernel-ABI-Darstellung aktualisieren müssen, ist es am einfachsten, die Optionen --update
und --print-report
zu verwenden:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
Mit --print-report
werden die ABI-Unterschiede zwischen der vorhandenen Datei und einer neu generierten ABI ausgegeben.
Mit der Option --update
wird die Referenz-ABI-Darstellung überschrieben. Außerdem wird die Symbolliste aktualisiert, wenn BUILD_CONFIG
für ein Gerät mit konfiguriertem KMI_SYMBOL_LIST
verwendet wird.