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 可让您选择堆栈的不同实现,并简化堆栈与系统中其他组件的集成。
参考实现
SDV 为 SOME/IP 堆栈提供了一个非生产参考示例实现,并包含一个位于开源 COVESA vsomeip 库之上的精简封装容器。系统仅将参考堆栈部署到 sdv_core_cf 和 sdv_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 通信,从而允许访问网络质量和精细访问设备的文件系统。