AAOS 软件定义型车辆 (SDV) 平台定义了用于报告来自电子控制单元 (ECU) 的时间源的标准机制,以及用于在 SDV 实例中公开时间信息的标准界面。本页详细介绍了 SDV 标准并提供了相关指导。
时钟架构
SDV 平台有两个标准时钟:
世界协调时间 (UTC) 时钟:这是标准的世界协调时间时钟。SOME/IP 通常会从 ECU 向平台运行时提供此信息。用例包括证书新鲜度、诊断和 V2X。
网络单调时钟:这是由 ECU 提供的一种非递减的高精度时钟信号,更广泛的车辆架构使用该信号来确保事件协调一致。ECU 通过 gPTP 将此信息提供给 SDV 平台。此时钟也称为稳定时钟。
SDV 平台中的时钟具有特定的架构要求:
时钟传递:每个虚拟机实例都可以访问 ECU 提供的相同单调时钟信号。
时钟完整性:网络单调时钟输入应是跨服务协调事件的可靠来源。防范重放攻击或时间反转等可能的系统漏洞,基于单调时钟的完整性。
闹钟使用情况:SDV 平台时钟 API 不应用于高频发生(> 100 Hz)或调度与事件时间之间的延迟时间 < 10 毫秒的事件。高频或低延迟 API 应使用内核驱动程序。
时钟 API
网络单调时钟通过标准 clock_gettime(3) API 公开:
// Network monotonic clock uses standard Linux API.
// This is represented as a dynamic clock in clock_gettime(3)
clock_gettime(clockid_t id, ×pec)
此时钟通过 PTP 网络机制提供给所有虚拟机,并注册为用于 clock_gettime(3) 目的的动态时钟。
世界协调时间 (UTC) 时钟在 clock_gettime(3) 中以 CLOCK_REALTIME 表示。
可选设备驱动程序
OEM 可以选择公开 Linux 设备块以获取更多时间属性。通过 sepolicy 使用权限处理公开此属性:
# in device/OEM/target/sepolicy/time/file_contexts
/dev/sdvtime u:object_r:time_device:s0
OEM 负责开发自定义 Linux 设备驱动程序并提供相应功能,以向设备块公开 API。
通知和回调
SDV 中时间组件的通知和回调是 OEM 提供的用户空间功能。SDV 平台不提供用于这些功能的特定 API。
每个需要时间同步功能的虚拟机应有最多一项 OEM 服务来处理所有需要监控的相关时间变化。以下示例展示了当前时间源的信任状态发生变化时的情况:
时间源状态的变化预计为低频事件,因此 OEM 服务可以通过轮询(例如每分钟一次)来检查变化。
ECU 通过网络(例如通过 SOME/IP)传达 UTC 时钟的信任状态。
OEM 服务会发布特定的数据隧道主题,以向订阅者显示这些更改。
原始设备制造商 (OEM) 会为服务自定义授权政策,以确定哪些服务可以订阅这些数据隧道主题来监听可信的时间状态变化。
错误状态和处理
错误代码遵循所涉及的标准 Linux API 的惯例,例如:
如果
clock_gettime()失败,则返回-1并设置errno;这表示时钟操作不受支持或底层时钟源未就绪。如果
fopen()失败,此函数会返回一个 null 指针并设置errno;这表示块设备不可用。如果
ioctl()调用失败,则返回-1并设置errno;这表示指定的请求代码没有来自底层驱动程序的匹配响应。