如何通过ValueCAN 4在Raspberry Pi 4 (Linux) 上使用SocketCAN。

英特佩斯控制系统有限公司已推出一个开源的API(Libicsneo)。它可以和python_ics配合使用整合英特佩斯车辆网络接口硬件到运行在Linux,Mac和Windows中的任何Python应用中。如果你想了解使用英特佩斯API来对你的设备进行编程,请参考The easy way to program ValueCAN 4 in python using Raspberry Pi (Linux)

在本教程中,你将学习在树莓派4(Raspberry Pi 4)中如何设置英特佩斯的SocketCAN内核模块,从而能够兼容任何英特佩斯工具如ValueCAN4系列。请参考相关文档了解支持的硬件列表。我们将会使用ValueCAN 4–2,支持2路CAN或者CANFD。

硬件设置

使用DB-9F到OBD-II线缆连接ValueCAN 4–2硬件到neoOBD2 Simulator(可选),不需连接车辆,来接收或者发送CAN或CANFD消息。

打开终端

安装dkms(Dynamic Kernel Module Support Framework)包。我们在Raspberry Pi中使用dkms包,因为它不包含内核头文件。在Ubuntu系统中,可以通过执行如下指令完成:

sudo apt install linux-headers-generic build-essential gcc git

sudo apt-get install dkms
使用如下指令进入模块目录:

cd intrepid-socketcan-kernel-module

创建工程编译生成KO文件,使用如下make指令:

make

运行结果文件将会是 intrepid.ko。该模块将会依赖于can,can_devhe can_raw。我们在makefile文件中使用一个脚本实现重新加载。但如果你想自行运行它们,你可以使用如下指令:

sudo modprobe can

sudo modprobe can_raw

sudo modprobe can_dev

sudo insmod intrepid.ko

使用lsmod指令确认模块已经加载

如果你期望这些模块在启动的时候自动加载,请参考GitHub上面的说明页面 https://github.com/intrepidcs/intrepid-socketcan-kernel-module. 完成英特佩斯Socket Kernel模块设置之后,我们需要安装icsscand。英特佩斯icsscand是一个针对英特佩斯设备的用户模式SocketCAN的守护程序daemon。

为了保持文件系统干净,我们将会使用 cd.. 指令移出英特佩斯SocketCAN Kernel目录

为了安装所需要的依赖程序,我们将会运行

sudo apt install git cmake gcc libusb-1.0-0-dev libpcap-dev build-essential

完成依赖程序安装后,然后递归地克隆icsscand仓库代码,运行如下代码

切换到克隆后的目录 cd icsscand 并建立一个build目录,切换进去之后运行 mkdir build && cd build

调用 CMake,

cmake .. -DCMAKE_BUILD_TYPE=Release 

编译daemon程序, 使用指令make

Daemon程序就可以通过libicsneo-socketcan-daemon访问. Daemon程序实现你在后台运行英特佩斯的设备。启动Daemon程序,使用如下指令

sudo ./libicsneo-socketcan-daemon

如果你对结果满意并想后台运行,运行

sudo ./libicsneo-socketcan-daemon -d

以守护进程方式运行。

为了查看你的CAN接口设备,使用命令 sudo ip link。它们将会被标注为can0, can1等。它们会有一个别名分别对应着设备的序列号和设备上的网络通道。为了打开CAN接口发送和接收数据,使用命令sudo ip link set up can0,你可以替换can0实现你想打开的任何设备。

现在你可以使用任何SocketCAN 应用程序跟设备通信了。一个很好的测试包是can-utils包。你可以通过 sudo apt install can-utils 获取该包。这个包里有个很好的测试工具candump,运行 candump can0 将会打印每行接收到的报文。

总结一下:

安装 Intrepid SocketCAN 内核模块

安装并启动英特佩斯硬件的 SocketCAN 守护程序 daemon

查看并打开正确的CAN 接口

你可以阅读了解 intrepid-socketcan-kernel-module  https://github.com/intrepidcs/intrepid-socketcan-kernel-module 以及 icsscand https://github.com/intrepidcs/icsscand

JapanKoreaChinaUSA