译:SOME/IP 技术细节

2023-05-16

译:SOME/IP 技术细节

原文: SOME/IP technical details


SOME/IP, Scalable service-Oriented MiddlewarE over IP (基于 IP 可扩展面向服务中间件)

概述

SOME/IP 是一种可用于“控制消息”的汽车中间件解决方案。它从一开始就被设计为完美地适合不同大小和不同操作系统的设备,包括小型设备如摄像机、AUTOSAR 设备,上至头部单元或远程信息处理设备,SOME/IP 还确保支持信息娱乐域的功能以及汽车中其他域的功能,允许 SOME/IP 用于大多数替换场景以及更传统的 CAN 场景。

SOME/IP 支持广泛的中间件功能:

  • Serialization —— 序列化与反序列化。
  • Remote Procedure Call (RPC) and Messaging —— 实现对函数以及其他消息的远程调用。
  • Service Discovery (SD) —— 服务发现,动态查找并配置其访问。
  • Publish/Subscribe (Pub/Sub) —— 发布与订阅,动态配置哪些数据是需要的以及应该发送给客户端的。
  • Segmentation of UDP messages —— UDP 消息分包,允许通过 UDP 传输 SOME/IP 大型消息而无需分段。

序列化

SOME/IP 序列化被设计为高效,比如它使用最小的 RAM 和 CPU 资源。这是通过使用二进制和非描述性格式实现的,基本上,所有的数据都写在彼此后面,消息的格式与消息的内存表示(打包结构)非常相似,或者在许多情况下完全相同。

SOME/IP 可以序列化以下基本数据类型(默认情况下,数据类型以网络字节序/大端序编码,但也可以以小端序编码):

  • boolean: 8 位字段编码 False(0) 或 True(1),不允许使用其他值。
  • uint8: 8 位大小的无符号整数。
  • uint16: 16 位大小的无符号整数。
  • uint32: 32 位大小的无符号整数。
  • uint64: 64 位大小的无符号整数。
  • sint8: 8 位大小的有符号整数。
  • sint16: 16 位大小的有符号整数。
  • sint32: 32 位大小的有符号整数。
  • sint64: 64 位大小的有符号整数。
  • float32: 32 位大小的浮点数字。
  • float64: 64 位大小的浮点数字。

SOME/IP 可以序列化以下复杂数据类型:

  • struct: 组合预定义参数列表的参数。一个结构体可以从一个可选的长度字段开始,计算长度字段后面结构的所有字节。
  • string: 固定长度或动态长度字符串传输 ascii, UTF-8 或者 UTF-16 字符,对于动态长度字符串,字符串以一个大端序编码的长度字段开始,该字段计算字符串所使用的字节数。
  • array: 包含相同数据类型的重复的数据。这可以是参数的预定义数量或动态数量,对于具有动态长度的数组则使用长度字段。
  • enumeration: 具有命名不同值选项的 uint。
  • bitfield: 8、16 或 32 位参数,每个位表示布尔值。每个布尔值可以有一个名称以及每个值的真值和假值的名称。
  • union: 可以携带预定义参数类型的参数的参数,该参数在运行时确定,序列化使用长度字段、类型字段和参数的数据。

长度和类型字段的大小为 32 位(默认值),可以配置为 0、8、16 或 32 位,所有长度和类型字段都以网络字节序/大端序编码。

远程过程调用和消息传递

SOME/IP 服务支持以下消息:

  • Request/Response Methods: 从客户端发送到服务器的请求 (Request) 和从服务器发送回客户的响应 (Response)。此外,SOME/IP 允许将错误响应从服务器发送回客户端,而不是常规响应,此功能可用于在错误情况下实现不同的 payload 格式。
  • Fire and Forget Methods: 从客户端向服务器发送请求。
  • Event: 事件 (Event) 从服务器发送到相关客户端,通过 SOME/IP-SD 确认哪个客户端需要此事件。
  • Field: 字段 (Field) 可以有一个可选的通知器 notifier(事件循环发送或更改时发送),一个可选的 setter(更新字段的请求/响应方法)和一个可选的 getter(读取字段当前值的请求/应答方法)。

