CANoe與虛擬機器

創提科技
2023/07/31

分享到

“轉載自維克多汽車技術(上海)有限公司,作者Vector China”


在汽車軟體的開發週期中,基於POSIX標準的作業系統(如Linux)廣泛應用於AUTOSAR Adaptive平臺的ECU原型開發、演算法或功能評估中。該領域的嵌入式軟體發展人員通常傾向于在運行Linux系統(如Ubuntu/Debian)的虛擬機器中進行開發,因為它提供了與嵌入式平臺相似的可訪問的介面和元件。
 
Vector提供的CANoe軟體是進行網路/匯流排和ECU開發、測試和分析的全面工具,支援匯流排網路開發從需求分析到系統實現的全過程,包括模型創建、模擬、測試、診斷及通信分析等。但和大多數網路開發工具一樣只適用於Windows作業系統,因此開發人員需要考慮如何實現Linux環境和CANoe工具之間的資料交互。


CANoe与虚拟机-1 小.png


圖1:CANoe與被測軟體的虛擬化執行環境


為了滿足用戶多樣化虛擬執行環境的測試需求,除了CANoe以外,Vector還提供了專注於SIL測試的CANoe4SW,可以對軟體元件、軟體子系統以及整個軟體系統進行開發,測試和分析。以及面向伺服器版本的CANoe4SW SE(CANoe4SW Server Edition),支持Linux或Windows伺服器環境運行CANoe工程,支援Docker容器化運行。


本文主要介紹CANoe與虛擬機器通過乙太網交互的幾種常用方法。


01/Shared Networking
 
共用意味著CANoe和被測應用程式共用主機的TCP/IP協定棧,這種方式在使用WSL(Windows Subsystem for Linux)時最為便捷。WSL有WSL2和WSL1兩個版本,主要區別在於WSL2使用了真實的 Linux 內核、支援完整的系統調用相容性以及跨 Linux 和 Windows 作業系統的性能。
 
接下來以WSL2環境為例演示虛擬機器與CANoe基於Shared Networking的通信配置過程。在CANoe端需要創建一個UDP通信節點,將其TCP/IP Stack配置為使用作業系統的網路通訊協定棧,然後通過CAPL函數創建socket通過本地環回地址(127.0.0.1)實現UDP報文的發送和接收;在WSL2端無需特殊配置,可直接通過指令去監聽UDP報文並向CANoe發送UDP資料。通信過程如下圖。


CANoe与虚拟机-2 小.png


圖2: CANoe與WSL2通信過程


這種方式配置簡單,但是無法直接在CANoe的Trace視窗中顯示通信資料,並且可能會受到主機上其他應用程式的串擾,另外Windows防火牆也可能會抑制通信流量。
 
Shared Networking同樣也適用於其他的虛擬化工具,如VMware Workstation、Virtual Box等。只是需要一些額外配置,對於其他虛擬化環境更推薦使用後面介紹的方式。


02/Virtual Ethernet Link
 
該方式適用於運行Linux虛擬機器的各種虛擬化環境,如VMware Workstation 和Microsoft Hyper-V。接下來以VMware環境為例介紹其配置過程。
 

>安裝Vector Network Driver
 
CANoe的安裝路徑下包含有該驅動的安裝程式(參考路徑:C:\Program Files\Vector CANoe 16.3.110\Installer Additional Components\Vector Network Driver),以管理員許可權安裝即可。
 
>安裝Microsoft環回適配器
 
在Window搜索欄中輸入“hdwwiz”打開添加硬體設定選項,選擇手動從清單中選擇硬體安裝,在硬體類型中選擇“網路介面卡”,在下一步中廠商選擇“MicroSoft”,型號選擇“Microsoft KM-TEST環回適配器”進行安裝。
 
安裝完成之後就可以在PC的網路連接中查看到Microsoft環回適配器了。


CANoe与虚拟机-3.png


圖3:安裝環回適配器


>將Microsoft環回適配器映射到VM
 
打開VMware Workstation,在編輯功能表下打開虛擬網路編輯器,選擇VMnet0並將其橋接到Microsoft環回適配器。


CANoe与虚拟机-4.png


圖4:配置橋接模式


>配置CANoe使用Microsoft環回適配器
 
CANoe介面,Hardware -> Network Hardware-> Ehernet channel-> Hardware Type中選擇Microsoft環回適配器。


CANoe与虚拟机-5.png

 
圖5:配置使用網卡


所有配置完成之後,來自CANoe中的乙太網資料就可以通過映射的乙太網鏈路發送到VMware中,同樣VMware中的乙太網資料也可以發送給CANoe
 
以VMware中Ubuntu環境為例,驗證CANoe與Ubuntu之間的通信鏈路,過程如下圖。


CANoe与虚拟机-6 小.png

 
圖6: CANoe與Ubuntu通信過程


03/TUN/TAP Server
 
CANoe從15.0版本開始,新增了Virtual Link(TUN/TAP)功能,支援使用TUN/TAP設備驅動程式將VM虛擬的網路設備連接到CANoe進行模擬。這種模式的通信是雙向的,並且CANoe支援工作在真實匯流排及模擬匯流排模式下。


CANoe与虚拟机-7.png

圖7: TAP功能示意


主要配置過程如下。
 
>配置TUN/TAP Server
 
一是需要在本地Linux環境中編譯TAP server,二是編譯完成後需要在VM中創建虛擬的TAP設備,具體過程可以參考CANoe幫助文檔的說明。


CANoe与虚拟机-8 小.png


圖8:TAP server配置


以VMware中CentOS7環境為例,演示下TAP server配置的具體過程:


CANoe与虚拟机-9.png


圖9: CenOS7中TAP server配置示例


>CANoe中啟動Virtual Link
 
CANoe中打開Option頁面,啟動virtual link並選擇TAP server映射的網路。


CANoe与虚拟机-10.png


圖10:CANoe中啟動TAP server配置


>CANoe中UDP通信配置
 
CANoe中創建一個UDP通信節點,配置其TCP/IP stack資訊。


CANoe与虚拟机-11.png


圖11:TCP/IP stack配置


所有配置完成後,運行CANoe就可以在write視窗查看到“Tap Server Discovery on 192.168.24.255:33000”及“Connected to Tap Server 192.168.24.131:35802”的資訊,表明CANoe與TAP server端的配置已經完成並建立了連接。為了驗證虛擬機器與CANoe之間的通信,可以通過Ping指令或者UDP API去進行驗證,結果如下。


CANoe与虚拟机-12 小.png


圖12: CANoe與TAP server通信過程