<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于MCP2515的Linux CAN總線驅動程序設計

          基于MCP2515的Linux CAN總線驅動程序設計

          作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏

          圖3 MCP2515硬件連接圖

          5.MCP2515 Socket CAN驅動實現(xiàn)

          FS2416平臺使用Linux2.6.39的內核,內核中為MCP2515提供了Socket CAN驅動程序,我們只需為MCP2515芯片配置內核選項就可以使用Socket編程的方式使用MCP2515 CAN總線。

          5.1 Socket CAN介紹

          Socket CAN是在Linux下CAN協(xié)議實現(xiàn)的一種實現(xiàn)方法。Linux下最早使用CAN的方法是基于字符設備來實現(xiàn)的,與之不同的是Socket CAN使用伯克利的Socket接口和Linux網(wǎng)絡協(xié)議棧,這種方法使得CAN設備驅動可以通過網(wǎng)絡接口來調用。Socket CAN的接口被設計的盡量接近TCP/IP的協(xié)議,讓那些熟悉網(wǎng)絡編程的程序員能夠比較容易的學習和使用。

          5.2 向Linux內核注冊MCP2515驅動

          向Linux內核添加SPI驅動在之前的文章已經(jīng)有詳細的介紹,根據(jù)硬件原理圖圖3所示,MCP2515掛在SPI0上,使用中斷GPF1,所以要向Linux內核注冊MCP2515設備,注冊代碼如圖4所示。

          圖4 MCP2515 SPI 注冊代碼

          注冊完成,執(zhí)行make menuconfig配置內核選項。

          1[*]Networking support->
          2<*>CAN bus subsystem support->
          3<*>Raw CAN Protocal
          4<*>Broadcast Manage CAN Protocal
          5CAN Device Drivers->
          6<*>Platform CAN driver with Netlink support
          7[*]CAN bit-timing calculation
          8<*>Microchip 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)修改完成執(zhí)行make命令,生成ip命令,拷貝到開發(fā)板文件系統(tǒng)目錄。

          (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五個工具,用于檢測和監(jiān)控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。執(zhí)行configure命令。(其中--host是指定交叉工具鏈,--prefix是指定庫的生成位置)
          ./configure --host=arm-none-linux-gnueabi --prefix=/home/linux/workdir/can/tools/libsocketcan
          (4)執(zhí)行make編譯庫;
          (5)執(zhí)行make install 生成庫。至此,libsocketcan編譯完畢。
          (6)解壓canutils-4.0.6.tar.bz2,執(zhí)行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)修改完成執(zhí)行make命令,生成四個目錄,分別拷貝到開發(fā)板文件系統(tǒng)的相應目錄。
          (8)使用canutils工具。(可以使用[命令 + --help]的方式來查看命令的詳細用法,下面只介紹一些常用的指令)



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();