如何通过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消息。
![sc1](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc1.png?resize=1080%2C750&ssl=1)
打开终端
安装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
![sc2](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc2.png?resize=674%2C472&ssl=1)
从 www.github.com/intrepidcs克隆英特佩斯SocketCAN内核模块
git clone https://github.com/intrepidcs/intrepid-socketcan-kernel-module.git
![sc3](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc3.png?resize=1080%2C352&ssl=1)
cd intrepid-socketcan-kernel-module
创建工程编译生成KO文件,使用如下make指令:
make
![sc4](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc4.png?resize=666%2C464&ssl=1)
运行结果文件将会是 intrepid.ko。该模块将会依赖于can,can_devhe can_raw。我们在makefile文件中使用一个脚本实现重新加载。但如果你想自行运行它们,你可以使用如下指令:
sudo modprobe can
sudo modprobe can_raw
sudo modprobe can_dev
sudo insmod intrepid.ko
使用lsmod指令确认模块已经加载
![sc5](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc5.png?resize=638%2C170&ssl=1)
如果你期望这些模块在启动的时候自动加载,请参考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
![sc6](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc6.png?resize=661%2C216&ssl=1)
完成依赖程序安装后,然后递归地克隆icsscand仓库代码,运行如下代码
git clone --recursive https://github.com/intrepidcs/icsscand.git
![sc7](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc7.png?resize=691%2C327&ssl=1)
切换到克隆后的目录 cd icsscand
并建立一个build目录,切换进去之后运行 mkdir build && cd build
![sc8](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc8.png?resize=699%2C344&ssl=1)
调用 CMake,
cmake .. -DCMAKE_BUILD_TYPE=Release
![sc9](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc9.png?resize=681%2C181&ssl=1)
编译daemon程序, 使用指令make
![sc10](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc10.png?resize=743%2C458&ssl=1)
Daemon程序就可以通过libicsneo-socketcan-daemon访问. Daemon程序实现你在后台运行英特佩斯的设备。启动Daemon程序,使用如下指令
sudo ./libicsneo-socketcan-daemon
![sc11](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc11.png?resize=730%2C455&ssl=1)
sudo ./libicsneo-socketcan-daemon -d
以守护进程方式运行。
![sc12](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc12.png?resize=737%2C449&ssl=1)
为了查看你的CAN接口设备,使用命令 sudo ip link
。它们将会被标注为can0, can1等。它们会有一个别名分别对应着设备的序列号和设备上的网络通道。为了打开CAN接口发送和接收数据,使用命令sudo ip link set up can0
,你可以替换can0实现你想打开的任何设备。
![sc13](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc13.png?resize=685%2C455&ssl=1)
现在你可以使用任何SocketCAN 应用程序跟设备通信了。一个很好的测试包是can-utils包。你可以通过 sudo apt install can-utils
获取该包。这个包里有个很好的测试工具candump,运行 candump can0
将会打印每行接收到的报文。
![sc14](https://i0.wp.com/www.intrepidcs.com.cn/wp-content/uploads/2020/08/sc14.png?resize=655%2C449&ssl=1)
安装 Intrepid SocketCAN 内核模块
安装并启动英特佩斯硬件的 SocketCAN 守护程序 daemon
查看并打开正确的CAN 接口
你可以阅读了解 intrepid-socketcan-kernel-module https://github.com/intrepidcs/intrepid-socketcan-kernel-module 以及 icsscand https://github.com/intrepidcs/icsscand