为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Linux下的PCI-Express设备驱动程序的研究与实现(1)

2017-03-19 2页 doc 7KB 13阅读

用户头像

is_833902

暂无简介

举报
Linux下的PCI-Express设备驱动程序的研究与实现(1)Linux下的PCI-Express设备驱动程序的研究与实现(1) 摘 要 本文研究了Linux下的PCI-Express高速数据采集卡的驱动程序,在内核空间申请了足够大的DMA循环缓冲区,从而满足了系统对高速数据实时采集处理的要求。分别实现了查询模式和中断模式下的驱动程序,并通过实验结果的分析表明了中断模式在其性能上的优异性,提出了PCI-Express设备驱动程序进一步优化的方向。 关键词 Linux;PCI-Express;DMA;设备驱动;中断 1 引言 PCI-Express已经成长为新一代的I/O总线技术的主流,已...
Linux下的PCI-Express设备驱动程序的研究与实现(1)
Linux下的PCI-Express设备驱动程序的研究与实现(1) 摘 要 本文研究了Linux下的PCI-Express高速数据采集卡的驱动程序,在内核空间申请了足够大的DMA循环缓冲区,从而满足了系统对高速数据实时采集处理的要求。分别实现了查询模式和中断模式下的驱动程序,并通过实验结果的明了中断模式在其性能上的优异性,提出了PCI-Express设备驱动程序进一步优化的方向。 关键词 Linux;PCI-Express;DMA;设备驱动;中断 1 引言 PCI-Express已经成长为新一代的I/O总线技术的主流,已经在服务器、存储系统、通信系统、数据处理、传输系统等领域中得到广泛的应用。基于PCI-Express总线的高速数据采集卡是信息处理系统中一个非常重要的设备,而驱动程序是硬件和操作系统之间的桥梁,对硬件设备的性能有着很大的影响,高效的驱动程序是实现高速数据实时采集、处理的一个重要保证。因此本文针对PCI-Express高速数据采集卡在Linux系统下的驱动程序进行了研究,并就如何和实现Linux下的驱动程序进行了深入的探讨。2 Linux设备驱动程序2.1 驱动程序的功能 驱动程序的作用是应用程序与硬件之间的一个中间软件层,硬件通过驱动程序向应用程序展现其具有的功能。Linux将所有外部设备看成是一类特殊文件[1],称之为“设备文件”,如果说系统调用是Linux内核和应用程序之间的接口,那么设备驱动程序则可以看成是Linux内核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样来操作外部设备。Linux操作系统抽象了对硬件的处理,所有的硬件设备都可以像普通文件一样来看待:它们可以使用和操作文件相同的、的系统调用接口来完成打开、关闭、读写和I/O控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。 Linux系统中的所有硬件设备都使用一个特殊的设备文件来表示,例如,系统中的第一个IDE硬盘使用/dev/hda表示。每个设备文件对应有两个设备号:一个是主设备号,标识该设备的种类,也标识了该设备所使用的驱动程序;另一个是次设备号,标识使用同一设备驱动程序的不同硬件设备。设备文件的主设备号必须与设备驱动程序在登录该设备时申请的主设备号一致,否则用户进程将无法访问到设备驱动程序。2.2 设备和模块的分类 Linux系统将设备分成字符设备(Char Device)、块设备(Block Device)、网络设备(Network Device)三种基本类型。字符设备是个能够像字节流(类似文件)一样被访问的设备,是以字节为单位逐个进行I/O操作,在对字符设备发出读写请求后,实际的硬件I/O紧接着就发生了;块设备和字符设备类似,两者之间的区别仅仅在于内核内部管理数据的方式上,也就是内核及驱动程序之间的软件接口上。块设备则是利用一块系统内存作为缓冲区,当用户进程对设备进行读写请求时,驱动程序先查看缓冲区中的内容,如果缓冲区中的数据能满足用户的要求就返回相应的数据,否则就调用相应的请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,其目的是避免耗费过多的CPU时间来等待操作的完成。网络设备,任何网络事务都经过一个网络接口,即一个能够和其它主机交换数据的设备。 Linux系统下的设备驱动程序可以按照两种方式进行编译,一种是直接静态编译成内核的一部分,另一种则是编译成可以动态加载的模块。如果编译进内核的话,会增加内核的大小,还要改动内核的源文件,而且不能动态地卸载,不利于调试,因此推荐使用动态模块加载的方式。3 PCI-Express驱动程序设计与实现3.1 PCI-Express驱动程序实现的难点 传统的PCI/PCI-X总线传输最高突发速率是512Mbps,这远远不能满足对高速信号实时采集处理传输的需要,因此在设计时采用了PCI-Express总线来代替传统的PCI总线。PCI-Express与PCI在软件上兼容,但在硬件上改为串行差分传输,其主要优点是时延短、传输快、带宽提升潜力大和节省空间。PCI-Express采用的是点对点通信机制,各个插槽都将通过各自独享的通道发送和接收数据,这样就可以避免出现不同设备同时争抢系统和CPU资源的情况。PCI-Express有x1、x2、x4、x8、x16和x32多种线宽,如x1的传输带宽为2.5Gbps,x2为5Gbps,依次类推。 因此与以往PCI设备驱动程序在实现上不同的是基于Linux下的PCI-Express设备的驱动程序必须要注重考虑数据传输的速度和效率。以往的Liunx下PCI设备最大只能申请到11M的DMA内核缓冲区,显而易见这不能满足高速率数据传输的要求,同时在传输过程中对数据的抗抖动性也很差,因此为了能够很好的达到实际的应用要求,同时又能在数据传输过程中具有很好的抗抖动性,如何实现大容量的DMA内核缓冲区的申请、采用何种数据传输模式实现等等都是PCI-Express设备程序在设计时需要重点考虑和深入研究的。3.2 PCI-Express逻辑结构图 图1是PCI-Express高速数据采集卡逻辑图。PCI-Express高速数据采集卡对接入的光信号经过光电转换模块进行转换成电信号后,再经过一系列的相关处理后经PCI-Express总线传输通过驱动程序传输至应用软件进行处理,传输带宽为PCI-Express x4。即单方向具有10Gbps的传输带宽。本项目中实现的PCI-Express高速数据采集卡在Linux系统中可以被认为一种字符设备。 在用模块方式实现PCI-Express设备驱动程序时,通常至少要实现以下几个部分:初始化设备模块、设备打开模块、数据读写和控制模块、中断处理模块、设备释放模块、设备卸载模块等。因此本文下面对如何分配和实现大容量的DMA循环缓冲区、及DMA数据传输处理模式的选择作了重点的研究并进行了详细的阐述。
/
本文档为【Linux下的PCI-Express设备驱动程序的研究与实现(1)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索