通过部署和配置多个组件,将可扩缩的面向服务的中间件 over IP (SOME/IP) 与 软件定义车辆 (SDV) 集成。 每个代理实例都需要相应的本地堆栈实现。本文档介绍了如何:
- 配置单个代理部署
- 将 SOME/IP 代理部署为单个或多个实例
- 部署车辆服务交互式数据语言 (VSIDL) 代理
- 将 Soong 与
vsidl_rc_generator搭配使用
配置示例
SDV 示例(例如 Cuttlefish 虚拟 Android 设备
sdv_core_cf 和硬件 sdv_core_arm64 的示例)展示了灵活的部署
架构。代理和堆栈各自基于启动时间系统属性 ro.boot.sdv.someip.enable 启动。
您只需在系统上运行的其中一个 SDV 实例上设置 androidboot.sdv.someip.enable=true,即可实现单个代理部署架构。
# 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
我们再看看另一个示例:
#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
代理部署
您可以在 SDV 中将 SOME/IP 代理部署为单个或多个实例。 您可以将 SOME/IP 网域(或子网)拆分为不同的独立实例。 您可以这样做,以平衡负载或出于安全目的提高隔离性。
每个实例都必须处理一组不相交的 SOME/IP 和 SDV 端点。您无法使用特殊路由或跨代理同步。配置不当可能会导致重复发布或服务发现结果不一致。
车辆服务交互式数据语言提供程序
SOME/IP 从 VSIDL 代理获取翻译所需的元数据。您必须将 VSIDL 代理部署到与 SOME/IP 代理相同的虚拟机。
与 runtime-config-prebuilts 变体选项搭配使用时,VSIDL 代理可以生成 Android.bp 文件。此文件包含用于构建和部署相关运行时配置的预构建规则。
Soong
如需运行 SDV 提供的 vsidl_rc_generator,请执行以下操作:
vsidl_rc_generator [OPTIONS] --catalog-path <CATALOG_PATH> --output-path <OUTPUT_PATH>
您必须提供以下实参:
--vsidl-path <VSIDL_PATH>--catalog-path <CATALOG_PATH>--output-path <OUTPUT_PATH>
您还可以提供以下可选实参:
可选:
--dependency-catalog-path <DEPENDENCY_CATALOG_PATH>...指定
catalog_path之外的依赖项 proto 的目录。如需为依赖项 proto 生成 Rust API,每个目录都必须包含Android.bp文件。此文件必须包含rust_protobuf构建目标。可选:
--variant <VARIANT>默认为
RuntimeConfig,并指定运行时配置生成器必须运行的模式。RuntimeConfig为 SOME/IP 和诊断生成运行时配置文件。RuntimeConfigPrebuilts生成构建文件。这些文件包含预构建模块。您可以使用这些模块将RuntimeConfig变体生成的文件包含在其他模块或虚拟机映像中。可选:
--service-bundle-name <SERVICE_BUNDLE_NAME>用于指定要对其应用运行时配置生成器的服务软件包的实参。
可选:
--package-name <PACKAGE_NAME>除了服务软件包名称实参之外,您还可以使用此实参指定要对其应用运行时配置生成器的服务软件包软件包名称。
可选:
--filegroup <FILEGROUP>使用
RuntimeConfigPrebuilts模式时必须定义。