Linux PCI设备驱动程序开发 --- PCI 体系结构(一)

转载 2006年06月19日 17:29:00
<script type="text/javascript"><!-- google_ad_client = "pub-2299987709779770"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_type = "text_image"; google_ad_channel =""; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "0000ff"; google_color_url = "008000"; google_color_text = "000000"; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
       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总线的时钟频率一般在25MHz33MHz范围内,有些甚至能够达到66MHz或者133MHz,而在64位系统中则最高能达到266MHz。尽管目前PCI设备大多采用32位数据总线,但PCI规范中已经给出了64位的扩展实现,从而使PCI总线能够更好地实现平台无关性,现在PCI总线已经能够用于IA-32AlphaPowerPCSPARC64IA-64等体系结构中。
PCI总线具有三个非常显著的优点,使得它能够完成最终取代ISA总线这一历史使命:
  • 在计算机和外设间传输数据时具有更好的性能;
  • 能够尽量独立于具体的平台;
    <script type="text/javascript"><!-- google_ad_client = "pub-2299987709779770"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "image"; google_ad_channel =""; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_url = "008000"; google_color_text = "000000"; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 可以很方便地实现即插即用。
2是一个典型的基于PCI总线的计算机系统逻辑示意图,系统的各个部分通过PCI总线和PCI-PCI桥连接在一起。从图中不难看出,CPURAM需要通过PCI桥连接到PCI总线0(即主PCI总线),而具有PCI接口的显卡则可以直接连接到主PCI总线上。PCI-PCI桥是一个特殊的PCI设备,它负责将PCI总线0PCI总线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 RuslingThe Linux Kernelhttp://tldp.org/LDP/tlk/dd/pci.html)中对LinuxPCI子系统有比较详细的介绍。

<script type="text/javascript"><!-- google_ad_client = "pub-2299987709779770"; google_ad_width = 728; google_ad_height = 15; google_ad_format = "728x15_0ads_al_s"; google_ad_channel =""; google_color_border = "FFFFFF"; google_color_link = "0000ff"; google_color_bg = "FFFFFF"; google_color_text = "000000"; google_color_url = "008000"; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

Linux下PCI设备驱动程序开发 --- PCI驱动程序实现(三)

  • fengyv
  • fengyv
  • 2006年06月19日 17:43
  • 6293

Linux读取PCI设备的信息

读取PCI信息最近想要在linux系统下用代码读取PCI的设备信息,查看了以下网上的代码,稍微修改就可以了,现在贴出来以备以后使用。当然想要查看PCI的其他信息也只要在此基础继续修改读取更多的PCI信...
  • zhaoyunfullmetal
  • zhaoyunfullmetal
  • 2015年12月17日 18:57
  • 1432

PCI驱动访问设备内存方式

static int nvme_dev_map(struct nvme_dev *dev) { int bars, result = -ENOMEM; struct pci_dev *pdev ...
  • yuxinghai2008
  • yuxinghai2008
  • 2014年07月16日 11:18
  • 2000

Linux显示PCI设备

Linux显示PCI设备 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ lspci -tv -[0000:00]-+-00.0 Advanced ...
  • you23hai45
  • you23hai45
  • 2015年01月21日 20:49
  • 1294

PCI设备WINDOWS驱动程序的开发

PCI设备WINDOWS驱动程序的开发摘要:本文主要介绍了在Windows9x操作系统下开发PCI设备驱动程序的方法。关键词:PCI设备 驱动程序 PCI设备概述近几年来,随着诸如图形处理、图像处理、...
  • Augusdi
  • Augusdi
  • 2011年01月14日 09:00
  • 2929

linux驱动---用I/O命令访问PCI总线设备配置空间

PCI总线推出以来,以其独有的特性受到众多厂商的青睐,已经成为计算机扩展总线的主流。目前,国内的许多技术人员已经具备开发PCI总线接口设备的能 力。但是PCI总线的编程技术,也就是对PCI总线设备的操...
  • mao0514
  • mao0514
  • 2016年05月24日 16:35
  • 13651

Linux下PCI设备驱动程序开发 --- linux 驱动框架(二)

  • fengyv
  • fengyv
  • 2006年06月19日 17:36
  • 7444

设备驱动中的pci(kernel-4.7)

PCI 总线架构主要被分成三部分: 1.PCI 设备。 符合 PCI 总线标准的设备就被称为 PCI 设备,PCI 总线架构中可以包含多个 PCI 设备。Audio 、LAN 都是一个 PC...
  • viewsky11
  • viewsky11
  • 2017年01月19日 23:45
  • 419

PowerPC架构下Linux系统读写PCI设备

最近需要完成一个linux系统下的PCI驱动程序,然而处理器是PowerPC架构,以为在linux用户态就可以实现,但是发现不行。上一篇文章中通过I/O端口访问了PCI设备,但是x86家族之外的的处理...
  • zhaoyunfullmetal
  • zhaoyunfullmetal
  • 2016年01月21日 10:50
  • 1084

Linux设备驱动之pci设备的枚举(linux初始化时PCI设备识别)

一:前言 Pci,是Peripheral Component  Interconnect的缩写,翻译成中文即为外部设备互联.与传统的总线相比.它的传输速率较高.能为用户提供动态查询pci  deiv...
  • zhoujiaxq
  • zhoujiaxq
  • 2014年01月13日 17:12
  • 1995
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux PCI设备驱动程序开发 --- PCI 体系结构(一)
举报原因:
原因补充:

(最多只允许输入30个字)