Um die Oberfläche von Symbolen und Typen zu reduzieren, die stabil gehalten werden müssen,
kann der GKI-Kernel die exportierten Symbole auf diejenigen beschränken, die
werden von Modulen benötigt. Für extern kompilierte Module benötigen Sie eine Liste
verwendet, damit sie vom GKI-Kernel exportiert werden können. Beispiel:
Symbole, die von Modulen für
Tintenfische werden gespeichert
in
android/abi_gki_aarch64_virtual_device
Ziel für das Generieren der Symbolliste hinzufügen
Symbollisten werden vom Ziel kernel_abi
generiert. Fügen Sie dieses Ziel der
Gerät BUILD.bazel
mit den folgenden Optionen:
name
Muss das Format
<kernel_build>_abi
haben.kernel_build
Sollte den Namen des
kernel_build
-Ziels des Geräts enthalten.
Sie können auch die folgenden Optionen verwenden:
kernel_modules
Liste der Ziele für out-of-tree-Module. Integrierte Module dürfen nicht hier angegeben werden. Weitere Informationen finden Sie unter Integrierte Module für die Symbolextraktion vorbereiten
kmi_symbol_list_add_only
Mit dieser Option wird verhindert, dass nicht verwendete Symbole entfernt werden. Das Entfernen von Symbolen Zu bestimmten Zeiten während KMI zugelassen Stabilisierung und ist nicht mehr zulässig, sobald die KMI gefroren.
Dies ist auch nützlich, wenn Sie dieselbe Symbolliste für mehrere verschiedene Geräte. Auf diese Weise werden keine Symbole entfernt, die von Gerät A, aber nicht von Gerät B verwendet werden.
module_grouping
Wenn
True
oder nicht angegeben ist, gruppiert die Symbolliste Symbole anhand des Kernelmodule, die auf das Symbol verweisen. Andernfalls ist die Symbolliste eine sortierte Liste von Symbolen, die von allen Kernelmodulen verwendet werden.
Weitere Informationen finden Sie unter common-modules/virtual-device/BUILD.bazel Beispiel:
kernel_abi(
name = "virtual_device_aarch64_abi",
kernel_build = ":virtual_device_aarch64",
kernel_modules = [
":virtual_device_aarch64_external_modules",
],
kmi_symbol_list_add_only = True,
)
Siehe auch
Referenzdokumentation
für das Ziel kernel_abi
in Kleaf.
Integrierte Module für die Symbolextraktion vorbereiten
Um integrierte Module für die Symbolextraktion vorzubereiten, listen Sie anbieterspezifische integrierte Module auf
Module in einem module_outs
-Attribut des Ziels kernel_build
. Weitere Informationen finden Sie unter
_VIRT_COMMON_MODULES
und
seine Nutzung
finden Sie ein Beispiel. Nehmen Sie keine GKI-Module in diese Liste auf.
Konfigurieren Sie diese Module so, unsigniert, Andernfalls ist die Symbolliste möglicherweise leer. Fügen Sie dazu diese Zeile in Ihren Kernel ein Konfigurationsfragmente:
# CONFIG_MODULE_SIG_ALL is not set
Weitere Informationen finden Sie unter common-modules/virtual-device/virtual_device_core.fragment .
Dem Geräte-Kernel-Build eine Liste mit Gerätesymbolen hinzufügen
Attribut kmi_symbol_list
zum Ziel kernel_build
hinzufügen, das in der
Gerät BUILD.bazel
. Der Name der Symbolliste muss folgendes Format haben:
//common:android/abi_gki_<arch>_<device>
Weitere Informationen finden Sie unter
common-modules/virtual-device/BUILD.bazel.
Beispiel:
kernel_build(
name = "virtual_device_aarch64",
base_kernel = "//common:kernel_aarch64",
kmi_symbol_list = "//common:android/abi_gki_aarch64_virtual_device",
...
module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)
Eine anfängliche Symbolliste erstellen und einreichen
Erstellen Sie unter common/android/abi_gki_<arch>_<device>
eine leere Symbolliste. Für die
Der Befehl oben wäre:
touch common/android/abi_gki_aarch64_virtual_device
Fügen Sie diese Datei additional_kmi_symbol_lists
des GKI-Kernel-Builds hinzu. Für
Beispiel: //common:android/abi_gki_aarch64_virtual_device
wird dem
aarch64_additional_kmi_symbol_lists
Dateigruppe, deklariert in
common/build.bazel
Aktualisieren Sie die Liste der Gerätesymbole, um die neue Symbolliste und an das Android Common Kernel-Repository senden.
Liste der Gerätesymbole aktualisieren
Alle Kern-Kernel-Symbole, die von Modulen in module_outs
von kernel_build
und
kernel_modules
von kernel_abi
sollte in der Symbolliste enthalten sein. Dies kann
indem Sie das kernel_abi
-Ziel mit der _update_symbol_list
. Mit dem folgenden Befehl wird beispielsweise die Symbolliste für
//common-modules/virtual-device:virtual_device_aarch64
:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list
Aktualisierung der Symbolliste an ACK senden
Sende einen Patch mit der Änderung der Symbolliste an den Android-Allgemein Kern um die neuen Symbole zum Teil des KMI zu machen.
Die Commit-Nachricht sollte eine Liste der hinzugefügten oder entfernten Symbole enthalten. Sie können
Schreiben Sie diese Liste manuell, um eine kleine Symbolliste zu aktualisieren, oder verwenden Sie
$DIST_DIR/abi.report.short
Bericht danach
Aktualisieren der Referenz-ABI
Darstellung.
Beim Aktualisieren der Referenz-ABI Darstellung bevor eine Aktualisierung der Symbolliste gesendet werden muss, können zusätzliche die Schritte vorab einzureichen, damit die Änderungen schneller zur Verfügung stehen. Auf jeden Fall überprüft und gegebenenfalls aktualisiert werden.
Ältere Versionen (Android 12 und niedriger)
Verwenden Sie das build_abi.sh
-Tool so:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list
In diesem Beispiel muss build.config.device
die folgenden Konfigurationsoptionen enthalten:
vmlinux
Muss in der
FILES
-Liste enthalten sein. Dies kann erreicht werden, indembuild.config.aarch64
KMI_SYMBOL_LIST
Muss festgelegt werden und zum Aktualisieren auf die KMI-Symbolliste zeigen.
Nach der Aktualisierung der Liste der Gerätesymbole musst du diese Änderungen auch in den
der GKI-Build (common/build.config.gki.aarch64
):
Kopieren Sie die aktualisierte Symbolliste nach
common/android/abi_gki_aarch64_<device>
.Prüfen, ob
android/abi_gki_aarch64_<device>
enthalten ist inADDITIONAL_KMI_SYMBOL_LISTS
incommon/build.config.gki.aarch64
.