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.