AAOS 軟體定義車輛 (SDV) 平台定義了電子控制單元 (ECU) 的時間來源回報標準機制,以及在 SDV 執行個體中公開時間資訊的標準介面。本頁面提供 SDV 標準的詳細資料和指引。
時鐘架構
SDV 平台有兩個標準時鐘:
世界標準時間時鐘:這是標準的世界標準時間時鐘。SOME/IP 通常會從 ECU 提供給平台執行階段。用途包括憑證有效性、診斷和 V2X。
網路單調時鐘:這是 ECU 提供的非遞減高精確度時鐘訊號,廣泛的車輛架構會使用這項訊號,確保事件協調一致。ECU 會透過 gPTP 將這項資訊提供給 SDV 平台。這個時鐘也稱為「穩定時鐘」。
SDV 平台中的時鐘有特定的架構需求:
時鐘傳輸:每個 VM 執行個體都會存取 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 網路機制提供給所有 VM,並註冊為 clock_gettime(3) 的動態時鐘。
世界標準時間時鐘在 clock_gettime(3) 中以 CLOCK_REALTIME 表示。
選用的裝置驅動程式
原始設備製造商可選擇公開 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。
每個需要時間同步功能的 VM 應最多有一個 OEM 服務,負責處理所有相關時間變更,以供監控。舉例來說,當目前時間來源的信任狀態變更時:
時間來源狀態變更預期為低頻率事件,因此 OEM 服務可以透過輪詢檢查變更,例如每分鐘一次。
ECU 會透過網路 (例如 SOME/IP) 傳達 UTC 時鐘的信任狀態。
OEM 服務會發布特定資料通道主題,向訂閱者顯示這些變更。
原始設備製造商會自訂服務的授權政策,決定哪些服務可以訂閱這些資料通道主題,以監聽可信的時間狀態變化。
錯誤狀態和處理方式
錯誤代碼遵循所涉標準 Linux API 的慣例,例如:
如果
clock_gettime()失敗,這會傳回-1並設定errno;這表示系統不支援時鐘作業,或基礎時鐘來源尚未準備就緒。如果
fopen()失敗,這會傳回空值指標並設定errno;這表示區塊裝置無法使用。如果
ioctl()呼叫失敗,系統會傳回-1並設定errno;這表示指定的請求代碼沒有來自基礎驅動程式的相符回應。