Linux下 USBCAN、socketcan使用
一、安装Kvaser Linux Drivers and SDK(不安装驱动,则可以使用kvaser的socketcan模式)
https://www.kvaser.com/download/
放在home目录下(其他目录安装有问题,20221110测试其他目录也可以),在home目录下右键打开终端
解压
1 | tar -xvzf linuxcan.tar.gz |
下载并创建编译程序和用的内核头文件
1 | sudo apt install build-essential |
进入linuxcan目录
1 | cd linuxcan |
编译驱动程序
1 | make |
安装驱动程序(安装驱动的时候,请拔下kvaser)
1 | sudo make install |
CAN 发送代码写好后,编译加上
1 | -lcanlib |
如果是ros包使用,linuxcan驱动安装后,不会生成.cmake文件,不需要用find命令查找头文件和库,只需在链接时加上canlib即可
kvaser产品中没有终端电阻,因为终端电阻所需位置是基于特定的网络拓扑。终端电阻通常安装在CANbus主干网的最远处。CAN总线终端电阻的两个作用:1、提高抗干扰能力,确保总线快速进入隐性状态;2、提高信号质量
卸载kvaser驱动
在安装包linuxcan文件夹下打开终端
1 2 | sudo make uninstall sudo apt update |
如果你安装后删除了安装包,要想删除驱动,再下载安装包到home,同样运行上述卸载命令,适用于kvaser、peakcan
二、图莫斯CAN&LIN Analyser
1、runme.sh这个文件是window下编写的,需要在Linux下重新编码,文件类型改为Unix(Linux下新建即可)。
2、例子中用的头文件和库文件都替换为sdk文件下的
三、socketcan设置
1 2 3 | #! /bin/bash sudo -S ip link set can0 type can bitrate 500000 << /code >< /code > |
四、vcan设置
#! /bin/bash
#加载模块
sudo modprobe vcan
sudo modprobe can-gw
#添加vcan,取名can0 can1 can2也行
sudo ip link add dev can0 type vcan
sudo ip link add dev can1 type vcan
sudo ip link add dev can2 type vcan
#启动vcan
sudo ip link set dev can0 up
sudo ip link set dev can1 up
sudo ip link set dev can2 up
#将多个vcan连接起来
sudo cangw -A -s can0 -d can1 -e
sudo cangw -A -s can1 -d can0 -e
sudo cangw -A -s can0 -d can2 -e
sudo cangw -A -s can2 -d can0 -e
sudo cangw -A -s can1 -d can2 -e
sudo cangw -A -s can2 -d can1 -e
#关闭/删除vcan
#sudo ip link del dev vcan0
#sudo ip link del dev vcan1
#sudo ip link del dev vcan2
五、socketcan自动配置
可以将下面脚本写成.sh脚本,也可以加入~.bashrc中
#!/bin/bash
#下方123456是密码,自行修改
ifconfig -a | grep can0 > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "\n\033[32mNo can0 this device\033[0m"
else
ifconfig | grep can0 > /dev/null 2>&1
if [ $? -ne 0 ]; then
sudo -S ip link set can0 type can bitrate 500000 <<EOF
123456
EOF
sudo ip link set up can0
ifconfig | grep can0 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "\n\033[32msetup can0 done\033[0m"
else
echo -e "\n\033[31msetup can0 failed\033[0m"
fi
else
echo -e "\n\033[32mcan0 is ready\033[0m"
fi
fi
#enable socketcan0
ifconfig -a | grep can0 > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "\n\033[32mNo can0 this device\033[0m"
else
ifconfig | grep can0 > /dev/null 2>&1
if [ $? -ne 0 ]; then
sudo -S ip link set can0 type can bitrate 500000 <<EOF
123456
EOF
sudo ip link set up can0
ifconfig | grep can0 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "\n\033[32msetup can0 done\033[0m"
else
echo -e "\n\033[31msetup can0 failed\033[0m"
fi
else
echo -e "\n\033[32mcan0 is ready\033[0m"
fi
fi
#enable socketcan1
ifconfig -a | grep can1 > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "\n\033[32mNo can1 this device\033[0m"
else
ifconfig | grep can1 > /dev/null 2>&1
if [ $? -ne 0 ]; then
sudo -S ip link set can1 type can bitrate 500000 <<EOF
123456
EOF
sudo ip link set up can1
ifconfig | grep can1 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "\n\033[32msetup can1 done\033[0m"
else
echo -e "\n\033[31msetup can1 failed\033[0m"
fi
else
echo -e "\n\033[32mcan1 is ready\033[0m"
fi
fi
#enable socketcan2
ifconfig -a | grep can2 > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "\n\033[32mNo can2 this device\033[0m"
else
ifconfig | grep can2 > /dev/null 2>&1
if [ $? -ne 0 ]; then
sudo -S ip link set can2 type can bitrate 500000 <<EOF
123456
EOF
sudo ip link set up can2
ifconfig | grep can2 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "\n\033[32msetup can2 done\033[0m"
else
echo -e "\n\033[31msetup can2 failed\033[0m"
fi
else
echo -e "\n\033[32mcan2 is ready\033[0m"
fi
fi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?