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
所示。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/fengyv/1.jpg)
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
控制器,用于控制键盘、鼠标和软驱。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/fengyv/2.jpg)
2 PCI系统示意图
在此我只对
PCI
总线系统体系结构作了概括性介绍,如果读者想进一步了解,
David A Rusling
在
The Linux Kernel
(
http://tldp.org/LDP/tlk/dd/pci.html
)中对
Linux
的
PCI
子系统有比较详细的介绍。