目录
当没有CAN设备时,可使用 Ubuntu 的虚拟 CAN 进行通讯测试。
一、启用本机的 VCAN

1.1 加载本机的 vcan
# 加载虚拟 CAN:
sudo modprobe vcan
1.2 添加本机的 vcan0
# 添加 VCAN0 到操作系统:
sudo ip link add dev can0 type vcan
1.3 查看添加的 vcan0
# 查看 CAN0 :
ifconfig -a
1.4 开启本机的 vcan0
# 开启 CAN0 :
sudo ip lin
1.5 关闭本机的 vcan0
# 关闭 CAN0 :
sudo ip link set dev can0 down
1.6 删除本机的 vcan0
# 删除 CAN0 :
sudo ip link del dev can0
二、测试本机的 VCAN
2.1 CAN 发送数据 代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <linux/can.h>
#include <linux/can/raw.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
int main(int argc, char* argv[]) {
int skt = socket(PF_CAN, SOCK_RAW, CAN_RAW);
if (0 > skt) {
perror("create socket error");
return -1;
}
// 指定 can0 设备
struct ifreq ifr = { 0 };
strcpy(ifr.ifr_name, "vcan0");
ioctl(skt, SIOCGIFINDEX, &ifr);
struct sockaddr_can addr = { 0 };
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
// 将 can0 与套接字进行绑定
int rv = bind(skt, (struct sockaddr*)&addr, sizeof(addr));
if (rv < 0) {
perror("bind socket error");
close(skt);
return -2;
}
// 设置过滤规则:不接受任何报文、仅发送数据
setsockopt(skt, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);
// 发送数据
struct can_fra

本文详细介绍了在Ubuntu系统中如何启用、配置、管理和测试VCAN(VirtualCAN),包括加载、添加设备、设置波特率、发送和接收数据,以及相关工具的使用方法和示例代码。
最低0.47元/天 解锁文章
2135

被折叠的 条评论
为什么被折叠?



