ABI-Monitoring ausführen

Auf dieser Seite wird beschrieben, wie Sie ABI-Darstellungen für Android-Kernel erstellen und ausführen ABI-Überwachung. Sie ist unter Android 14 und höher liegen. Informationen zu niedrigeren Versionen finden Sie unter Ältere Kernel-Versionen.

Weitere Informationen finden Sie in der Referenzdokumentation zu Kleaf: Unterstützung der ABI-Überwachung (Google KI) und Unterstützung der ABI-Überwachung (Gerät).

Kernel und seine ABI-Darstellung erstellen

Nach dem Herunterladen von GKI-Quellen 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

Dieser Befehl erstellt die aktuelle ABI-Darstellung und kopiert sie in out_abi/kernel_aarch64/dist/abi.stg zusammen mit dem erstellten Kernel und den Modulen.

Sie können am Ende des Befehls zusätzliche Argumente für die ABI-Tools angeben. nach --. Um beispielsweise das Ziel für ABI zu ändern und Artefakte zu erstellen, kann die Option --dist_dir verwenden:

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist

Die ABI-Unterschiede zwischen dem Build und einer Referenzdarstellung analysieren

Das Ziel //common:kernel_aarch64_abi_dist, das im obigen Befehl ausgeführt wurde, analysiert und meldet alle ABI-Unterschiede, die zwischen Build und Referenz festgestellt wurden Darstellung unter common/android/abi_gki_aarch64.stg (definiert in BUILD.bazel) Diese Unterschiede werden am Ende des Builds ausgegeben, wie in den folgendes Beispiel:

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 zusammen mit Berichten in anderen Formaten.

Die Automatisierung sollte den Exit-Code des Build-Befehls verwenden. Dieser ist nicht null, wenn gefunden werden.

Beachten Sie, dass Entwicklungsphase Zweige, einschließlich android-mainline, haben keine Referenz-ABI-Darstellung. Andernfalls erkennt //common:kernel_aarch64_abi_dist keine Unterschiede.

Referenz-ABI-Darstellung aktualisieren

Jede Änderung, die sich auf das Kernel-ABI auswirkt, z. B. Aktualisierung der Symbolliste muss in der ABI-Referenzdarstellung widergespiegelt werden (common/android/abi_gki_aarch64.stg, definiert in build.bazel). Dazu müssen Sie den folgenden Befehl ausführen:

​​tools/bazel run //common:kernel_aarch64_abi_update

Dieser Befehl führt alle Schritte im Schritt Analysieren Sie die ABI-Unterschiede und aktualisieren Sie zusätzlich die Referenzdarstellung in den Quellen. Das aktualisierte ABI kann dann denselben Commit wie die Änderung. Beziehen Sie die ABI-Unterschiede Bericht in $DIST_DIR/abi.report.short in der Commit-Nachricht.

ABI-Monitoring und Geräteziele

Das ABI-Monitoring muss nur für Core-Kernel-Build-Ziele konfiguriert werden. Gemischt Build-Konfigurationen (Konfigurationen, die base_kernel definieren), die direkt mit Der GKI-Kernel muss nur Unterstützung für das Tracking des Gerätesymbols hinzufügen. Liste. Die ABI-Definition sollte mit dem GKI-Build aktualisiert werden.

Weitere Informationen finden Sie in der Referenzdokumentation zu Kleaf: Unterstützung der ABI-Überwachung (Gerät).

Ältere Kernel-Versionen

Android 13

Die Erstellungsanleitung entspricht größtenteils Android 14, außer dass das ABI-Format XML ist und Die ABI-Referenzdarstellung ist common/android/abi_gki_aarch64.xml.

Android 13 und niedriger

Wie bei Android 13 ist das ABI-Format XML.

Ältere Kernel verwenden build.sh anstelle von Kleaf. Für die ABI-Überwachung solltest du Folgendes verwenden: build_abi.sh, die dieselben Umgebungsvariablen zur Anpassung des als build.sh erstellen. Beispiel:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

Dadurch wird der Kernel erstellt und die ABI-Darstellung in die Datei OUT_DIR extrahiert. (standardmäßig out_abi) und entspricht dem //common:kernel_aarch64_abi_dist-Ziel von Kleaf (siehe Build-Kernel- und ABI-Artefakte)

Die ABI-Referenzdarstellung wird in android/abi_gki_aarch64.xml so gespeichert: definiert durch die Variable ABI_DEFINITION in common/build.config.gki.aarch64.

Wenn Sie die Kernel-ABI-Darstellung aktualisieren müssen, ist dies die einfachste Methode, um die Optionen --update und --print-report zu verwenden:

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 aus und ein neu generiertes ABI.

Die Option --update überschreibt die ABI-Referenzdarstellung. Außerdem die Aktualisierung der Symbolliste wenn BUILD_CONFIG für ein Gerät mit konfiguriertem KMI_SYMBOL_LIST verwendet wird.