linux下的pci

linux下的pci

ID:22631557

大小:53.00 KB

页数:8页

时间:2018-10-30

linux下的pci_第1页
linux下的pci_第2页
linux下的pci_第3页
linux下的pci_第4页
linux下的pci_第5页
资源描述:

《linux下的pci》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Linux下的PCI摘要本文研究了Linux下的PCI-Express高速数据采集卡的驱动程序,在内核空间申请了足够大的DMA循环缓冲区,从而满足了系统对高速数据实时采集处理的要求。分别实现了查询模式和中断模式下的驱动程序,并通过实验结果的分析表明了中断模式在其性能上的优异性,提出了PCI-Express设备驱动程序进一步优化的方向。关键词Linux;PCI-Express;DMA;设备驱动;中断1 引言PCI-Express已经成长为新一代的I/O总线技术的主流,已经在服务器、存储系统、通信系统、数据处理、传输系统等领域中得到广泛的应用。基于PCI-Expres

2、s总线的高速数据采集卡是信息处理系统中一个非常重要的设备,而驱动程序是硬件和操作系统之间的桥梁,对硬件设备的性能有着很大的影响,高效的驱动程序是实现高速数据实时采集、处理的一个重要保证。因此本文针对PCI-Express高速数据采集卡在Linux系统下的驱动程序进行了研究,并就如何设计和实现Linux下的驱动程序进行了深入的探讨。2 Linux设备驱动程序2.1 驱动程序的功能驱动程序的作用是应用程序与硬件之间的一个中间软件层,硬件通过驱动程序向应用程序展现其具有的功能。Linux将所有外部设备看成是一类特殊文件[1],称之为“设备文件”,如果说系统调用是Linu

3、x内核和应用程序之间的接口,那么设备驱动程序则可以看成是Linux内核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样来操作外部设备。Linux操作系统抽象了对硬件的处理,所有的硬件设备都可以像普通文件一样来看待:它们可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。Linux系统中的所有硬件设备都使用一个特殊的设备文件来表示,例如,系统中的第一个IDE硬盘使用/dev/hda表示。每个设备文件对应有两个设备号:一个是主设备号

4、,标识该设备的种类,也标识了该设备所使用的驱动程序;另一个是次设备号,标识使用同一设备驱动程序的不同硬件设备。设备文件的主设备号必须与设备驱动程序在登录该设备时申请的主设备号一致,否则用户进程将无法访问到设备驱动程序。2.2 设备和模块的分类Linux系统将设备分成字符设备(CharDevice)、块设备(BlockDevice)、X络设备(Netalloc该函数实现小于128KB的内核内存的申请,所申请的空间是物理连续的;__get_free_pages实现最大4MB的内存申请(在Linux2.6的内核下),以页为单位,一次申请或释放的页面数必须为2的幂,可一次

5、允许申请到的最大页面依赖于体系结构,一般为2的(10或11次幂)页面,所申请的空间物理连续;vmalloc虽然分配的虚拟地址空间是连续区域,但是在物理上可能是不连续的。此外,Linux内核还提供了一个专门用于PCI设备申请内核内存的函数pci_alloc_consistent,该函数支持按字节长度申请。通过对内核源代码的分析,该函数是通过__get_free_pages函数实现对内核内存的分配,因此,其一次可能的最大分配空间也是4MB[3]。从上面的分析可以看出,Linux2.6内核中能够用于分配DMA缓冲区的函数有三个:kmalloc、__get_free_pa

6、ges和pci_alloc_consistent,而且一次最大可分配的内存为4MB。因此在高速信号采集处理系统中,必须实现超过4MB的内核内存申请。在本驱动程序的实现中采用了一种类似数组的内存管理机制,用__get_free_pages函数连续申请DMA内存块,然后从这些块地址排序中找到符合要求的连续内存块集,将这些块组成满足驱动程序要求的DMA缓冲区。使用完毕后,再通过这套管理机制释放这些内存块。在这里需要说明的是,在大多数健全的系统上,申请DMA内存都是位于上面所述的区段,在x86平台上,DMA驱动是RAM的前16M;对于ISA等老的设备,进行DMA操作必须使

7、用DMA内存区段,虽然对于PCI设备,没有这个限制,但是通过查证相关资料和在实际多次实验中总结可得,用以往的方法对PCI设备申请内存最大也只能申请到11M。因此必须对内存申请进行深入的研究和理解后大胆的进行各种尝试,通过研究发现在64位的系统上根据设置不同的内存分配标志位能申请到更大的符合驱动程序需求的DMA内存。所以在本驱动程序中实现了大小为512M的DMA内存申请,最大可申请到1G大小的DMA内存(在实验中的操作系统为Linux2.6.9-42、双CPU双核、内存8G),从而有效的减少了后端软件处理数据时带来的抖动影响。另外,使用循环缓冲区能够有效地避免了系统

8、对内存的并

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

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

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