实现 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 可让您选择堆栈的不同实现,并简化堆栈与系统中其他组件的集成。

参考实现

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

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 通信,从而允许访问网络质量和精细访问设备的文件系统。