Integra el middleware escalable orientado a servicios sobre IP (SOME/IP) con el vehículo definido por software (SDV) implementando y configurando varios componentes. Cada instancia de agente requiere una implementación de pila local correspondiente. En este documento, se describe cómo hacer lo siguiente:
- Configura una implementación de un solo agente
- Implementa el agente de SOME/IP como una sola instancia o como varias.
- Implementa el agente del lenguaje de datos interactivos de servicios para vehículos (VSIDL)
- Usa Soong con
vsidl_rc_generator
Configuración de ejemplo
Los ejemplos de SDV, como los de los dispositivos Android virtuales de Cuttlefish
sdv_core_cf y el hardware sdv_core_arm64, demuestran un esquema de implementación flexible. El agente y la pila se inician en función de una propiedad del sistema de tiempo de arranque, ro.boot.sdv.someip.enable.
Puedes lograr un esquema de implementación de un solo agente configurando androidboot.sdv.someip.enable=true en solo una de las instancias de SDV que se ejecutan en el sistema.
# device/google/sdv/sdv_core_base/sdv.agents.rc
# Declare and start the SDV SOME/IP broker agent.
service sdv_someip_broker_agent /system_ext/bin/sdv_someip_broker_agent_comms
class core
disabled
user system_ext_sdv_someip
group system
on property:ro.sdv.orchestrator.state.ready=true && property:ro.boot.sdv.someip.enable=true
start sdv_someip_broker_agent
Otro ejemplo:
#device/google/sdv/sdv_core_cf/init.sdv_core_cf.rc
# Declare and start the sample SDV SOME/IP stack agent.
service sdv_someip_stack_agent /vendor/bin/sdv_someip_stack_agent
class core
disabled
user system
group system
setenv VSOMEIP_CONFIGURATION /vendor/etc/someip/vsomeip_config.json
setenv VSOMEIP_BASE_PATH /data/vendor/vsomeip/
on property:dev.bootcomplete=1 && property:ro.boot.sdv.someip.enable=true
start sdv_someip_stack_agent
Implementación de agentes
Puedes implementar el agente de SOME/IP como una sola instancia o como varias en el SDV. Puedes dividir los dominios (o las subredes) de SOME/IP en diferentes instancias independientes. Puedes hacerlo para equilibrar la carga o mejorar el aislamiento por motivos de seguridad.
Cada instancia debe procesar un conjunto disjunto de extremos de SOME/IP y SDV. No puedes usar el enrutamiento especial ni la sincronización entre agentes. Una configuración incorrecta puede generar publicaciones duplicadas o resultados incoherentes en la detección de servicios.
Proveedor de lenguaje de datos interactivos de servicios de vehículos
SOME/IP obtiene los metadatos necesarios para las traducciones del agente de VSIDL. Debes implementar el agente de VSIDL en la misma VM que el agente de SOME/IP.
Cuando se usa con la opción de variante runtime-config-prebuilts, el agente de VSIDL puede generar un archivo Android.bp. Este archivo contiene reglas prediseñadas que compilan e implementan la configuración del tiempo de ejecución pertinente.
Soong
Para ejecutar vsidl_rc_generator proporcionado por SDV, haz lo siguiente:
vsidl_rc_generator [OPTIONS] --catalog-path <CATALOG_PATH> --output-path <OUTPUT_PATH>
Debes proporcionar los siguientes argumentos:
--vsidl-path <VSIDL_PATH>--catalog-path <CATALOG_PATH>--output-path <OUTPUT_PATH>
También puedes proporcionar estos argumentos opcionales:
Opcional:
--dependency-catalog-path <DEPENDENCY_CATALOG_PATH>...Especifica los directorios de los protos dependientes fuera de
catalog_path. Para generar la API de Rust para los protos dependientes, cada directorio debe contener un archivoAndroid.bp. Este archivo debe incluir un destino de compilaciónrust_protobuf.Opcional:
--variant <VARIANT>El valor predeterminado es
RuntimeConfigy especifica el modo en el que se debe ejecutar el generador de configuración del tiempo de ejecución.RuntimeConfiggenera archivos de configuración del entorno de ejecución para SOME/IP y diagnósticos.RuntimeConfigPrebuiltsgenera archivos de compilación. Estos archivos contienen módulos prediseñados. Puedes usar estos módulos para incluir archivos generados por la varianteRuntimeConfigen otros módulos o en la imagen de la VM.Opcional:
--service-bundle-name <SERVICE_BUNDLE_NAME>Argumento para especificar el paquete de servicios en el que se aplicará el generador de configuración del tiempo de ejecución.
Opcional:
--package-name <PACKAGE_NAME>Además del argumento del nombre del paquete de servicios, usa este argumento para especificar el nombre del paquete de servicios en el que se aplicará el generador de configuración del tiempo de ejecución.
Opcional:
--filegroup <FILEGROUP>Se debe definir cuando se usa el modo
RuntimeConfigPrebuilts.