SOME/IP 序列化的专有扩展

SOME/IP 已经在消息的序列化中支持了很多灵活性,比如延后向消息或者结构体内部添加参数。

在后面的 AUTOSAR 版本中,SOME/IP 添加了专有扩展(最初错误地称为 TLV 扩展)以支持更多的灵活性,基本上,参数和/或结构成员可以以数据 ID 和长度指示作为前缀。虽然这使序列化效率大大降低,但它增加了灵活性,如从消息中删除参数或稍后重新排序参数。要使用此功能,API 和应用程序也需要支持此功能。

由于灵活性有限和高开销,这种扩展目前没有广泛使用。

请记住,并非所有的 SOME/IP 实现都支持此扩展,因为它不是原始 SOME/IP 的一部分。

AUTOSAR 支持

SOME/IP 是唯一已知的设计用于集成到 AUTOSAR 4.x 版本中的中间件:

  • AUTOSAR 4.0 —— 已经存在对 SOME/IP 消息的基本支持。
  • AUTOSAR 4.1 —— 添加了对 SOME/IP-SD 和发布/订阅的支持。
  • AUTOSAR 4.2 —— 添加了序列化转换器以及其他优化。
  • AUTOSAR 4.3 —— 修复了一些转换器错误,使用 SOME/IP-TP 添加了对大型 UDP 消息的支持,以及进行了 SOME/IP-SD 优化。

有关 AUTOSAR 规范,请参阅标准。

参考

http://www.some-ip.com
http://www.some-ip.com/details.shtml
http://www.some-ip.com/standards.shtml

欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景


▽ \bigtriangledown 译:vsomeip 10 分钟阅读

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

译:SOME/IP 技术细节 的相关文章

