如何通过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)
硬件设置
使用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
从 www.github.com/intrepidcs克隆英特佩斯SocketCAN内核模块
git clone https://github.com/intrepidcs/intrepid-socketcan-kernel-module.git
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仓库代码,运行如下代码
git clone --recursive https://github.com/intrepidcs/icsscand.git
切换到克隆后的目录 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