So führen Sie die ABI-Überwachung aus

In diesem Abschnitt wird beschrieben, wie Sie Android-Kernel-ABI-Darstellungen erstellen und die ABI-Überwachung ausführen. Es gilt für Android 14 und höher. Informationen zu älteren Versionen finden Sie unter Ältere Kernel-Versionen .

Sehen Sie sich auch die Referenzdokumentation für Kleaf an: Support ABI-Überwachung (GKI) und Support ABI-Überwachung (Gerät) .

Erstellen Sie den Kernel und seine ABI-Darstellung

Führen Sie nach dem Herunterladen der GKI-Quellen 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 zusammen mit dem erstellten Kernel und den Modulen nach out_abi/kernel_aarch64/dist/abi.stg .

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

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

Analysieren Sie die ABI-Unterschiede zwischen dem Build und einer Referenzdarstellung

Das Ziel //common:kernel_aarch64_abi_dist , das im obigen Befehl ausgeführt wird, analysiert und meldet alle ABI-Unterschiede, die zwischen der Build- und Referenzdarstellung unter common/android/abi_gki_aarch64.stg (definiert in BUILD.bazel ) gefunden wurden. Diese Unterschiede werden am Ende des Builds ausgedruckt, 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 zusammen mit Berichten in anderen Formaten.

Die Automatisierung sollte den Exit-Code des Build-Befehls verwenden, der ungleich Null ist, wenn Unterschiede gefunden werden.

Bitte beachten Sie, dass Entwicklungsphasenzweige , einschließlich android-mainline , keine Referenz-ABI-Darstellung haben. Ohne sie erkennt //common:kernel_aarch64_abi_dist keine Unterschiede.

Aktualisieren Sie die Referenz-ABI-Darstellung

Jede Änderung, die sich auf die Kernel-ABI auswirkt, wie z. B. eine Aktualisierung der Symbolliste , muss in der Referenz-ABI-Darstellung 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 ABI-Unterschiede analysieren aus und aktualisiert zusätzlich die Referenzdarstellung in den Quellen. Das aktualisierte ABI kann dann im selben Commit wie die Änderung hochgeladen werden. Bitte fügen Sie die ABI-Unterschiede zum Bericht in $DIST_DIR/abi.report.short in die Commit-Nachricht ein.

ABI-Überwachung und Geräteziele

Die ABI-Überwachung muss nur für Kernel-Build-Ziele konfiguriert werden. Gemischte Build-Konfigurationen (solche, die base_kernel definieren), die direkt mit dem GKI-Kernel kompiliert werden , müssen lediglich Unterstützung für die Verfolgung der Gerätesymbolliste hinzufügen . Die ABI-Definition sollte mithilfe des GKI-Builds aktualisiert werden.

Siehe auch Referenzdokumentation für Kleaf: Support ABI-Überwachung (Gerät) .

Ältere Kernel-Versionen

Android 13

Die Build-Anweisungen sind größtenteils dieselben wie bei Android 14, außer dass das ABI-Format XML ist und die Referenz-ABI-Darstellung common/android/abi_gki_aarch64.xml ist.

Android 12 und niedriger

Wie in Android 13 ist das ABI-Format XML.

Ältere Kernel verwenden build.sh anstelle von Kleaf. Für die ABI-Überwachung sollten Sie build_abi.sh verwenden, das dieselben Umgebungsvariablen zum Anpassen des Builds akzeptiert wie build.sh . Zum 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 und entspricht dem Ziel //common:kernel_aarch64_abi_dist von Kleaf (siehe Kernel und ABI-Artefakte erstellen ).

Die Referenz-ABI-Darstellung wird in android/abi_gki_aarch64.xml gespeichert, wie durch die Variable ABI_DEFINITION in common/build.config.gki.aarch64 definiert.

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

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

Der --print-report druckt die ABI-Unterschiede zwischen der vorhandenen Datei und einem neu generierten ABI.

Die Option --update überschreibt die Referenz-ABI-Darstellung. Außerdem wird die Symbolliste aktualisiert , wenn BUILD_CONFIG für ein Gerät verwendet wird, für das KMI_SYMBOL_LIST konfiguriert ist.