ABI-Monitoring ausführen

Auf dieser Seite wird beschrieben, wie Sie ABI-Darstellungen des Android-Kernels erstellen und ABI-Monitoring ausführen. Sie gilt für Android 14 und höher. Informationen zu niedrigeren Versionen finden Sie unter Ältere Kernelversionen.

Weitere Informationen finden Sie in der Referenzdokumentation zu Kleaf: Unterstützung für ABI-Monitoring (GKI) und Unterstützung von ABI-Monitoring (Gerät).

Kernel und ABI-Darstellung erstellen

Führen Sie nach dem Herunterladen von GKI-Quellen 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 out_abi/kernel_aarch64/dist/abi.stg kopiert.

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

Mit dem Ziel //common:kernel_aarch64_abi_dist, das im obigen Befehl ausgeführt wird, werden alle ABI-Unterschiede zwischen der Build- und der Referenzdarstellung unter common/android/abi_gki_aarch64.stg (definiert in BUILD.bazel) analysiert und gemeldet. 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 out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short sowie Berichte 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/android/abi_gki_aarch64.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 Schritt ABI-Unterschiede analysieren ausgeführt. Außerdem wird 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.report.short in die Commit-Nachricht ein.

ABI-Monitoring und Geräteziele

Das ABI-Monitoring muss nur für Kernel-Buildziele konfiguriert werden. Bei gemischten Buildkonfigurationen (die base_kernel definieren) und direkt mit dem GKI-Kernel kompilierten Builds 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).

Ältere Kernelversionen

Android 13

Die Build-Anleitung entspricht größtenteils der von Android 14, mit der Ausnahme, dass das ABI-Format XML und die ABI-Referenzdarstellung common/android/abi_gki_aarch64.xml ist.

Android 13 und niedriger

Wie bei Android 13 ist das ABI-Format XML.

Ältere Kernel verwenden build.sh anstelle von Kleaf. 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 Definition in der Variablen ABI_DEFINITION in common/build.config.gki.aarch64 gespeichert.

Wenn Sie die Kernel-ABI-Darstellung aktualisieren müssen, verwenden Sie am einfachsten die Optionen --update und --print-report:

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

--print-report gibt die ABI-Unterschiede zwischen der Datei in ihrer jetzigen Form und einer neu generierten ABI aus.

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.