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通信过程