1.准备

要在linux下面配置和测试CAN,需要安装以下三个组件。

iproute2 (配置CAN接口时需要)
libsocketcan(使用CAN必须)
can-utils (CAN的测试小工具,linux下测试CAN比较好用应用程序)

iproute2

https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/

libsocketcan

https://public.pengutronix.de/software/libsocketcan/

can-utils

Index of /software/socket-can/canutils

一般下载最新版本即可。

三者下载完毕后,按以下步骤

截至博主编写此贴,最新版本为

libsocketcan-0.0.12.tar.bz2

canutils-4.0.6.tar.bz2

iproute2-4.4.0.tar.gz

2.编译

2.1编译libsocketcan-0.0.12.tar.bz2

2.1.1解压

tar -jxvf libsocketcan-0.0.12.tar.bz2

2.1.2编译

2.1.2.1 进入libsocketcan-0.0.12

cd libsocketcan-0.0.12/

2.1.2.2 创建编译文件存放文件out

编译时会产生文件,因此先创建编译文件存放文件out

mkdir out

2.1.2.3 编译

./configure --host=arm-buidroot-linux-gnueabihf --prefix=/home/cityhonor/linux-can/libsocketcan-0.0.12/out

其中arm-buidroot-linux-gnueabihf是开发板的编译工具 /home/cityhonor/linux-can/libsocketcan-0.0.12是解压libsocketcan-0.0.12后的绝对路径

2.1.2.4 make

 make

2.1.2.5 安装

make install

编译完成后生成的库都在out/lib里,将这些库放到开发板的文件系统内,放在lib目录或usr/lib目录都可以

2.2编译canutils-4.0.6.tar.bz2

2.2.1解压canutils-4.0.6.tar.bz2

tar -jxvf canutils-4.0.6.tar.bz2

2.2.2创建编译文件存放文件

cd canutils-4.0.6 && mkdir out

2.2.3配置编译环境

./configure --host=arm-buidroot-linux-gnueabihf --prefix=/home/cityhonor/linux-can/canutils-4.0.6/out libsocketcan_LIBS=-lsocketcan  LDFLAGS="-L /home/cityhonor/linux-can/libsocketcan-0.0.12/out/lib/" libsocketcan_CFLAGS="-I /home/cityhonor/linux-can/libsocketcan-0.0.12/out/include"

复制libsocketcan-0.0.12/include下libsocketcan.h和can_netlink.h到include下

cp /home/cityhonor/linux-can/libsocketcan-0.0.12/include/libsocketcan.h /home/cityhonor/linux-can/libsocketcan-0.0.12/include/can_netlink.h ./include/

2.2.4编译安装

make

make install

out文件夹下回生成一堆文件,out/sbin目录下有canconfig工具,out/bin下有candump/canecho/cansend/cansequence四个工具,将out文件夹放置在开发板上即可使用

3.1移植iproute2(若开发板已支持iproute2,可跳过此步骤)

有两个方法

1.通过构建文件系统时在network添加支持iproute2(应用开发人员可能需要花费较多时间)

2.编译替换ip(介绍此方法)

tar -vxzf iproute2-4.4.0.tar.gz
 

3.1.1 解压tar -vxzf iproute2-4.4.0.tar.gz

3.1.2 设置编译工具
解压完成以后会得到一个名为“iproute2-4.4.0”的目录,进入此目录中,打开 Makefile 并
修改。在 Makefile 中找到下面这行:

CC := gcc 更改为arm-buildroot-linux-gnueabihf-gcc

arm-buildroot-linux-gnueabihf-gcc为板子编译工具

3.1.3 编译

在Makefile同级目录执行make

在Makefile同级目录产生ip文件里面有新的ip命令

3.1.4替换(注意,替换需谨慎)

通过网络挂载文件,拷贝到挂载点后(此处不介绍挂载),在目标开发板确认ip命令版本

cp -f ip /nfs_mount/

进入板子挂载点存放ip命令的路径

执行./ip -V

确认无误后替换掉sbin/ip

cp -f ip /sbin/ip

即可执行

附上can-utils 命令解析

* Examples:
 *
 * 123# -> standard CAN-Id = 0x123, len = 0
 * 12345678# -> extended CAN-Id = 0x12345678, len = 0
 * 123#R -> standard CAN-Id = 0x123, len = 0, RTR-frame
 * 123#R0 -> standard CAN-Id = 0x123, len = 0, RTR-frame
 * 123#R7 -> standard CAN-Id = 0x123, len = 7, RTR-frame
 * 123#R8_9 -> standard CAN-Id = 0x123, len = 8, dlc = 9, RTR-frame
 * 7A1#r -> standard CAN-Id = 0x7A1, len = 0, RTR-frame
 *
 * 123#00 -> standard CAN-Id = 0x123, len = 1, data[0] = 0x00
 * 123#1122334455667788 -> standard CAN-Id = 0x123, len = 8
 * 123#1122334455667788_E -> standard CAN-Id = 0x123, len = 8, dlc = 14
 * 123#11.22.33.44.55.66.77.88 -> standard CAN-Id = 0x123, len = 8
 * 123#11.2233.44556677.88 -> standard CAN-Id = 0x123, len = 8
 * 32345678#112233 -> error frame with CAN_ERR_FLAG (0x2000000) set
 *
 * 123##0112233 -> CAN FD frame standard CAN-Id = 0x123, flags = 0, len = 3
 * 123##1112233 -> CAN FD frame, flags = CANFD_BRS, len = 3
 * 123##2112233 -> CAN FD frame, flags = CANFD_ESI, len = 3
 * 123##3 -> CAN FD frame, flags = (CANFD_ESI | CANFD_BRS), len = 0
 *     ^^
 *     CAN FD extension to handle the canfd_frame.flags content

部分参考linux下can调试工具canutils安装与使用

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