随机推荐

  • polybar基础使用

    如果不喜欢i3或者其他桌面系统的默认状态栏 xff0c polybar还是一个不错的选择 基本上 xff0c 所有的流行的Linux发行版都可以用包管理器直接进行polybar的安装 ArchLinux可以使用yay或者其他AUR工具安装
  • ArchLinux图形界面安装与美化:i3+polybar

    arch只提供了tty xff0c 我们需要自己配置一个漂亮的桌面 你可以选择继承好的GNOME Deepin等桌面 但是他们都包含了许多你可能并不能用到的工具和插件 i3wm是一个窗口管理器 xff0c 它提供了最基础的窗口管理功能 你可
  • ceph学习(1)——手动部署ceph分布式存储集群(使用本地源离线安装),一次成功!!

    手动搭建适合已经使用自动部署工具成功搭建了集群 xff0c 想加深对ceph理解的同学 xff0c 手动搭建ceph可以更灵活的配置ceph集群 xff0c 现在就开始吧 xff01 xff01 一 环境准备 1 服务器配置 xff1a 三
  • iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上

    span class hljs pp span class hljs params style color rgb 102 0 102 void span touchesBegan span class hljs params style
  • SQL Server解析Json格式数据

    主要介绍5个函数 xff1a openJson 打开Json字符串IsJson 判断一个字符串是不是合法的Json格式 是返回1 xff0c 否返回0 xff0c null返回null Json Value 从Json字符串中提取值 Jso
  • openwrt 无线桥接(AP)

    无线桥接常见的有三种模式 1 AP模式 AP模式其实是Access Point的简称 xff0c 意思是 xff1a 访问接入点 而无线网桥的AP模式 xff0c 也就是利用无线网桥做无线信号的接入点了 那么 xff0c 究竟是什么东西接入
  • macOS下使用anaconda相关系列

    创建虚拟环境 conda create n 环境名 python 61 3 6 进入虚拟环境 source bash profile source activate 环境名 其中bash profile是安装anaconda时候默认生成的环
  • Windows 安装NET4.6/4.7/4.8 时间戳签名和或证书无法验证或已损坏

    时间戳签名和或证书无法验证或已损坏 问题版本 xff1a 事件 xff1a 解决办法下载补丁程序 xff1a 安装KB2813430补丁 注意事项补丁需要重启设备生效 2021 10 11 by 崔斐然 问题 版本 xff1a win7专业
  • 在 Ubuntu Linux 中使用 PPA(完全指南)

    译 xff1a 在 Ubuntu Linux 中使用 PPA xff08 完全指南 xff09 作者 xff1a Abhishek Prakash 自由和开放源码软件的创造者 一个热心的 Linux 用户和开源推动者 从阿加莎 克里斯蒂和夏
  • RDP(远程桌面)优化

    RDP连接优化 一 优化连接时间二 优化集显帧率三 开启RemoteFX USB重定向 xff08 如果有需要 xff09 四 MacOS系统RDP超高清显示 2022 03 31 by 崔斐然 一 优化连接时间 1 客户端 xff1a 关
  • 【FRP】windowsServer部署FRP

    FRP windowsServer部署FRP 1 下载FRP nssm2 服务器端部署过程 xff1a 3 客户端部署过程 xff1a 4 卸载服务 2022 08 24 by 崔斐然 1 下载FRP nssm 下载地址 xff1a FRP
  • 【FRP】群晖docker中部署Frp

    2022 08 24 by 崔斐然 0 xff1a 需求 公司有台笔记本 xff0c 现在疫情期间居家办公 我用的MacBook RDP客户端做的非常好用 xff0c 如相互粘贴文件 文字等 xff0c MacBook通过远程桌面连接公司内
  • Debian 9/10快速开启Google BBR的方法,实现TCP高效单边加速

    BBR 是谷歌公司的某个员工研发出来的服务器单边加速算法 xff0c Linux内核从4 9版开始集成BBR算法 相比锐速BBR的加速效果更为温和 xff0c 并且占用内存小对服务器压力也很小 xff0c 当时理想情况下是可以跑满整个服务器
  • 基于机器学习的捡球机器人设计与实现(探索)第4篇——机械设计)

    2019 03 18 by 崔斐然 原以为软件很复杂 机械好搞 结果发现 都难搞 一次次想出办法又一次次被自己否定 我tm想静静
  • 人脸识别之Hog特征+SVM分类器训练与使用

    原文来自 xff1a https juejin im post 5b0e70686fb9a00a1451c8e7 计算机视觉 人脸识别 xff08 Hog特征 43 SVM分类器 xff09 一 SVM支持向量机 1 SVM原理 在机器学习
  • python利用PIL实现对图片截图

    在对图像处理时 xff0c 我们有时候需要对图片某区域进行截图 xff0c 话不多说 xff0c 直接上代码 xff1a from PIL import Image import sys 先将 input image 填充为正方形 def
  • PowerMock介绍和用法

    PowerMock PowerMock简介一 PowerMock xff1f 二 Mock底层原理1 Mockito2 PowerMock原理 三 应用场景1 依赖问题 xff0c 打桩 2 工程质量 PowerMock使用步骤一 添加依赖
  • Windows10 WSL2磁盘迁移

    一 使用 WSL 命令行工具 在 Windows 10 版本 1903 xff08 2019 年 4 月更新 xff09 或更高版本中 xff0c 您可以使用wsl exe命令行工具 1 导出分布 使用要移动的分发创建一个 tar文件wsl
  • linux下搭建confluence

    一 Java环境 java环境 二 mysql 2 1 安装前的检查和准备工作 2 1 1检查 1 是否安装过mysql xff1a rpm qa grep mysql 2 如果有的话 xff0c 就删除 xff08 XXXX是自己的mys
  • 译:SOME/IP 技术细节

    译 xff1a SOME IP 技术细节 原文 SOME IP technical details SOME IP Scalable service Oriented MiddlewarE over IP 基于 IP 可扩展面向服务中间件