Le seguenti risorse forniscono dettagli su posizioni del codice, strumenti, test e licenze.
Posizione del codice interrogabile
Il codice dell'oggetto dell'interfaccia del fornitore interrogabile va a
system/libvintf.
Strumenti
I file manifest della scrittura a mano e le matrici di compatibilità possono essere difficili da gestire. Utilizza i seguenti strumenti per generare un manifest/una matrice di compatibilità standard da cui iniziare.
LSHAL
LSHAL è uno strumento lato dispositivo che elenca tutti gli HAL registrati in
hwservicemanager e tutte le implementazioni passthrough disponibili
(ad es. android.hardware.foo@1.0-impl.so) sul dispositivo. Può anche
generare un file manifest del dispositivo in base all'elenco:
adb shell su 0 /system/bin/lshal --init-vintf
Tieni presente quanto segue:
- Se un pacchetto è registrato sia su
hwservicemanagersia trovato come HAL passthrough,<transport>è impostato suhwbinder. - Nessuna versione di SELinux è scritta nel manifest. Ti consigliamo di inserire l'elemento
tramite
assemble_vintfcome spiegato di seguito. - Il file manifest HAL generato potrebbe essere impreciso. È necessaria l'attenzione umana per correggere le incongruenze tra il manifest del dispositivo e ciò che
vendor.imgfornisce effettivamente.
ASSEMBLE_VINTF
assemble_vintf è uno strumento lato host che:
- Verifica che una matrice di compatibilità o un file manifest sia valido.
- Inserisce le variabili nei manifest/nelle matrici di compatibilità disponibili al momento della build e genera un nuovo file da installare sul dispositivo.
- Verifica la compatibilità tra il file generato e la sua versione per persone con disabilità.
- Se viene fornito un file manifest, genera facoltativamente una matrice di compatibilità standard compatibile con il file manifest.
Esempio: genera una matrice di compatibilità dei dispositivi da un file manifest del framework
assemble_vintf -m --hals-only \
-i system/libhidl/manifest.xml \
-o device/manufacturer/device_name/compatibility_matrix.xml
Tieni presente che tutti i livelli di astrazione hardware sono impostati su optional="true".
Esempio: genera una matrice di compatibilità del framework scheletro da un file manifest del dispositivo
assemble_vintf -m --hals-only \
-i device/foo/bar/manifest.xml \
-o path/to/place/output/compatibility_matrix.xml
Tieni presente che tutti i livelli di astrazione hardware sono impostati su optional="true".
Esempio: genera file XML manifest del dispositivo dalle variabili
Al momento della creazione della build, se le seguenti variabili sono
definite in 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
Vengono quindi eseguiti i seguenti comandi (nel sistema di compilazione, modificati per omettere i dettagli di implementazione) per generare i file XML del manifest del dispositivo:
# 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
In fase di runtime, l'oggetto VINTF combina i manifest del fornitore e dell'ODM come manifest del dispositivo. Per ulteriori dettagli, consulta il manifest del dispositivo.
Esempio: genera file XML della matrice di compatibilità dei dispositivi dalle variabili
Al momento della creazione della build, se le seguenti variabili sono
definite in 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
Vengono quindi eseguiti i seguenti comandi (nel sistema di compilazione, modificati per omettere i dettagli di implementazione) per generare i file XML della matrice di compatibilità dei dispositivi:
# 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
In fase di runtime, l'oggetto VINTF utilizza la matrice di compatibilità del fornitore come matrice di compatibilità del dispositivo. Per maggiori dettagli, consulta la matrice di compatibilità dei dispositivi.
Esempio: genera file XML manifest del framework dalle variabili
Le seguenti variabili possono essere definite in
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
Per generare i file XML del manifest del framework vengono eseguiti i seguenti comandi (nel sistema di compilazione, modificati per omettere i dettagli di implementazione):
# 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
In fase di runtime, l'oggetto VINTF combina il manifest di sistema, i frammenti del manifest di sistema, il manifest del prodotto e i frammenti del manifest del prodotto come manifest del framework. Per i dettagli, consulta il manifest del framework.
Esempio: genera file XML della matrice di compatibilità del framework dalle variabili
Le seguenti variabili possono essere definite in
device/manufacturer/device_name/BoardConfig.mk per definire FCM prodotto e
FCM di sistema specifico del dispositivo:
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
L'FCM system_ext deve essere installato con i moduli Soong. L'FCM del prodotto può essere installato
anche con i moduli Soong; non definire DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE se viene utilizzato
questo metodo. Inoltre, è possibile installare più versioni FCM del prodotto e versioni FCM di system_ext con i moduli Soong.
Definisci quanto segue:
-
Definisci un modulo in
device/manufacturer/device_name/Android.bp. Ad esempio (sostituisci system_ext con product per FCM prodotto):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", ], }
-
Installa il modulo in
device/manufacturer/device_name/device.mk. Ad esempio:PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml
Per generare i file XML della matrice di compatibilità del framework, vengono eseguiti i seguenti comandi (nel sistema di compilazione, modificati per omettere i dettagli di implementazione):
# 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
In fase di runtime, l'oggetto VINTF combina un sottoinsieme di matrici di compatibilità del sistema e matrici di compatibilità del prodotto come matrice di compatibilità del framework. Per maggiori dettagli, consulta la matrice di compatibilità dei framework.
Esempio: Genera il manifest del fornitore dai frammenti
È possibile raggruppare più frammenti di manifest del fornitore in fase di compilazione. Ad esempio:
<!-- 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
Poi, assemble_vintf aggiunge l'HAL IR al manifest del fornitore se
BOARD_ENABLE_IR è definito e lo omette se
BOARD_ENABLE_IR non è definito. I seguenti comandi
(modificati per omettere i dettagli di implementazione) vengono eseguiti per generare il manifest del fornitore:
# 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
Per informazioni dettagliate, vedere le sezioni:
assemble_vintf --help
Test
Il progetto platform/system/libvintf utilizza GTest per la serializzazione, la deserializzazione e il controllo di compatibilità.
Licenze
tinyxml2(external/tinyxml2) per la serializzazione/deserializzazione dell'oggetto da/a XML. Licenza simile a BSD.libselinux(external/selinux/libselinux) per ottenere la versione di policydb. Licenza di pubblico dominio.libz(external/zlib) for decompressing/proc/config.gz. Licenza simile a BSD.- Il progetto
libvintfutilizza la licenza Apache 2.0 (con i file MODULE_LICENSE_APACHE2 e NOTICE appropriati).