linux内核 can总线,基于MCP2515的Linux CAN总线驱动程序设计

20150508022747671.jpg

图3  MCP2515硬件连接图

5.MCP2515 Socket CAN驱动实现

FS2416平台使用Linux2.6.39的内核,内核中为MCP2515提供了Socket CAN驱动程序,我们只需为MCP2515芯片配置内核选项就可以使用Socket编程的方式使用MCP2515 CAN总线。

5.1 Socket CAN介绍

Socket CAN是在Linux下CAN协议实现的一种实现方法。Linux下最早使用CAN的方法是基于字符设备来实现的,与之不同的是Socket CAN使用伯克利的Socket接口和Linux网络协议栈,这种方法使得CAN设备驱动可以通过网络接口来调用。Socket CAN的接口被设计的尽量接近TCP/IP的协议,让那些熟悉网络编程的程序员能够比较容易的学习和使用。

5.2 向Linux内核注册MCP2515驱动

向Linux内核添加SPI驱动在之前的文章已经有详细的介绍,根据硬件原理图图3所示,MCP2515挂在SPI0上,使用中断GPF1,所以要向Linux内核注册MCP2515设备,注册代码如图4所示。

20150508022748964.jpg

图4  MCP2515 SPI 注册代码

注册完成,执行make menuconfig配置内核选项。

1    [*]Networking support->

2    CAN bus subsystem support->

3    Raw CAN Protocal

4    Broadcast Manage CAN Protocal

5    CAN Device Drivers->

6    Platform CAN driver with Netlink support

7    [*]CAN bit-timing calculation

8    Microchip MCP251x SPI CAN controllers

9

10    Device drivers->

11    [*]SPI support ->

12     Samsung S3C2416 series type SPI

编译内核,内核启动如图5显示即说明MCP2515驱动加载成功。

20150508022748721.jpg

图 5  内核加载提示

6.Socket CAN测试

因为最新版BusyBox对Socket CAN的不支持,所以为了测试和使用Socket CAN,我们需要自己编译Socket CAN的工具。这里介绍两个工具,分别是iproute2 和 canutils。

6.1 iproute2

(1)下载iproute2的最新源码http://www.kernel.org/pub/linux/utils/net/iproute2/ 。笔者下载的是iproute2 3.6.0。

(2)解压iproute2-3.6.0.tar.xz,修改Makefile第33行。

33 #CC = gcc

34 CC = arm-none-linux-gnueabi-gcc

(3)因为我们只需要iprout2的ip命令,所以修改Makefile的第42行。

42 #SUBDIRS=lib ip tc bridge misc netem genl man

43 SUBDIRS=lib ip

(4)修改完成执行make命令,生成ip命令,拷贝到开发板文件系统目录。

(5)使用ip命令。

ifconfig can0 down         //关闭can0,以便配置

./ip link set can0 up type can bitrate 250000         //设置can0波特率

./ip -details link show can0        //显示can0信息

20150508022748584.jpg

图6  iproute 使用简介

6.2 canutils

Canutils是基于GNU GPLv2许可的开源代码,包括canconfig、canecho、cansend、candump、cansequence五个工具,用于检测和监控Socket CAN接口。

(1)下载canutils的最新源码http://www.pengutronix.de/software/socket-can/download/canutils 。笔者下载的是canutils 4.0.6。

(2)因为canutils编译需要libsocketcan库的支持,需要下载libsocketcan。 http://www.pengutronix.de/software/libsocketcan/download/ 笔者下载的是libsocketcan 0.0.9。

(3)解压libsocketcan-0.0.9.tar.bz2。执行configure命令。(其中--host是指定交叉工具链,--prefix是指定库的生成位置)

./configure --host=arm-none-linux-gnueabi --prefix=/home/linux/workdir/can/tools/libsocketcan

(4)执行make编译库;

(5)执行make install 生成库。至此,libsocketcan编译完毕。

(6)解压canutils-4.0.6.tar.bz2,执行configure命令。(其中--host是指定交叉工具链,-- prefix是指定库的生成位置,libsocketcan_LIBS是指定canconfig需要链接的库,LDFLAGS是指定外部库的路 径,CPPFLAGS是指定外部头文件的路径)

./configure --host=arm-none-linux-gnueabi --prefix=/home/linux/workdir/can/tools/canutils libsocketcan_LIBS=-lsocketcan LDFLAGS=-L/home/linux/workdir/can/tools/socketcan/lib CPPFLAGS=-I/home/linux/workdir/can/tools/socketcan/include

(7)修改完成执行make命令,生成四个目录,分别拷贝到开发板文件系统的相应目录。

(8)使用canutils工具。(可以使用[命令 + --help]的方式来查看命令的详细用法,下面只介绍一些常用的指令)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值