实现 SOME/IP 堆栈

SOME/IP 堆栈通过 Android 接口定义语言 (AIDL) 接口管理低级别 SOME/IP 传输逻辑。此堆栈会发送和接收 SOME/IP 事件和远程过程调用 (RPC)。本文档介绍了以下概念:

  • 参考实现: SDV 为 SOME/IP 堆栈提供非生产参考示例实现。

  • Binder APIISomeIpStack 接口定义了用于与 SOME/IP 堆栈实例交互的方法。

  • SELinux: 参考堆栈的示例 SELinux 配置支持 Binder 通信和精细的文件系统访问。

虽然此堆栈会读取 SOME/IP 有线格式,但它会将载荷保留为不透明的二进制 blob,并将载荷转发给 SOME/IP 代理。

SOME/IP 标准未提供堆栈或堆栈 API 层的定义。 SDV 提供了一个 AIDL API,该 API 在标准熟悉的定义中运行,并且只需少量代码即可适应现有堆栈。

借助此 API,您可以选择堆栈的不同实现,并简化堆栈与系统中其他组件的集成。

参考实现

SDV 为 SOME/IP 堆栈提供非生产参考示例实现,并且包含一个位于开源 COVESA vsomeip 库之上的精简封装容器。系统仅将参考堆栈部署到 sdv_core_cfsdv_core_arm64 目标,并且 init.rc 会在虚拟机上使用 CID=3 启动该堆栈。

on property:dev.bootcomplete=1 && property:ro.sdv.vsock_local_cid=3
    start sdv_someip_stack_agent

为 OEM 定义的堆栈定义生产部署配置。如需了解详情,请参阅将 SOME/IP 与 SDV 集成

配置

参考堆栈声明了 vSomeIP 库的配置。如需了解配置 结构的说明,请参阅 配置文件结构。作为配置的一部分,我们指定了 SOME/IP SD 参数,例如多播地址和堆栈使用的端口。

Binder API

ISomeIpStack 接口在 core_services/some_ip/aidl/google/sdv/someip 中声明。 ISomeIpStack 接口定义了用于与 SOME/IP 堆栈实例交互的方法,并为这些项提供了基本质量。

服务可用性

  • register_availability_callback 注册服务可用性更改的回调。

  • monitor_service 指示堆栈监控特定服务的 可用性。

  • unregister_availability_callback 取消注册可用性回调。

  • on_sdv_service_availability 表示 SDV 服务 可用性发生了变化。

远程过程调用 (RPC)

您可以使用以下项发送 RPC 请求:

  • rpc_transact 等待响应
  • rpc_oneway 不等待响应

对于 RPC 请求处理:

  • register_rpc_request_callback 注册传入 RPC 请求的回调。

  • unregister_rpc_request_callback 取消注册 RPC 请求回调。

事件通知

  • register_event_notification_callback 注册订阅的事件通知的回调。

  • unregister_event_notification_callback 取消注册事件通知回调。

  • on_sdv_topic_availability 表示 SDV 主题可用性发生了变化。

  • subscribe 订阅事件组中的特定事件。

  • unsubscribe 取消订阅特定事件。

  • publish 发布具有给定载荷的事件。

SELinux

device/google/sdv/sdv_core_base/sepolicy/samples/vendor/ 文件夹包含参考堆栈的示例 SELinux 配置:

  • sdv_someip_stack_default.te 定义了 sdv_someip_stack_default 类型 ,并将其映射到属性和上下文。

  • file_contexts 将二进制文件夹和数据文件夹映射到适当的上下文。

此配置支持堆栈和代理之间的 Binder 通信,从而允许访问网络质量和对设备文件系统的精细访问。