Auf dieser Seite wird beschrieben, wie Sie ABI-Darstellungen des Android-Kernels erstellen und das ABI-Monitoring ausführen. Sie gilt für Android 16 und höher. Informationen zu niedrigeren Versionen finden Sie unter ABI-Monitor für frühere Kernelversionen.
Sehen Sie sich auch die Referenzdokumentation für Kleaf an: ABI-Monitoring unterstützen (GKI) und ABI-Monitoring unterstützen (Gerät).
Kernel und zugehörige ABI-Darstellung erstellen
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
Mit diesem Befehl wird die aktuelle ABI-Darstellung erstellt und zusammen mit dem erstellten Kernel und den Modulen nach $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 die ABI-Tools 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 --destdir
verwenden:
tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=out/dist
ABI-Unterschiede zwischen dem Build und einer Referenzdarstellung analysieren
Das //common:kernel_aarch64_abi_dist
-Ziel, das im vorherigen Befehl ausgeführt wird, analysiert und meldet alle ABI-Unterschiede, die zwischen dem Build und der Referenzdarstellung unter common/gki/aarch64/abi.stg
(definiert in BUILD.bazel
) gefunden wurden. 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
. Dort finden Sie auch Berichte in anderen Formaten.
Bei der Automatisierung sollte der Exit-Code des Build-Befehls verwendet werden. Dieser ist ungleich null, wenn Unterschiede gefunden werden.
Entwicklungsphasen-Branches, einschließlich android-mainline
, haben keine Referenz-ABI-Darstellung.
Andernfalls werden in //common:kernel_aarch64_abi_dist
keine Unterschiede erkannt.
Referenz-ABI-Darstellung aktualisieren
Jede Änderung, die sich auf die Kernel-ABI auswirkt, z. B. eine Aktualisierung der Symbolliste, muss 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
Dieser Befehl führt alle Schritte unter 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. 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 die Build-Ziele des Core-Kernels konfiguriert werden. Gemischte Build-Konfigurationen (mit der Definition von base_kernel
), die direkt mit dem GKI-Kernel kompiliert werden, müssen nur Unterstützung für die Erfassung der Gerätesymbolliste hinzufügen.
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-Monitor für frühere Kernelversionen (Android 15 und niedriger)
Bei früheren Kernelversionen unterscheiden sich die Anleitungen für ABI-Builds und ‑Monitoring wie folgt.
Android 15 und 14
Die Anleitung ist größtenteils dieselbe wie für Android 16, mit der Ausnahme, dass die Referenz-ABI-Darstellung common/android/abi_gki_aarch64.stg
und $DIST_DIR
standardmäßig auf out_abi/kernel_aarch64/dist
festgelegt ist.
Android 13
Android 13 kann entweder mit Kleaf oder mit Legacy-Build-Skripts erstellt werden.
Für Kleaf sind die Anweisungen dieselben 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-Skripts sind die Anweisungen dieselben 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
Diese Kernel verwenden build.sh
anstelle von Kleaf. Für die ABI-Überwachung sollten Sie build_abi.sh
verwenden. Diese Funktion akzeptiert dieselben Umgebungsvariablen zum Anpassen des Builds wie build.sh
. 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 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 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 Datei, wie sie vorhanden ist, und einem 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 KMI_SYMBOL_LIST
konfiguriert ist.