Les ressources suivantes fournissent des informations sur les emplacements du code, les outils, les tests et les licences.
Emplacement du code pouvant être interrogé
Le code de l'objet d'interface fournisseur pouvant être interrogé est dirigé vers system/libvintf
.
Outils
Il peut être difficile de rédiger manuellement des fichiers manifestes et des matrices de compatibilité. Utilisez les outils suivants pour générer un modèle de fichier manifeste/une matrice de compatibilité à partir de laquelle vous pourrez commencer.
LSHAL
LSHAL est un outil côté appareil qui liste tous les HAL enregistrés auprès de hwservicemanager
et toutes les implémentations de passthrough disponibles (par exemple, android.hardware.foo@1.0-impl.so
) sur l'appareil. Il peut également générer un fichier fichier manifeste d'appareil en fonction de la liste:
adb shell su 0 /system/bin/lshal --init-vintf
Remarques :
- Si un package est à la fois enregistré auprès de
hwservicemanager
et détecté en tant que HAL de passthrough,<transport>
est défini surhwbinder
. - Aucune version SELinux n'est écrite dans le fichier manifeste. Il est recommandé d'injecter l'élément via
assemble_vintf
, comme expliqué ci-dessous. - Le fichier manifeste HAL généré peut être inexact. Une attention humaine est requise pour corriger les incohérences entre le fichier manifeste de l'appareil et ce que
vendor.img
fournit réellement.
ASSEMBLE_VINTF
assemble_vintf
est un outil côté hôte qui:
- Vérifie si une matrice de compatibilité ou un fichier manifeste est valide.
- Injecte des variables dans les fichiers manifestes/matrices de compatibilité disponibles au moment de la compilation et génère un nouveau fichier à installer sur l'appareil.
- Vérifie la compatibilité entre le fichier généré et son double.
- Si un fichier manifeste est fourni, génère éventuellement une matrice de compatibilité standard compatible avec le fichier manifeste.
Exemple:générer une matrice de compatibilité des appareils à partir d'un fichier manifeste de framework
assemble_vintf -m --hals-only \ -i system/libhidl/manifest.xml \ -o device/manufacturer/device_name/compatibility_matrix.xml
Notez que tous les HAL sont définis sur optional="true"
.
Exemple:Générer une matrice de compatibilité du framework squelette à partir d'un fichier manifeste d'appareil
assemble_vintf -m --hals-only \ -i device/foo/bar/manifest.xml \ -o path/to/place/output/compatibility_matrix.xml
Notez que tous les HAL sont définis sur optional="true"
.
Exemple:Générer des fichiers XML de manifeste d'appareil à partir de variables
Au moment de la compilation, si les variables suivantes sont définies dans device/manufacturer/device_name/BoardConfig.mk
:
# Vendor manifest is named DEVICE_MANIFEST_FILE for legacy reasons. DEVICE_MANIFEST_FILE := \ device/manufacturer/device_name/vendor_manifest.xml ODM_MANIFEST_FILES := \ device/manufacturer/device_name/odm_manifest.xml ODM_MANIFEST_SKUS := sku1 sku2 ODM_MANIFEST_SKU1_FILES := \ device/manufacturer/device_name/odm_manifest_sku1.xml ODM_MANIFEST_SKU2_FILES := \ device/manufacturer/device_name/odm_manifest_sku2.xml
Les commandes suivantes sont ensuite exécutées (dans le système de compilation, modifié pour omettre les détails d'implémentation) afin de générer des fichiers XML de fichier manifeste de l'appareil:
# vendor manifest; only when DEVICE_MANIFEST_FILE is set BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) assemble_vintf \ $(addprefix,-i ,$(DEVICE_MANIFEST_FILE)) \ -o $(TARGET_OUT_VENDOR)/etc/vintf/manifest.xml # ODM manifests assemble_vintf \ $(addprefix,-i ,$(ODM_MANIFEST_FILES)) \ -o $(TARGET_OUT_ODM)/etc/vintf/manifest.xml # ODM manifests for each sku assemble_vintf \ $(addprefix,-i ,$(ODM_MANIFEST_SKU1_FILES)) \ -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku1.xml assemble_vintf \ $(addprefix,-i ,$(ODM_MANIFEST_SKU2_FILES)) \ -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku2.xml
Au moment de l'exécution, l'objet VINTF combine les fichiers manifestes du fournisseur et les fichiers manifestes de l'OEM en tant que fichier manifeste de l'appareil. Pour en savoir plus, consultez la section Fichier manifeste de l'appareil.
Exemple:générer des fichiers XML de matrice de compatibilité des appareils à partir de variables
Au moment de la compilation, si les variables suivantes sont définies dans device/manufacturer/device_name/BoardConfig.mk
:
# vendor compatibility matrix is named DEVICE_MATRIX_FILE for legacy reasons. DEVICE_MATRIX_FILE := \ device/manufacturer/device_name/vendor_compatibility_matrix.xml \ device/manufacturer/device_name/vendor_compatibility_matrix_additional.xml
Les commandes suivantes sont ensuite exécutées (dans le système de compilation, modifié pour omettre les détails d'implémentation) afin de générer des fichiers XML de matrice de compatibilité des appareils:
# vendor compatibility matrix; only when DEVICE_MATRIX_FILE is set assemble_vintf \ $(addprefix,-i ,$(DEVICE_MATRIX_FILE)) \ -o $(TARGET_OUT_VENDOR)/etc/vintf/compatibility_matrix.xml
Au moment de l'exécution, l'objet VINTF utilise la matrice de compatibilité des fournisseurs comme matrice de compatibilité des appareils. Pour en savoir plus, consultez la matrice de compatibilité des appareils.
Exemple:générer des fichiers XML de manifeste de framework à partir de variables
Les variables suivantes peuvent être définies dans device/manufacturer/device_name/BoardConfig.mk
:
# Device-specific system manifest is named DEVICE_FRAMEWORK_MANIFEST_FILE for legacy reasons DEVICE_FRAMEWORK_MANIFEST_FILE := \ device/manufacturer/device_name/device_system_manifest.xml # Product manifest PRODUCT_MANIFEST_FILES := \ device/manufacturer/device_name/product_manifest.xml
Les commandes suivantes sont exécutées (dans le système de compilation, modifiées pour omettre les détails d'implémentation) afin de générer des fichiers XML de fichier manifeste de framework:
# system manifest assemble_vintf \ -i system/libhidl/vintfdata/manifest.xml \ $(addprefix,-i ,$(DEVICE_FRAMEWORK_MANIFEST_FILE)) \ -o $(TARGET_OUT)/etc/vintf/manifest.xml # product manifest assemble_vintf \ $(addprefix,-i ,$(PRODUCT_MANIFEST_FILES)) \ -o $(TARGET_OUT_PRODUCT)/etc/vintf/manifest.xml
Au moment de l'exécution, l'objet VINTF combine le fichier manifeste du système, les fragments de fichier manifeste du système, le fichier manifeste du produit et les fragments de fichier manifeste du produit en tant que fichier manifeste du framework. Pour en savoir plus, consultez le fichier manifeste du framework.
Exemple:générer des fichiers XML de matrice de compatibilité de framework à partir de variables
Les variables suivantes peuvent être définies dans device/manufacturer/device_name/BoardConfig.mk
pour définir le FCM du produit et le FCM du système spécifique à l'appareil:
DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE := \ device/manufacturer/device_name/product_compatibility_matrix.xml # Device-specific system compatibility matrix is named # DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE for legacy reasons. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := \ device/manufacturer/device_name/device_system_compatibility_matrix.xml
Le FCM system_ext doit être installé avec les modules Soong. Le FCM du produit peut également être installé avec des modules Soong. Ne définissez pas DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE
si cette méthode est utilisée. De plus, plusieurs versions de FCM de produit et de FCM system_ext peuvent être installées avec des modules Soong.
Définissez les éléments suivants:
-
Définissez un module dans
device/manufacturer/device_name/Android.bp
. Par exemple (remplacez "system_ext" par "product" pour le FCM de produit):vintf_compatibility_matrix { name: "system_ext_compatibility_matrix.xml", stem: "compatibility_matrix.xml", system_ext_specific: true, // product_specific: true, // for product FCM srcs: [ "system_ext_compatibility_matrix.xml", ], }
-
Installez le module dans
device/manufacturer/device_name/device.mk
. Exemple :PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml
Les commandes suivantes sont exécutées (dans le système de compilation, modifiées pour omettre les détails d'implémentation) afin de générer des fichiers XML de matrice de compatibilité de framework:
# common system compatibility matrix for each FCM version BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) \ POLICYVERS=$(POLICYVERS) \ BOARD_AVB_VBMETA_VERSION=$(BOARD_AVB_VBMETA_VERSION) assemble_vintf \ -i hardware/interfaces/compatibility_matrices/compatibility_matrix.empty.xml $(addprefix,-i ,$(DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE)) \ -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.device.xml # framework compatibility matrixes at each FCM version assemble_vintf -i hardware/interfaces/compatibility_matrices/compatibility_matrix.{level}.xml \ -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.{level}.xml \ --kernel=... # product framework compatibility matrix; only when # DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE is set or when the Soong module for # product FCM is defined assemble_vintf -i $(DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE) -o $(TARGET_OUT_PRODUCT)/etc/vintf/compatibility_matrix.xml # system_ext framework compatibility matrix; only when the Soong module for # system_ext FCM is defined assemble_vintf -i <srcs for the soong module> -o $(TARGET_OUT_SYSTEM_EXT)/etc/vintf/compatibility_matrix.xml
Au moment de l'exécution, l'objet VINTF combine un sous-ensemble de matrices de compatibilité système et de matrices de compatibilité produit en tant que matrice de compatibilité du framework. Pour en savoir plus, consultez la matrice de compatibilité du framework.
Exemple:générer le fichier manifeste du fournisseur à partir de fragments
Plusieurs fragments de fichier manifeste du fournisseur peuvent être regroupés au moment de la compilation. Exemple :
<!-- device/manufacturer/device_name/manifest_common.xml --> <manifest version="1.0" type="device"> <!-- common HALs here --> </manifest>
<!-- device/manufacturer/device_name/ir.xml --> <manifest version="1.0" type="device"> <hal> <name>android.hardware.ir</name> <version>1.0</version> <!-- other fields --> </hal> </manifest>
# device/manufacturer/device_name/BoardConfig.mk DEVICE_MANIFEST_FILE := device/manufacturer/device_name/manifest_common.xml ifdef BOARD_ENABLE_IR DEVICE_MANIFEST_FILE += device/manufacturer/device_name/ir.xml endif
Ensuite, assemble_vintf
ajoute le HAL IR au fichier manifeste du fournisseur si BOARD_ENABLE_IR
est défini, et l'omet si BOARD_ENABLE_IR
n'est pas défini. Les commandes suivantes (modifiées pour omettre les détails d'implémentation) sont exécutées pour générer le fichier manifeste du fournisseur:
# if BOARD_ENABLE_IR is defined BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \ -i device/manufacturer/device_name/manifest_common.xml:device/manufacturer/device_name/ir.xml \ -o $(TARGET_OUT_VENDOR)/manifest.xml # if BOARD_ENABLE_IR is not defined BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \ -i device/manufacturer/device_name/manifest_common.xml \ -o $(TARGET_OUT_VENDOR)/manifest.xml
Pour plus d'informations, reportez-vous aux rubriques suivantes :
assemble_vintf --help
Tests
Le projet platform/system/libvintf
utilise GTest pour la sérialisation, la désérialisation et la vérification de la compatibilité.
Licences
tinyxml2
(externe/tinyxml2) pour sérialiser/désérialiser l'objet au format XML. Licence semblable à la licence BSD.libselinux
(external/selinux/libselinux) pour obtenir la version de policydb. Licence de domaine public.libz
(externe/zlib) pour décompresser/proc/config.gz
. Licence semblable à la licence BSD.- Le projet
libvintf
utilise la licence Apache 2.0 (avec les fichiers MODULE_LICENSE_APACHE2 et NOTICE appropriés).