论文研究-嵌入式uClinux下CAN总线设备驱动程序设计 .pdf

所需积分/C币:16 2019-08-18 09:48:02 296KB .PDF
收藏 收藏
举报

嵌入式uClinux下CAN总线设备驱动程序设计,王月庆,郭卫栋,本文介绍了嵌入式uClinux下设备驱动程序的结构,描述了CAN总线设备驱动程序的软件构架以及将CAN设备驱动程序加入到uClinux系统内核的过�
山国科技论文在线 http://www.paper.edu.cn (4)允许CAN设备同吋收发多路数据。 33CAN接口卡驱动程序的处理流程 用户进程通过系统调用向驱动稈序传送一帧仟意长度的数据,驱动稈序中发送数据的程 序按照 Hilon a协议将该帧分段打包,放入发送队列,并向CAN控制器请求发送,由中断 处理程序中发送部分负责发送完所有的数据包。当CAN通信卡接收到数据时,产生接收中 断,启动接收中断处理程序上半部将CAN控制器中接收缓冲器中的内谷复制到接收队列中, 由中断处理的下半部负责解包和组帜的仼务,并将处理完的帧放入接受帧队列中,最后用户 使用系统调用从接收帧队列中读取完整的一帧 CAN设备驱动程序的处理框图如图3所示。 接受队列 按受祯队列 处理 部 中断处理 :半部 发送队y 图3CAN设备驱动程序的处理框图 4CAN接口卡的 u Clinux设备驱动程序的模块化程序设计 根据 u clinux对设备驱动程序的要求,设计出的模块化的CAN驱动程序软件结构如图4 所示 Can core CarCarCar car ia car rel car w Can close Car opc selec! exit t ad rite Can mmac eceIve Car-veCar_W Car_Fil car orlnif aitlnif folnit 图4CAN驱动程序软件结构图 41初始化加载和卸载部分 设备驱动程序以模块形式加入内核时,会调用加载模块 module init和卸载模块 module exit进行工作。为体现软件设计屮的直观原则,本驱动程序把这两个模块分别更名为 山国科技论文在线 http://www.paper.edu.cn can init和 can exit 在 can init中,驱动程序向系统进行登记,以便系统在适当的时候调用。 uclinux系统里 通过调用 register chrdev函数向系统注册字符型设备驱动程序。 register chrdev函数定 int register chrdev (unsigned int major, const char name, struct flle-operations " fops) 其中, major是主设备号,如果该值为0,则系统将为此驱动程序动态地分配一个主设备 号;name是设备名;fops是对各个系统调用的入口点的说明。 同理,在 can Cx11中,驱动程序要使用 unregister chrdevl函数向系统取消登记。 CAN设备使用中断与系统进行数据交换,同时CAN设备驱动程序也需要使用内存来缓 冲冇储接收数据和发送数据ε相应的中断和内存资源的管理都要设备驱动程序来完成。但是, 系统加载了设备驱动程序不等于打开了设备,应用程序可以调用驱动程序中的 can open进行 设备的打开。为了有效的利用系统资源,木设备驱动程序在 can open中中请内存和中断资源 时,分别由子程序 can fifoinit和 can wendorinit来完成,而不是在 can init中申请资源。 can open 同吋完成等待队列的初始化、过滤器的初始化和对CAN控制器的打开唤起任务。 can close 则完成与 can open相应的反操作。 42中断处理部分 uclinux中坳处理程序可以分为上半部和下半部两部分。上半部是一般的中断服务程序, 由硬件中断触发,应当尽可能短小,处理尽可能快;而卜半部是单独的一段处理程序,一般 将其挂入立即队列中以便快迩执行。立即队列中的仼务在退出系统调用或调度器准许运行 寸,将最优先地被执行。下半部在一个安全的环境中运行,即开中断和仁务串行化,可以处 理一些运行时间较长的任务 当有接收中断时,CAN设备驱动程序的中断处理程序上半部首先获取驱动程序接收缓 存中的空闲块,将CAN设备上的接收缓冲器中数据复制到驱动程序的接收缓存中,释放CAN 设备接收缓冲器,然后将下半部处理函数挂入立即队列,最后激活立即队列:当有发送中断 时,CAN设备驱动程序的中断处理程序上半部首先获取发送缓冲队列中的数据,将需要发 送的数据写到CAN控制器的发送缓冲器中,请求发送 CAN设备驱动程序的中断处理程序下半部使用 Hilon a协议对要传送到CAN网络上的 数据打包,并对从CAN网络上接收到的数据进行解包和组帧。这样中断处理程序的上半部 只需要从CAN通信卡的缓冲器屮将数捃复制到驱动程序的缓冲区,系统开销很小,但很占 用CPU时间;系统开俏较大的打包、解包和组帧处理则放在中断处理程序的下半部,使用系 统非中断时间调度,可以使系统响应中断更快,通信更稳定。 43缓冲区管理 在CAN设各驱动程序中,为了增强CAN设备的通信能力、提高通信效率,根据CAN的 特点,使用两级缓冲区结构,即直接面向CAN设备的收发缓冲区和直接面向系统调用的收 发帧缓冲区。 由于CAN设备上接收和发送缓冲器每次只接收一帻CAN数据,而且根据CAN的通讯协 议,CAN控制器的发送缓冲器由1个字节的标识符、一个字节的RTR和DLC位及8个字节的 数据区组成,共10个字节;接收缓冲器与之类似,也有10个字节的寄存器。所以CAN控制 尜收发的数据是短小的定长帧(数据可以不满8字节)。驱动程序使用 canmsg t结构缓冲存储 帧的数据 CAN通讯中的收发帧缓冲区一般采用循坯队列,使用坏形的帧缓冲区可以使得读写并 山国科技论文在线 http://www.paper.edu.cn 发执行,读进程和写进程可以采用“生产者和消费者”的模型来访问帧缓冲区,从而方便了缓 存的使用和管理。在本设计中釆用改进了的 canbus t的数据结构作为收发数据的帧缓冲区, 可以较大地提高数据的收发效率。 canbus t结构如下"S: typedef struct int head int tail: int cnt: // count or used datas canmsg t data[MAX BUFSIZeI 3 canbus t; 该数据结构在通用的环形队列上增加了个数据成员cnt,它衣示当前缓冲区中有帧的 空间被占用了。使用cnt,可以比较方便地进行缓冲区满或空的判断。当cnt-O时,缓冲区空 当cnt= MAX BUFSIZE-1时,缓冲区满。 44服务于l/O请求的部分 这部分实际上是应用程序唯一可见的,应用程序通过系统来调用这部分程序,是设备驱 动程序对应用程序的接∏。本驱动程序提供文件操作接∏。 uclinux系统中,字符型设备驱 动程序提供的文件梁作入口点由 file operations结构体米向系统说明。下面给出了 file operations结构体屮的一些主要成员: struct file operations i struct module *owner loff t(llscck)(struct file * loff t, int) ssize t( read)(struct file char*, size t, loff t*) ssize t write)(struct file const char size t, lofft) int (readdir)(struct file void*, filldir t unsigned int poll)(struct filc * struct poll tablc struct *) int (ioctl)(struct inode struct file * unsigned int, unsigned long) int( mmap)(struct file struct vm area struct * t inode, struct file ) int (release)(struct inode struct file (fsync)(struct file struct de int datasync 该结构定义了十多个操作入口点,但是驱动程序没有必要对每个入口点进行定义。根据 需要,本驱动程序实现了部分重要的设备方法,定义结构 can fops如下 static struct file operations can fops=& can read write can write 11. can select tl can ioctl release: can close can open方法负责打开CAN设备,检査CAN设备是否凵被打井,完成can设备的初始化 设置设备的占用标志。 can release方法负责关闭CAN设备。 山国科技论文在线 http://www.paper.edu.cn can-read方法负责检查设备有没有接收到完整的帧, can read凼数只是判断是否有完整的数 据帧可读。要获取数据帧,可以使用ioct的 RECEIVE命令。 can write方法负责向CAN设 各发送数据。如果发送队列冇足够的空间,则向设备传送数据,也可以使用ioct“SEND 命令来实现 can write can ioctl)法负责向CAN设备发送各种操作命令,命令代码通过cmd 参数传送,命令参数通过arg参数传送。本驱动程序提供了一些命令,配合 can rcad和 can write可以实现对CAN设备的控制。 RECEIVE命令可以从CAN设备上读取数据帧; SEND命令可以向CAN设备发送数据;CONF命令可以设置CAN设备的运行参数; STATUS 命令可以读取CAN设备的运行参数和查询CAN总线状态。 5.总结 本文详细介绍了嵌入式 uClinux下CAN设备驱动程序的设计。该驱动程序考虑到CAN设 各的特点和CAN网络传输数据的特点,根据CAN总线的通信协议,设计了合理的数据结构 和缓存管理方法,使得当有大量数据进岀CAN设备时,既可以侏证数据帧丟失和出错儿率 在允许范围内,乂可以侏证数据帧能被快速下发和接收。实践证明该驱动程序正确可行,性 能良好。CAN总线是种优秀的现场总线,广大的开发者可以借助于 u clinux系统在嵌入式 应用中灵活的开发基于CAN总线通信的相关产品。 -6 山国科技论文在线 http://www.paper.edu.cn 参考文献 [1 Gianluca Cena, Luca Durante, Adriano Valenzano. A new CAN-like field network based on a star topology J]. Computer Standards& Interfaces,2001,23: 209-222 [2] Devaraj Ayavoo, Michael J. Pont, Michael Short, Stephen Parker. Two novel shared-clock scheduling algorithms for usc with" Controller Arca Nctwork' and rclated protocols [J]. Microproccssors and Microsystems 2007,31:326334 [3] Josc Luis Scvillano, Arturo Pascual, Cabricl Jimcncz, Anton Civit-Balclls. Analysis of channel utilization for controller arca nctworks [J]. Computcr Communications, 1998, 21:1446-1451 [4]邬宽眀.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版社,1996 L5」饶运涛,邹继军,郑勇芸.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社 2003. [6]杨波,徐成,李仁发.嵌入式 LINUX上的CAN设备驱动程序的设计[J].计算技术与工程,2004, 4(12):1019-1023. [7]邹思轶.嵌入式 Linux设计与应用(第一版本)[M].北京:清华大学出版社,2002,1. [8] Alessandro rubini. Linux设备驱动程序[M]. Lisoleg.北京:中国电力出版社,2000 The design of can-bus device driver in the embedded uClinux Operating System Wang Yueqing, Guo Weidong, Wang Jingjing, Deng Xingsong Department of Computer &Information Engineering, Hohai University, Changzhou China(213022) Abstract The structure of the device drivers in the embedded uclinux operation system is introduced, the software framework of the CAN-bus Device Driver(CDD )and the process of adding the driver into the uClinux kernel are also described in this paper. An interruption programe is well designed according to features of the uClinux operation system, The data structure and management methodology of the cdd are properly designed based on the features of the can protocol. The result shows that this device driver programe is correct and effective, and the capability and efficiency of communication are improved Keywords: u Clinux CAN-bus device driver 作者简介:王月庆,男,1982年生,倾士研究生,主要研究方向是智能信息系统、嵌入式 与道信电子。

...展开详情
试读 7P 论文研究-嵌入式uClinux下CAN总线设备驱动程序设计 .pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
抢沙发
一个资源只可评论一次,评论内容不能少于5个字
上传资源赚积分,得勋章
最新推荐
论文研究-嵌入式uClinux下CAN总线设备驱动程序设计 .pdf 16积分/C币 立即下载
1/7
论文研究-嵌入式uClinux下CAN总线设备驱动程序设计 .pdf第1页
论文研究-嵌入式uClinux下CAN总线设备驱动程序设计 .pdf第2页

试读结束, 可继续读1页

16积分/C币 立即下载 >