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.