Pour réduire la surface des symboles et des types qui doivent rester stables,
le noyau GKI dispose de capacités permettant de limiter les symboles exportés à ceux
nécessaires aux modules. Pour les modules compilés en externe, vous devez disposer d'une liste
de symboles utilisés pour permettre leur
exportation par le noyau GKI. Par exemple :
utilisés par les modules pour
Les seiches sont stockées
dans
android/abi_gki_aarch64_virtual_device
Ajouter une cible pour la génération de la liste de symboles
Les listes de symboles sont générées par la cible kernel_abi
. Ajoutez cette cible à la campagne
appareil BUILD.bazel
avec les options suivantes:
name
Doit être au format
<kernel_build>_abi
.kernel_build
Doit contenir le nom de la cible
kernel_build
de l'appareil.
Vous pouvez également utiliser les options suivantes:
kernel_modules
Liste des cibles pour les modules out-of-tree. Les modules in-tree ne doivent pas être inclus ici. Consultez Préparer des modules "in-tree" pour l'extraction de symboles
kmi_symbol_list_add_only
Cette option empêche la suppression des symboles inutilisés. La suppression de symboles n'est autorisée à des moments spécifiques du KMI stabilisation et n'est pas autorisé une fois que le KMI est figée.
Cela s'avère également utile lorsque vous utilisez la même liste de symboles pour différentes appareils. Ainsi, les symboles utilisés par l'appareil A, mais pas par l'appareil B seront conservés.
module_grouping
Si la valeur est
True
ou non spécifiée, la liste de symboles regroupe les symboles en fonction du les modules du noyau qui référencent le symbole. Sinon, la liste de symboles est une liste triée des symboles utilisés par tous les modules du noyau.
Voir common-modules/virtual-device/Build.bazel Par exemple:
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,
)
Voir aussi
documentation de référence
sur la cible kernel_abi
dans Kleaf.
Préparer des modules "in-tree" pour l'extraction de symboles
Pour préparer les modules "in-tree" à l'extraction de symboles, listez l'élément "in-tree" spécifique au fournisseur
modules dans un attribut module_outs
de la cible kernel_build
. Voir
_VIRT_COMMON_MODULES
et
son utilisation
à titre d'exemple. N'incluez pas de modules GKI dans cette liste.
Configurez ces modules pour qu'ils soient unsigned [non signé], sinon la liste de symboles risque d'être vide. Pour ce faire, ajoutez cette ligne à votre noyau fragments de configuration:
# CONFIG_MODULE_SIG_ALL is not set
Voir common-modules/virtual-device/virtual_device_core.fragment par exemple.
Ajouter une liste de symboles d'appareils au build du noyau de l'appareil
Ajoutez l'attribut kmi_symbol_list
à la cible kernel_build
définie dans
appareil BUILD.bazel
. Le nom de la liste de symboles doit être au format suivant :
//common:android/abi_gki_<arch>_<device>
Voir
common-modules/virtual-device/Build.bazel
Par exemple:
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,
)
Créer et envoyer une liste de symboles initiale
Créez une liste de symboles vide dans common/android/abi_gki_<arch>_<device>
. Pour le
l'exemple ci-dessus, la commande serait:
touch common/android/abi_gki_aarch64_virtual_device
Ajoutez ce fichier à additional_kmi_symbol_lists
du build de base du noyau GKI. Pour
Par exemple, //common:android/abi_gki_aarch64_virtual_device
est ajouté au
aarch64_additional_kmi_symbol_lists
, déclaré dans
common/Build.bazel.
Mettez à jour la liste des symboles de l'appareil pour qu'elle contienne la nouvelle liste. et l'envoyer au référentiel Common Kernel d'Android.
Mettre à jour une liste de symboles d'appareils
Tous les symboles de noyau de noyau utilisés par les modules dans module_outs
de kernel_build
et
kernel_modules
de kernel_abi
doit être inclus dans la liste de symboles. Cela peut
en exécutant la cible kernel_abi
avec _update_symbol_list
. Par exemple, la commande suivante met à jour la liste de symboles pour
//common-modules/virtual-device:virtual_device_aarch64
:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list
Envoyer une mise à jour de la liste de symboles à ACK
Envoyez un correctif contenant la modification de la liste de symboles au Android Common Noyau pour intégrer les nouveaux symboles au KMI.
Le message de commit doit inclure une liste de symboles ajoutés ou supprimés. Vous pouvez
vous pouvez soit écrire cette liste manuellement pour une petite mise à jour de la liste, soit utiliser
$DIST_DIR/abi.report.short
rapport après
Mettre à jour l'ABI de référence
représentation.
Pendant la mise à jour de l'ABI de référence représentation avant d'envoyer une mise à jour de la liste de symboles n'est pas requise, cela peut éliminer avant de soumettre la modification et de l’envoyer plus rapidement. Dans tous les cas, il s'agit vérifiées et mises à jour si nécessaire lors du pré-envoi.
Anciennes versions (Android 12 et versions antérieures)
Utilisez l'outil build_abi.sh
comme suit:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list
Dans cet exemple, build.config.device
doit inclure les options de configuration suivantes:
vmlinux
Doit faire partie de la liste
FILES
. Pour ce faire, vous pouvez inclurebuild.config.aarch64
KMI_SYMBOL_LIST
Doit être défini et orienté vers la liste de symboles KMI pour la mise à jour.
Après avoir mis à jour la liste des symboles d'appareils, vous devez également répercuter ces modifications dans
le build GKI (common/build.config.gki.aarch64
):
Copiez la liste de symboles mise à jour dans
common/android/abi_gki_aarch64_<device>
.Vérifiez que
android/abi_gki_aarch64_<device>
est inclus dansADDITIONAL_KMI_SYMBOL_LISTS
danscommon/build.config.gki.aarch64
.