本文要点
- 用于没有实体 CAN 硬件时进行协议和应用层调试。
- 覆盖 vcan 模块加载、虚拟网卡创建与启用。
- 使用 can-utils 进行 cansend/candump 通信验证。
在Linux系统中,可以使用SocketCAN框架创建两个虚拟CAN接口(例如vcan0和vcan1),并通过它们模拟CAN总线通信,实现一端发送,另一端接收。以下是具体步骤。
1.加载vcan内核模块,确保已加载虚拟CAN支持的内核模块。
2.创建两个虚拟CAN接口vcan0和vcan1,并将它们设置为“up”状态。
1 2 3 4
| sudo ip link add dev vcan0 type vcan sudo ip link add dev vcan1 type vcan sudo ip link set up vcan0 sudo ip link set up vcan1
|
3.为了使vcan0和vcan1能够相互通信,需要使用cangw(CAN网关)工具将它们桥接起来。首先,确保已安装can-utils工具集,其中包含cangw。
1
| sudo apt-get install can-utils
|
4.启动网关内核模块。
5.配置网关,使用cangw命令将vcan0和vcan1连接起来。
1 2
| sudo cangw -A -s vcan0 -d vcan1 -e sudo cangw -A -s vcan1 -d vcan0 -e
|
6.测试通信,使用cansend和candump工具测试两个接口之间的通信。
在一个终端窗口中,监听vcan1上的消息:
在另一个终端窗口中,发送消息到vcan0:
1
| cansend vcan0 123#DEADBEEF
|
如果配置正确,将在监听vcan1的终端中看到类似以下的输出,表示成功接收到从vcan0发送的消息:
1
| vcan1 123 [8] DE AD BE EF
|