linux龙芯LS1B socketCAN测试(含canutils安装)
1.硬件
这里采用龙芯LS1B的开发板,linux内核版本 3.18.0,使用龙芯内置的CAN0总线进行通信测试。包含mips平台下的canutils安装。
2.配置linux内核
首先在linux内核选项如下,使能CAN总线,
[*] Networking support --->
<*> CAN bus subsystem support --->
CAN Device Drivers --->
<*> Platform CAN drivers with Netlink support
[*] CAN bit-timing calculation
<*> Philips/NXP SJA1000 devices --->
<*> Generic Platform Bus based SJA1000 driver
[*] Loongson1 CAN Controller 0
注:这里还需要配置使能pwm0,不然就会提示:can0:bit-timing not yet defined
Device Drivers --->
[*]Pulse-Width Modulation (PWM) Support --->
<*>Loongson1 PWM support
[*] PWM0 support
重新编译内核,当内核起动后,打印如下信息,说明龙芯内置CAN配置成功
3.安装canutils
3.1下载源码
标题
下载canutils和libsocketcan
libsocketcan地址:https://public.pengutronix.de/software/libsocketcan/libsocketcan-0.0.11.tar.bz2
canutils地址:https://public.pengutronix.de/software/socket-can/canutils/v4.0/canutils-4.0.6.tar.bz2
3.2编译libsocketcan
tar -jxvf libsocketcan-0.0.11.tar.bz2
进入解压后目录,配置
./configure --host=mipsel-linux --prefix=/home/alice/cantest/libsocketcan/
编译安装
make
make install
在libsocketcan/生成3个文件夹如下
3.2 编译canutils
解压
tar -jxvf canutils-4.0.6.tar.bz2
cd ./canutils-4.0.6
将 libsocketcan 里面的头文件 libsocketcan.h can_netlink.h 复制到 canutils 的 include 里面,不然会报错
配置,编译安装
./configure --host=mipsel-linux --prefix=/home/alice/cantest/canutils/ libsocketcan_LIBS=-lsocketcan LDFLAGS="-L/home/alice/cantest/libsocketcan/lib" libsocketcan_CFLAGS=-I/home/alice/cantest/libsocketcan/include
make
make install
4.配置龙芯CAN0
将canutil生成的文件bin目录拷到开发板中
停止can0通信,
./canconfig can0 stop
设置波特率,为250kbps
./canconfig can0 bitrate 250000
起动can0
./canconfig can0 start
如下所示,起动成功
[root@DMF:bin]#./canconfig can0 stop
can0 state: STOPPED
[root@DMF:bin]#./canconfig can0 bitrate 250000
sja1000_platform sja1000_platform.0 can0: setting BTR0=0x0a BTR1=0x1b
can0 bitrate: 250000, sample-point: 0.866
[root@DMF:bin]#./canconfig can0 start
can0 state: ERROR-ACTIVE
5.CAN0收发测试
打开can接收通信,通过USB-CAN Toos发送数据,开发板收到的can数据显示如下:
通过开发板cansend发送数据,USB-CAN Toos接收数据如下图
[root@DMF:bin]# ./cansend can0 -i 0x123 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
interface = can0, family = 29, type = 3, proto = 1