如何在 Linux 上创建虚拟 CAN 端口? (C++)

Posted

技术标签:

【中文标题】如何在 Linux 上创建虚拟 CAN 端口? (C++)【英文标题】:How to create virtual CAN port on linux? (C++) 【发布时间】:2014-01-28 03:40:28 【问题描述】:

我想创建一个程序来模拟 CAN 端口,以便为另一个大型应用程序进行测试。程序应通过此虚拟 CAN 发送先前记录的数据。有谁有这方面的经验吗?

我正在考虑建立虚拟 COM,并通过它发送包装在 CAN 帧中的数据。它可以工作吗?我如何在 linux 上建立虚拟 COM?找到这个帖子Virtual Serial Port for Linux 但遗憾的是我不明白如何将它实现到程序的源代码中(初级linux用户和linux下的程序员)。

很想阅读您的经验和建议。

【问题讨论】:

AF_CANAF_UNIX 非常相似......你可以只使用套接字...... 【参考方案1】:

您需要 SocketCAN 驱动程序,该驱动程序可在现代 Linux 发行版(如 Ubuntu 等)上使用。SocketCAN 提供了一个虚拟 CAN 端口驱动程序:

sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0

现在您可以通过vcan0 设备发送和接收 CAN 帧。***文章提供了关于如何使用 SocketCAN 的简单代码示例。

您还需要can-utils 用于测试目的。

您可以在eLinux.org 上找到有关 SocketCAN 及其用法的更多信息

【讨论】:

【参考方案2】:

教程

第 1 部分 - 创建模拟 CAN 的程序


您可以使用以下 bash 程序在 Linux 中创建虚拟 CAN 端口 (vcan):

setup_vcan.sh

#!/bin/bash

# Using can1 as an example
CAN_PORT="can1"

sudo modprobe vcan
sudo ip link add dev $CAN_PORT type vcan
sudo ip link set up $CAN_PORT

使 bash 程序可执行:

chmod +x setup_vcan.sh

运行 bash 程序:

./setup_vcan.sh

第 2 部分 - CAN 消息的记录和播放


将 CAN 消息记录到日志文件中(将 $CAN_PORT 替换为您的 CAN 端口名称):

candump -L $CAN_PORT > myfile.log

从日志文件中播放 CAN 消息:

canplayer -I myfile.log

您可以通过检查candump的输出来验证播放:

candump $CAN_PORT

参考文献

@yegorich's Answer Canplayer won't replay candump files

【讨论】:

以上是关于如何在 Linux 上创建虚拟 CAN 端口? (C++)的主要内容,如果未能解决你的问题,请参考以下文章

linux对外开放端口

如何在Linux虚拟机或服务器上发布或部署一个Spring项目

如何在Yocto Linux中禁用虚拟终端

如何使用xshell登录虚拟机liunx

端口linux创建vm到windows

教你如何在linux服务器上添加虚拟网卡