1.socketcan简单介绍
socketcan是在Linux下CAN协议(Controller Area Network)实现的一种实现方法。 CAN是一种在世界范围内广泛用于自动控制、嵌入式设备和汽车领域的网络技术。Linux下最早使用CAN的方法是基于字符设备来实现的,与之不同的是Socket CAN使用伯克利的socket接口和linux网络协议栈,这种方法使得can设备驱动可以通过网络接口来调用。Socket CAN的接口被设计的尽量接近TCP/IP的协议,让熟悉网络编程的程序员能够比较容易的学习和使用。
使用Socket CAN的主要目的就是为用户空间的应用程序提供基于Linux网络层的套接字接口。与广为人知的TCP/IP协议以及以太网不同,CAN总线没有类似以太网的MAC层地址,只能用于广播。CAN ID仅仅用来进行总线的仲裁。因此CAN ID在总线上必须是唯一的。当设计一个CAN-ECU(Electronic Control Unit 电子控制单元)网络的时候,CAN报文ID可以映射到具体的ECU。因此CAN报文ID可以当作发送源的地址来使用
2.基于IMX6ULL-PRO开发板操作CAN设备
2.1查找can设备
ifconfig-a
2.2设置波特率
2.2.1先关闭CAN0
ifconfig can0 down
2.2.2 设置波特率为250k
ip link set can0 up type can bitrate 250000 triple-sampling on

遇到这种情况:需重新编译并替换iproute2的ip命令:
若错误持续,需重新编译并替换iproute2的ip命令:
-
下载
iproute2源码:wget https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/iproute2-3.10.0.tar.gz tar -xf iproute2-3.10.0.tar.gz cd iproute2-3.10.0
-
修改Makefile适配交叉编译:
makefile
CC = arm-linux-gnueabihf-gcc SUBDIRS=lib ip
-
编译并替换开发板的
ip命令:make -j4 mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs
cp /mnt/ip /usr/bin/
最后执行成功
2.2.3打开CAN0 设备
3.使用candump cansend,接收/发送实验
不能使用该两个命令,则需交叉编译,复制在开发板的/usr/bin/上

cp candump cansend /usr/bin/
3.1 cansend发送
cansend can0 123#01.02.03.04.05.06.07.08

3.2 cansend接收
candump -ta can0

4.电池管理系统数据采集实现(将采集电池数据存进Sqlite3)
4.1准备工作(交叉编译sqlite3数据库)
4.1.1参考链接:
SQLITE3【1】-SQLite向arm-imx6ull板子的移植_imx6ull sqlite3-CSDN博客
4.1.2.主要步骤:
1.官网下载sqlite3源码

2.源文件编译
3.移植至开发板上
cp libsqlite3.so.3.49.1 /home/book/nfs_rootfs
cp /lib/ /home/book/nfs_rootfs/lib2cp libsqlite3.so.3.49.1 /usr/lib/
ln -s libsqlite3.so.3.49.1 libsqlite3.so.3



3635

被折叠的 条评论
为什么被折叠?



