SOME/IP 堆栈通过 Android 接口定义语言 (AIDL) 接口管理低级别 SOME/IP 传输逻辑。此堆栈会发送和接收 SOME/IP 事件和远程过程调用 (RPC)。本文档介绍了以下概念:
参考实现: SDV 为 SOME/IP 堆栈提供非生产参考示例实现。
Binder API:
ISomeIpStack接口定义了用于与 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_cf 和 sdv_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 通信,从而允许访问网络质量和对设备文件系统的精细访问。