linux下pci设备驱动程序开发
内容: 一.pci总线系统体系结构 二.linux驱动程序框架 三.pci驱动程序实现 四.小结 参考资料 关于作者 在 linux 专区还有: 教程 工具与产品 代码与组件 项目 文章肖文鹏 (xiaowp@263.net) 【程序编程相关:给初学linux的一点忠告】
【推荐阅读:使用linux系统的tftp serve】北京理工大学计算机系,硕士研究生 【扩展信息:在 Linux 下访问无线局域网(ZT)】 2003 年 9 月 linux是一种日趋成熟完善的操作系统,越来越多的软硬件厂商开始使用linux平台来开发自己的产品,因而基于该平台的设备 驱动程序的需求也愈来愈多.pci是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如eisa)的新特性,目前已经成为计算机系统中应用最为广 泛,并且最为通用的总线标准.linux的内核能较好地支持pci总线,本文以intel 386体系结构为主,探讨了在linux下开发pci设备驱动程序的基本框架.一.pci总线系统体系结构
pci是外围设备互连(peripheral component interconnect)的简称,作为一种通用的总线接口标准,它在目前的计算机系统中得到了非常广泛的应用.pci提供了一组完整的总线接口规范,其 目的是描述如何将计算机系统中的外围设备以一种结构化与可控化的方式连接在一起,同时它还刻画了外围设备在连接时的电气特性与行为规约,并且详细定义了计 算机系统中的各个不同部件之间应该如何正确地进行交互.无论是在基于intel芯片的pc机中,或是在基于alpha芯片的工作站上,pci毫无疑问都是目前使用最广泛的一种总线接口标准.同旧式的 isa总线不同,pci将计算机系统中的总线子系统与存储子系统完全地分开,cpu通过一块称为pci桥(pci-bridge)的设备来完成同总线子系 统的交互,如图1所示.
图1 pci子系统的体系结构由于使用了更高的时钟频率,因此pci总线能够获得比isa总线更好的整体性能.pci总线的时钟频率一般在25mhz到33mhz范围内,有些甚 至能够达到66mhz或者133mhz,而在64位系统中则最高能达到266mhz.尽管目前pci设备大多采用32位数据总线,但pci规范中已经给出 了64位的扩展实现,从而使pci总线能够更好地实现平台无关性,现在pci总线已经能够用于ia-32.alpha.powerpc.sparc64与 ia-64等体系结构中.
pci总线具有三个非常显著的优点,使得它能够完成最终取代isa总线这一历史使命:
在计算机与外设间传输数据时具有更好的性能;能够尽量独立于具体的平台;可以很方便地实现即插即用.图2是一个典型的基于pci总线的计算机系统逻辑示意图,系统的各个部分通过pci总线与pci-pci桥连接在一起.从图中不难看出,cpu与 ram需要通过pci桥连接到pci总线0(即主pci总线),而具有pci接口的显卡则可以直接连接到主pci总线上.pci-pci桥是一个特殊的 pci设备,它负责将pci总线0与pci总线1(即从pci主线)连接在一起,通常pci总线1称为pci-pci桥的下游(downstream), 而pci总线0则称为pci-pci桥的上游(upstream).图中连接到从pci总线上的是scsi卡与以太网卡.为了兼容旧的isa总线标准, pci总线还可以通过pci-isa桥来连接isa总线,从而能够支持以前的isa设备.图中isa总线上连接着一个多功能i/o控制器,用于控制键盘. 鼠标与软驱.
图2 pci系统示意图在此我只对pci总线系统体系结构作了概括性介绍,如果读者想进一步了解,david a rusling在the linux kernel(http://tldp.org/ldp/tlk/dd/pci.html)中对linux的pci子系统有比较详细的介绍.
二.linux驱动程序框架
linux将所 有外部设备看成是一类特殊文件,称之为“设备文件”,如果说系统调用是linux内核与应用程序之间的接口,那么设备驱动程序则可以看成是linux内核 与外部设备之间的接口.设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样来操作外部设备.1. 字符设备与块设备
... 下一页