欢迎来到天天文库
浏览记录
ID:18873232
大小:57.00 KB
页数:8页
时间:2018-09-24
《linux kernel 核心中文手册pci》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Peripheral Component Interconnect ( PCI ),好像它的名字暗示的一样,是描述如何通过一个结构化和可控制的方式把系统中的外设组件连接起来的一个标准。标准的 PCI Local Bus 规范描述了系统组件电气连接的方法和它们行为的方法。本章探讨Linux 核心如何初始化系统的 PCI 总线和设备。图 6.1 是一个 PCI 基础的系统的逻辑图。 PCI 总线和 PCI-PCI 桥( bridge )是系统组件联系在一起的粘合剂。 CUP 和 video 设备连在主要的 PCI 总线, PCI 总线 0 。一个特殊的 PCI 设备,
2、PCI-PCI 桥把主总线连接到次 PCI 总线, PCI 总线1 。按照 PCI 规范的术语, PCI 总线 1 描述成为 PCI-PCI 桥的下游而 PCI 总线 0是桥的上游。连接在次 PCI 总线上的是系统的 SCSI 和以太网设备。物理上桥、次要PCI 总线和这两种设备可以在同一块 PCI 卡上。系统中的 PCI-ISA 桥支持老的、遗留的 ISA 设备,本图显示了一个超级 I/O 控制芯片,控制键盘、鼠标和软驱。6.1 PCI Address Space ( PCI 地址空间)CPU 和 PCI 设备需要访问它们所共享的内存。这些内存让设备驱动程序控制这
3、些PCI 设备并在它们之间传递信息。一般地共享的内存包括设备的控制和状态寄存器。这些寄存器用于控制设备和读取它的状态。例如: PCI SCSI 设备驱动程序可以读取 SCSI 设备的状态寄存器,判断它是否可以向 SCSI 磁盘写一块信息。或者它可以写入控制寄存器让它关闭的设备开始运行。CPU 的使用的系统内存可以用作这种共享内存,但是如果这样的话,每一次 PCI 设备访问内存, CPU 都不得不停顿,等待 PCI 设备完成。对于内存的访问通常有限制,同一时间只能有一个系统组件允许访问。这会使得系统速度降低。允许系统的外部设备在一个不受控的方式下访问主内存也不是一个好
4、主意。这会非常危险:一个恶意的设备会让系统非常不稳定。外部设备由它们自己的内存空间。 CPU 可以访问这些空间,但是设备对于系统内存的访问受到严格的控制,必须通过 DMA ( Direct Memory Access 直接内存存取)通道ISA 设备可以访问两种地址空间: ISA I/O (输入 / 输出)和 ISA 内存。 PCI 由三种: PCI I/O 、 PCI 内存和 PCI 配置空间( configuration space )。 CPU 可以访问所有的地址空间其中 PCI I/O 和 PCI 内存地址空间由设备驱动程序使用而 PCI 配置空间由 Linu
5、x 核心中的 PCI 初始化代码使用。 Alpha AXP 处理器没有对于除了系统地址空间之外的地址空间的天生的访问模式。它需要使用支持芯片来访问象 PCI 配置空间这样的其他地址空间。它使用了一个地址空间的映射方案,从巨大的虚拟地址空间中偷出一部分映射到 PCI 地址空间。6.2 PCI Configuration Headers ( PCI 配置头)系统中的每一个 PCI 设备,包括 PCI-PCI 桥都由一个配置数据结构,位于 PCI 配置地址空间中。 PCI 配置头允许系统识别和控制设备。这个头位于 PCI 配置地址空间的确切位置依赖于设备使用的 PCI 拓
6、扑。例如,插在 PC 主板一个 PCI 槽位的一个 PCI 显示卡配置头会在一个位置,而如果它被插到另一个 PCI 槽位则它的头会出现在 PCI 配置内存中的另一个位置。但是不管这些 PCI 设备和桥在什么位置,系统都可以发现并使用它们配置头中的状态和配置寄存器来配置它们。通常,系统的设计使得每一个 PCI 槽位的 PCI 配置头都有一个和它在板上的槽位相关的偏移量。所以,举例来说,板上的第一个槽位的 PCI 配置可能位于偏移 0 而第二个槽位的在偏移 256 (所有的头都一样长度, 256 字节),依此类推。定义了系统相关的硬件机制使得 PCI 配置代码可以尝试检
7、查一个给定的 PCI 总线上的所有可能的PCI 配置头,试图读取头中的一个域(通常是 Vendor Identification 域)得到一些错误,从而知道那些设备存在而那些设备不存在。 PCI Local Bus 规范描述了一种可能的错误信息:试图读取一个空的 PCI 槽位的 Verdor Identification 和 Device Indentification 域时候返回 0xFFFFFFFF 。图 6.2 显示了 256 字节的 PCI 配置头的布局。它包括以下域:参见 include/linux/pci.hVendor Identification
此文档下载收益归作者所有