图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所示。

图4 MCP2515 SPI 注册代码

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

1[*]Networking support->

2CAN bus subsystem support->

3Raw CAN Protocal

4Broadcast Manage CAN Protocal

5CAN Device Drivers->

6Platform CAN driver with Netlink support

7[*]CAN bit-timing calculation

8Microchip MCP251x SPI CAN controllers

9

10Device drivers->

11[*]SPI support ->

12 Samsung S3C2416 series type SPI

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

图 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信息

图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]的方式来查看命令的详细用法,下面只介绍一些常用的指令)

Spi cp2515 linux,基于MCP2515的Linux CAN总线驱动程序设计相关推荐

  1. Linux字符设备驱动程序开发(4)-LED驱动程序设计

    这里编写一个LED内核驱动代码.流程大概如下: 1.实现一个内核模块. 2.添加字符设备驱动框架. 3.在字符设备驱动中实现open和ioctl函数. 4.编写应用程序. led.c #include ...

  2. linux驱动向不同串口发数据,Linux串口(serial、uart)驱动程序设计

    一.核心数据结构 串口驱动有3个核心数据结构,它们都定义在 1.uart_driver uart_driver包含了串口设备名.串口驱动名.主次设备号.串口控制台(可选)等信息,还封装了tty_dri ...

  3. linux内核串口接入pps,Linux串口(serial、uart)驱动程序设计

    一.核心数据结构 串口驱动有3个核心数据结构,它们都定义在 1.uart_driver uart_driver包含了串口设备名.串口驱动名.主次设备号.串口控制台(可选)等信息,还封装了tty_dri ...

  4. c 调用 linux驱动程序,Linux下的C编程实战(五)――驱动程序设计

    Linux下的C编程实战(五) ――驱动程序设计 1.引言 设备驱动程序是操作系统内核和机器硬件之间的接口,它为应用程序屏蔽硬件的细节,一般来说,Linux的设备驱动程序需要完成如下功能: (1)初始 ...

  5. linux平台实现USB虚拟总线驱动一(原理以及开发流程)

    by fanxiushu 2019-11-07 转载或引用请注明原始作者. 之前的文章阐述过在windows平台下,如何实现USB虚拟总线驱动, 以及如何在windows平台采集真实USB设备的数据, ...

  6. CE下基于Zylonite硬件平台的SD卡驱动开发

    摘要:本文结合实际项目(一款以WINCE为操作系统内核的GSM/PHS双模智能手机)对嵌入式系统Windows CE5.0的底层驱动(SD卡)的架构进行了分析和研究,以MARVELL公司提供的基于IN ...

  7. 基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录

    基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录 硬件环境 正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2) 底板+核 ...

  8. linux内核SPI总线驱动分析(一)

    下面有两个大的模块: 一个是SPI总线驱动的分析            (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) SPI总线驱动分析   1 SPI概述     ...

  9. 基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动

    基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动 1.硬件电路 2.LCD实物图 3.LCD 的驱动 4.uboot配置 4.1.配置文件 4.2.uboot设备树 5.kern ...

最新文章

  1. 2020年度“社区之星”出炉!原来社区里的技术大佬们是这样成长起来的!
  2. Docker初次见面
  3. 把文档放到PNG图片中
  4. 在.m中的@interface (原创)
  5. win7组策略-计算机配置,win7系统组策略设置系统配置模块的操作方法
  6. 史上最详细的SSM框架整合(Spring、SpringMVC、Mybatis)
  7. redis和kafka读取代码
  8. jQuery Mobile 手动显示ajax加载器,提示加载中...
  9. 学生机房管理服务器系统设计,广东工业大学数据库课程设计机房管理系统设计...
  10. Linux运维学习大纲
  11. 机器学习基础(三十五)—— 协同过滤(从匹配用户到匹配商品)
  12. matlab迭代算法实例_【优化求解】基于NSGA2的求解多目标柔性车间调度算法
  13. 深度学习 占用gpu内存 使用率为0_2020年深度学习最佳GPU一览,看看哪一款最适合你!...
  14. 练手小程序之约瑟芬杀人法
  15. 计算机组装与维目实训内容,计算机组装与维实训报告书(原版).doc
  16. 软件工程复习题-快来划重点
  17. 荣耀最强拍照手机诞生:荣耀20系列塑造的“潮流科技宇宙”
  18. 阿里云物联网平台设备之间通讯、数据转发
  19. 如何用python绘制灰度直方图_python可视化
  20. Mybatis-Spring源码分析(五) MapperMethod和MappedStatement解析

热门文章

  1. JSP实战————留言版实现
  2. 怎么下载全国省市县行政区划边界
  3. 【H.264】H.264 解析 工具、web解析
  4. 【杂谈】一种C#防作弊检测手段
  5. oracle19C 无法登录OEM 解决
  6. php全文搜索视频教程,【php启用sphinx全文搜索的实现要领】_PHP技巧_电脑技术学习,计算机学习网站,电脑维修技术教程,培训资料学习网-OAWHY...
  7. 端口随意开很危险 常见端口解析
  8. JetBrains 激活方式的区别
  9. android面板不自动隐藏,【图片】折腾了几天 没办法完美隐藏。最后只能选择沉浸了打开软件导航栏自动消失桌面还是会一直出现的【三星s8吧】_百度贴吧...
  10. 2021年低压电工考试及低压电工考试总结