第六章 PCI
外围设备互连(PCI)是一种将系统中外部设备以结构化与可控制方式连接到起来的总线标
准,包括系统部件连接的电气特性及行为。本章将详细讨论 Linux 核心对系统中的 PCI 总
线与设备的初始化过程。
图 6.1 一个基于 PCI 的系统示意图
图 6.1 是一个基于 PCI 的系统示意图。PCI 总线和 PCI-PCI 桥接器在连接系统中设备到
上起关键作用,在这个系统中 CPU 和视频设备被连到 PCI bus
0 上,它是系统中的主干 PCI 总线。而 PCI-PCI 桥接器这个特殊 PCI 设备将主干总线 PCI
bus 0 与下级总线 PCI bus 1 连接到一起。PCI 标准术语中,PCI bus 1 是 PCI-PCI 桥接器
的 downstream 而 PCI bus 0 是此桥接器的 up-stream。SCSI 和以太网设备通过二级
PCI 总线连接到这个系统中。而在物理实现上,桥接器和二级 PCI 总线被集成到一块 PCI 卡
上。而 PCI-ISA 桥接器用来支持古老的 ISA 设备,图中有一个高级 I/O 控制芯片来控制键盘、
鼠标及软盘设备。
6.1 PCI 地址空间
CPU 和 PCI 设备需要存取在它们之间共享的内存空间。这块内存区域被设备驱动用来控
制 PCI 设备并在 CPU 与 PCI 设备之间传递信息。最典型的共享内存包括设备的控制与状态
寄存器。这些寄存器用来控制设备并读取其信息。例如 PCI SCSI 设备驱动可以通过读取其
状态寄存器,找出已准备好将一块数据写入 SCSI 磁盘的 SCSI 设备。同时还可以在设备加
电后,通过对控制寄存器写入信息来启动设备。
CPU 的系统内存可以被用作这种共享内存,但是如果采用这种方式,则每次 PCI 设备访
问此内存块时,CPU 将被迫停止工作以等待 PCI 设备完成此操作。这种方式将共享内存限
制成每次只允许一个系统设备访问。该策略会大大降低系统性能。但如果允许系统外设不受
限制地访问主存也不是好办法。它的危险之处在于一个有恶意行为的设备将使整个系统置于
不稳定状态。
1