USB-CAN 开发笔记

最近在接触 CAN 总线的开发,找了一圈 CAN 总线的适配器,某宝上全是各类坐地起价的分析仪。这类分析仪有个特点是在系统中呈现的形式为一个 USB 串口设备,其通信方式为厂家私有并不公开,集成开发的时候必须带上厂家的 .dll 或者 .so 文件。

经过一翻搜索之后,发现了一个以 Geschwister Schneider 制造的 USB/CAN 设备(VendorId: 0x1d50, ProductId: 0x606f)的 USB 通信协议为蓝本的开源方案。在 Linux 下以标准 SocketCAN 设备 [5] 呈现,驱动已经进入主线[1],在 Windows 下以 WCID 设备 [6] 呈现,开源 API 见 [2]。开源的硬件方案 [3],对应的固件 [4]。

在其基础上分叉出来的方案还有 [7],[8] 和 [9]。另外 SocketCAN 还有一个开源的 Golang 包 [10]。

[1] https://github.com/torvalds/linux/blob/master/drivers/net/can/usb/gs_usb.c
[2] https://github.com/HubertD/cangaroo/tree/master/src/driver/CandleApiDriver/api
[3] https://github.com/HubertD/candleLight
[4] https://github.com/HubertD/candleLight_fw
[5] https://www.kernel.org/doc/Documentation/networking/can.txt
[6] https://github.com/pbatard/libwdi/wiki/WCID-Devices
[7] https://store.linklayer.com/collections/frontpage/products/cantact-v1-0
[8] https://canable.io/
[9] https://github.com/codenocold/microbus
[10] https://github.com/linklayer/go-socketcan

腾讯云 EIP 直通设置

EIP 直通意思就是说虚拟机直接绑定公网 IP,启用的先决条件有两个:

(1)虚拟机在虚拟网络

(2)发工单申请 EIP 直通功能

在启用直通功能后,需要运行腾讯云提供的脚本 eip_linux.sh,然而有一个简单粗暴的方法。

(1)在 /etc/network/interfaces 直接设置静态 IP,address 跟 EIP,10.0.0.0/24 替换为所在子网

iface eth0 inet static
# replace with your EIP
address XXX.XXX.XXX.XXX
netmask 255.255.255.255
up ip route add 10.0.0.0/24 dev eth0
up ip route add default via 10.0.0.1 dev eth0
down ip route del default via 10.0.0.1 dev eth0
down ip route del 10.0.0.0/24 dev eth0

(2)设置 /etc/resolve.conf,比如上海联通的一组 DNS

nameserver 210.22.70.3
nameserver 210.22.84.3