can通信卡的linux设备驱动程序设计实现

can通信卡的linux设备驱动程序设计实现

ID:10932368

大小:54.00 KB

页数:4页

时间:2018-07-09

can通信卡的linux设备驱动程序设计实现_第1页
can通信卡的linux设备驱动程序设计实现_第2页
can通信卡的linux设备驱动程序设计实现_第3页
can通信卡的linux设备驱动程序设计实现_第4页
资源描述:

《can通信卡的linux设备驱动程序设计实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、CAN通信卡的Linux设备驱动程序设计实现

2、第1摘要:介绍了Linux下设备驱动程序的结构,描述了CAN通信卡设备驱动程序的软件框架以及如何将CAN设备驱动程序加入到Linux系统内核中。讨论了具体实现中为了提高通信效率和通信能力,改进设备驱动程序的缓冲区管理以及利用Linux的特点合理设计中断处理程序。目前,许多工业现场如电力系统、化工系统等大量使用控制器局部网(CAN-ControllerAreaNetouseg(this)">Linux将每个设备看作一个文件,即可以像对待文件那样使用read、ous

3、eg(this)">2CAN通信卡设备驱动程序的模块化程序设计根据Linux对设备驱动程序的要求,模块化的CAN驱动程序软件结构如图3。2.1初始化加载和卸载部分如果设备驱动程序以模块方式加入内核,则一定会包括两个模块init_module和clear_module。init_module模块用来加载设备,系统初始化时调用;clear_module模块用来卸载设备,取消设备时调用。设备驱动程序是系统内核的一部分。在任何程序使用设备驱动程序之前,设备驱动程序应该向系统进行登记,以便系统在适当的时候调用。Lin

4、ux系统里,通过调用register_chrdev函数向系统注册字符型设备驱动程序。Register_chrdev定义为:intregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops);其中,major是为设备驱动程序向系统申请的主设备号,如果为0则系统为此驱动程序动态分配一个主设备号;name是设备名;fopsa是对各个系统调用的入口点的说明。CAN通信卡使用中断与系统交换数据,CAN设备驱动程序需要使用内存来缓

5、存接收到的数据和发送的数据,中断和内存等资源是由Linux系统统一管理的,设备驱动程序在初始化时,需要申请资源。在资源不用的时候,应该释放它们,以利于资源的共享。在Linux系统里,对中断的处理是属于系统核心的部分,设备驱动程序通过调用request_irq()函数来申请中断,通过free_irq()函数来释放中断。作为系统核心的一部分,设备驱动程序在申请和释放内存时不是调用malloc()函数和free()函数,而代之以调用kmalloc函数和kfree()函数。在init_module模块中,先检查是否

6、存在CAN通信卡,如果不存在则退出设备驱动程序的加载;如果存在,使用request_irq()函数为CAN通信卡申请系统中空闲的中断,使用kmalloc()为设备驱动程序申请输入输出缓存队列,如果这些资源申请不成功,则释放已经申请到的系统资源,然后退出设备驱动程序的加载,如果申请成功,使用register_chrdev()函数将CAN通信卡驱动程序注册到Linux系统中,加载完成。在cleanup_module模块中先使用free_irq()函数释放init_module模块中申请到的中断,然后使用kfre

7、e()函数释放init_module模块中申请到的内存空间,最后使用unregister_chrdev()函数释放init_module模块中注册的设备驱动程序,卸载完成。2.2CAN通信卡设备驱动程序的中断处理部分Linux中断处理程序可以分为上半部和下半部。上半部即一般的中断服务程序,由硬件中断触发,它一般运行在关中断的方式下,应当尽可能短小,处理尽可能快;而下半部是单独的一段处理程序,一般将其挂入立即队列中以便快速执行。立即队列中的任务在退出系统调用或调度器获得运行时,将最优先地被执行。下半部运行在一

8、个安全的环境,即开中断和任务串行化,可以处理一些较花时间的任务。这样,驱动程序上半部在处理完实时性很强的任务后,用queue_task()函数将下半部处理函数持入立即队列,并用mark_bh()函数来激活立即队列,则下半部可以最优先地被执行。当有接收中断时,CAN通信卡设备驱动程序的中断处理程序上半部首先获取驱动程序接收缓存中的空闲块,将CAN通信卡上的接收缓冲器中数据复制到驱动程序的接收缓存中,释放CAN通信卡接收缓冲器,然后将下半部处理函数挂入立即队列,最后激活立即队列。当有发送中断时,CAN通信卡设备

9、驱动程序的中断处理程序上半部首先获取发送缓冲队列中的数据,将需要发送的数据写入CAN控制器的发送缓冲器,最后请求发送。CAN通信卡设备驱动程序的中断处理程序下半部使用HilonA协议对要传送到CAN网络上的数据打包,并对从CAN网络上接收到的数据进行解包和组帧。这样中断处理程序的上半部只需要从CAN通信卡的缓冲器中将数据复制到驱动程序的缓冲区,系统开销很小,但很费CPU时间;系统开销较大的打包、解包和组帧处理则放

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。