V-ECU 於 Linux ECU 平台
SIL 測試方案
針對運行於 POSIX / Linux 的 SoC 域控制器(AUTOSAR Adaptive),以 dSPACE VEOS 進行程式碼層級 SIL 測試的完整方案——涵蓋測試系統組成、實驗服務限制,以及六大互補測試手段。
現代 SoC(System-on-Chip)ECU——自動駕駛/ADAS 域控制器、座艙、中央運算單元——運行 POSIX(Linux),以 C++ 與 AUTOSAR Adaptive Platform(ara::com) 開發,骨幹是乙太網 + SOME/IP 服務導向通訊。在 VEOS 中,這類軟體被打包為 Adaptive V-ECU,於 dSPACE VEOS Linux Kernel + Hypervisor(QEMU/KVM)構成的虛擬機內執行。本方案說明如何對其進行 SIL 測試。內容整理自 dSPACE VEOS Manual 與 AutomationDesk 手冊(RLS2024-B)。
1. 為什麼 Linux/SoC 的測試「不一樣」
Adaptive V-ECU 與傳統微控制器的 Classic V-ECU,在可觀測性上有根本差異,這決定了測試手段:
| 面向 | Classic V-ECU(微控制器) | Adaptive V-ECU(Linux/SoC) |
|---|---|---|
| 執行形態 | 原生行程(native VPU) | 虛擬機內的 Linux 行程 |
| 變數可及性 | XCP / RTT / DsDAQ 可直接量測內部變數 | 容器不內建這些實驗服務 |
| 主要可觀測介面 | 內部記憶體變數(A2L) | 對外乙太網(SOME/IP、UDS)+ 偵錯器(GDB) |
| 時間行為 | 連續推進 | 全核 idle 才前進,無限迴圈會凍結 |
一句話:測 Classic 像「在示波器上看內部訊號」;測 Adaptive/SoC 更像「在網路與診斷介面上看一台真正的 Linux 電腦」。
2. SIL 測試的定位與價值
VEOS 是 dSPACE 用於程式碼層級 SIL 模擬的整合與測試平台,把測試從「需要硬體才能做」左移(frontloading)到純 PC 環境:缺陷越早發現,修正成本越低。
早期驗證
軟體可編譯即可測,不必等 HIL 台架或樣車
可重現
共用同一條虛擬模擬時間,結果與是否單步偵錯無關
可平行 / 雲端
純軟體,能在容器與叢集中大量平行執行
可回歸
完全無頭(headless)可納入 CI/CD
可用於安全流程
依 ISO 26262 method 1b+1c 取得工具資格,可用於 ASIL D
3. 測試系統的組成
一個 SIL 測試系統(simulation system)由四類元素加上互連組成,各元件經 VEOS System Builder 編為 VPU,整合為單一 OSA(.osa) 後於 VEOS Simulator 執行:
| 元素 | 角色 | 在 SoC 測試中的來源 |
|---|---|---|
| 被測對象 DUT | 要驗證的 V-ECU | Adaptive V-ECU(.vecu,C++ 應用 + 中間件層) |
| 殘餘匯流排 Restbus | 模擬「對端 ECU」的通訊 | BSC(.bsc,由 Ethernet Configuration Package 產生) |
| 環境模型 Environment | 被控對象 / 感測器 / 場景 | FMU(FMI Co-Simulation)或 SIC(Simulink) |
| 互連 Interconnection | 連接上述元素 | 乙太網 / CAN / LIN cluster |
整合方式:於 Network Topology 把通訊控制器拖到對應 cluster;於 Port Topology 用 Autoconnect 依同名埠自動連接。Restbus 的測試意義:把非 DUT 的對端 ECU 以 restbus 合併模擬,即可在無真實對端下測 DUT,並操控 restbus 報文觀察反應(故障注入的基礎)。
4. 關鍵限制:實驗服務矩陣
規劃 SoC 測試前必須先理解這張表。每種容器在 VEOS 中內建的「實驗服務」不同,直接決定可用哪些工具存取它:
| 容器 | XCP | RTT | DsDAQ | Bus Access | Bypass | 變數描述 |
|---|---|---|---|---|---|---|
| Classic V-ECU | ✓ | ✓ | — | 部分¹ | 部分² | A2L |
| Adaptive V-ECU(Linux/SoC) | ✕ | ✕ | ✕ | ✕ | ✕ | — |
| FMU(一般) | — | ✓ | ✓ | — | — | SDF/TRC |
| FMU(fmi-ls-xcp) | ✓ | — | — | — | — | A2L |
| SIC(Simulink) | ✓ | ✓ | ✓ | — | — | A2L 或 SDF/TRC |
| BSC(Restbus) | — | ✓ | ✓ | ✓ | — | SDF/TRC |
¹ 僅當 Classic V-ECU 至少有一個通訊控制器。 ² 僅當 VECU 含 Rapid Prototyping Access(RptAccess)模組。
核心結論:Adaptive V-ECU 容器不可被 XCP/RTT/DsDAQ 直接量測。因此必須改用外圍/間接手段:對外乙太網介面(SOME/IP、UDS)、與其相連且可量測的 Restbus / 環境 VPU、應用自身偵錯介面(GDB)、以及 VEOS CoSim 外部介面。
5. 六大測試方式總覽
| # | 測試方式 | 主要工具 | 測什麼 |
|---|---|---|---|
| ① | 服務導向通訊測試 | Ethernet Config + Restbus(BSC) | SOME/IP 服務發現、事件/方法/欄位收發 |
| ② | 故障注入測試 | Restbus 報文 + A2L + AutomationDesk | 錯誤偵測、安全降級、容錯與恢復 |
| ③ | 自動化測試 | AutomationDesk + RTT | 批次回歸、自動判定、報告產生 |
| ④ | 量測 / 校正 / 診斷 | ControlDesk(Bus Navigator / MCD-3D) | 乙太網監控、UDS/DTC、環境變數量測 |
| ⑤ | 外部協同模擬 | VEOS CoSim Interface(DsVeosCoSim) | 以自有 C++ 程式做刺激/評估/共模 |
| ⑥ | 偵錯與性能分析 | GDB + dSPACE NMI Profiler | 原始碼偵錯、卡死定位、火焰圖 |
6. 各測試方式詳解
①服務導向通訊測試(SOME/IP Restbus)
以殘餘匯流排(Restbus)模擬對端 ECU 的乙太網/SOME/IP 通訊,驗證 DUT 的 ara::com 行為:服務發現(Offer/Find,SOME/IP-SD)、事件(訂閱、週期收發、欄位通知)、方法(RPC 呼叫/回應、錯誤碼)、欄位(Getter/Setter/Notifier)、序列化正確性(ID 指派與封包結構)。觀測手段:ControlDesk 的 Bus Navigator 解碼報文、Bus Instruments 主動操控 restbus 報文。
②故障注入測試(Fault Injection)
驗證 DUT 的穩健性與安全機制。由於 Adaptive V-ECU 內部不可直接寫入,故障注入主要從外圍進行,分三類注入點:
| 注入層 | 手段 | 範例 |
|---|---|---|
| 匯流排層故障 | 操控 restbus 報文 / A2L 變數 | 報文缺失、逾時、竄改、錯誤計數;BusConnectionState=1 一鍵斷開所有總線 |
| 訊號 / 數值故障 | 以 A2L 變數覆寫,或由環境模型注入 | 超量程、凍結、跳變、雜訊 |
| 電氣錯誤模擬 | AutomationDesk Simulating Electrical Errors 函式庫 | 短路、斷路、對地/對電源短路 |
標準流程:建立基準 → 注入單一故障(一次只改一個,確保可歸因)→ 比對反應(是否在規定時間內偵測並進入安全狀態、設置正確 DTC)→ 恢復測試 → 以 AutomationDesk 自動判定 Pass/Fail。
③自動化測試(AutomationDesk + RTT)
將手動測試腳本化、批次化、可回歸。堆疊:AutomationDesk(測試序列、資料管理、自動判定、報告)→ 存取庫(模擬平台 / ControlDesk / RTT / MATLAB;訊號式測試)→ RTT(以 Python 即時讀寫變數)→ VEOS(OSA)。
兩個關鍵注意:① RTT 不能作用在 Adaptive V-ECU 上(其容器無 RTT 服務),實際是施加在 Restbus / 環境 VPU 側,間接驅動 DUT。② 版本須一致:PC 上的 RTT 版本須與 VEOS Simulator 內含版本相容(VEOS 2024-B ↔ RTT 2024-A);自動化介面相容 Python 3.12。
訊號式測試(Signal-Based Tests)特別適合 ADAS/AD:以時間序列定義輸入激勵與期望輸出曲線,自動比對容差帶。
④量測 / 校正 / 診斷(ControlDesk / UDS)
操作要點:註冊平台(Register Platforms → VEOS,可本機或遠端 Linux)→ 建立專案匯入變數描述(.sdf/.a2l)→ Go Online → 乙太網監控(Bus Navigator 解碼 SOME/IP)→ 故障注入(Bus Instruments 操控 restbus,接方式②)→ 診斷測試(ECU Diagnostics MCD-3D 裝置匯入 ODX,執行 UDS 服務、讀取/清除 DTC)。Adaptive V-ECU 的內部變數不可經 XCP 直接量測,功能正確性須靠對外介面(UDS、SOME/IP)與可量測的 Restbus/環境 VPU 間接驗證。
⑤外部協同模擬(VEOS CoSim Interface)
當需以自有 C/C++ 程式對 VEOS 模擬做步進控制與 I/O / 匯流排資料交換時(第三方求解器、HIL/SIL 共模、自製刺激與評估器),使用 DsVeosCoSim。伺服端以 JSON 描述介面並匯入為 OSA;客戶端自 github.com/dspace-group/veos-cosim-client 取得函式庫,用 CMake 連結 DsVeosCoSim。
# Linux:匯入 JSON → 載入 → 等待 client 連入
veos model import -n ./VeosCoSimOsa.osa -p ./Example.json
veos sim load ./VeosCoSimOsa.osa
⑥偵錯與性能分析(GDB / NMI Profiler)
遠端 GDB:在 V-ECU 內以 gdbserver 啟動應用,遠端 GDB 連入。先決條件:匯入時設 HostOnly hypervisor 連接、設好 TAP 虛擬網卡、GDB 主機上有應用副本。
gdb <application>
set sysroot <path>
target extended-remote tcp:<VECU_IP>:<port>
NMI Profiler:由於模擬時間「全核 idle 才前進」,含無限迴圈的應用會凍結模擬。NMI Profiler 在不停止模擬下週期觸發 NMI,蒐集各核當下執行的任務,產生堆疊追蹤並以火焰圖視覺化——寬而高者即為卡住的熱點。
7. 虛擬模擬時間對測試正確性的影響
- 時間前進規則模擬時間只有在所有 CPU 核心都切到 idle task 時才前進。含無限迴圈的應用會使模擬時間凍結、測試卡住 → 用 NMI Profiler 定位。
- 時鐘來源VEOS 把 Linux clock source 與全域模擬時間同步,應用應一律取自 Linux clock source。RTC 裝置(
/dev/rtc*)不與模擬時間同步,依賴它的時間邏輯在 SIL 中會異常。 - 預啟動初始化預設模擬時間在 kernel boot 時就開始。若希望 V-ECU 完全初始化後才計時,可用
veos.clock_noinit暫停時鐘,於 SUT 內呼叫veos-start啟動。
8. CI/CD 無頭自動化回歸測試(Docker)
VEOS on Linux 全程可無 GUI 執行,天然適合 CI/CD。dSPACE 提供 Dockerfile + Python 腳本把 VEOS 跑在容器中。
# 建置含 Adaptive 支援的映像
BuildVeos.py online <acceptEula> <veosImage> <veosInstallFile> --target veosAdaptive
# 構建 Linux 目標的 OSA(可在 Windows 構建、Linux 運行)
veos build adaptive-vecu MyVecu.vecu -t HostPCLinux64/GCC \
--hypervisor-connection-state HostOnly -o MySoC.osa
# 運行容器(指定共享記憶體)
RunVeos.py <veosImage> <licenseServer> --dockerRunArgs "--shm-size 300m --cpus 3"
- 容器內啟動順序(缺一不可):① CodeMeter server → ② port mapper(rpcbind / dspace-portmapper)→ ③ VEOS Kernel(建議用 supervisord 管理)。
- 共享記憶體
--shm-size≥ 256m(Bus access 每 bus VPU 32 MB、DsDAQ 每 VPU 16 MB)。 - 構建 / 運行分離:在 Windows 用 SystemDesk + VEOS 構建
HostPCLinux64/GCC目標,部署到 Linux/容器運行;archive-based Adaptive V-ECU 建議先做成 QEMU image。
9. 測試方式選型決策表
| 測試目標 | 建議方式 | 為什麼 |
|---|---|---|
| 驗證 SOME/IP 服務發現與收發 | ① + ④ | DUT 對外介面即乙太網/服務 |
| 驗證錯誤偵測 / 安全降級 / 容錯 | ② + ③ | 須主動製造異常並觀察反應 |
| 大量回歸 / 夜間批次 / 報告 | ③ | 腳本化、自動判定、產生報告 |
| 讀 DTC / 跑 UDS 診斷序列 | ④ | 標準診斷協定經乙太網 |
| 接自有 C++ 測試框架 / 第三方求解器 | ⑤ | 程式化步進與 I/O 交換 |
| 應用層 bug / 崩潰 / 邏輯錯誤 | ⑥ GDB | 原始碼層單步、中斷點 |
| 模擬卡住 / 不前進 / 性能熱點 | ⑥ NMI Profiler | 不停模擬即可採樣定位迴圈 |
| 想量測「內部變數」 | 改測 Restbus/環境 VPU | Adaptive V-ECU 容器無 XCP/RTT/DsDAQ |
10. 端到端測試流程
| 階段 | 工具 | 產出 / 動作 |
|---|---|---|
| 建模 / 產生 | SystemDesk | SWC、Executable、四類 Manifest |
| 建 Adaptive V-ECU | SystemDesk | V-ECU + Tmc(核數/記憶體/乙太網卡)→ 匯出 .vecu |
| 構建 | VEOS(Win 或 Linux) | veos build adaptive-vecu → 整合 Restbus/環境 VPU → OSA |
| 運行 | VEOS(Linux) | veoskernel → veos sim load/start |
| 測試 / 分析 | RTT / AutomationDesk / CoSim / ControlDesk / GDB / NMI | 執行測試、量測診斷、偵錯與性能分析 |
11. 測試規劃最佳實務
- 先讀「實驗服務矩陣」再決定測試手段——這是 SoC 測試與 Classic 最大的不同
- 單一變因原則:故障注入一次只改一個條件,確保可歸因
- 基準 + 容差:訊號式測試以基準曲線 + 容差帶自動判定,避免人工目視
- 構建/運行分離 + CI:Windows 構建 Linux 目標,Linux/容器無頭回歸
- 偵錯前以 Debug configuration 構建(預設),確保原始碼有除錯資訊
- 每個模擬僅一個 Adaptive V-ECU 可設 HostOnly(供外部存取/遠端 GDB),其餘須 Disconnected
原始文件出處(dSPACE RLS2024-B)
| 文件 | 內容範圍 |
|---|---|
| VEOS Manual | SIL 模擬基礎、Adaptive V-ECU 整合與模擬、實驗服務、虛擬模擬時間、VEOS on Linux、CoSim Interface、NMI Profiler、Docker/CI |
| AutomationDesk 手冊 | Signal-Based Tests、Accessing Real-Time Testing、Simulating Electrical Errors |
| veos-cosim-client | DsVeosCoSim 外部協同模擬客戶端函式庫 |
來源:dSPACE VEOS / AutomationDesk 手冊(RLS2024-B)。執行平台基準:Ubuntu Linux 22.04 LTS。不同 Release 之選單、路徑、參數名稱可能略有差異,請以實機為準。