文档介绍:第6章硬件和设备驱动程序
本章介绍Linux 系统中常见的设备以及一些相关概念,讨论Linux核心对系统中物理设备的管理,介绍 Linux 对 PCI 总线的支持、Linux 对硬件中断的处理以及对设备驱动程序的支持等。在 Linux 的安装和系统维护中,会遇到许多与特定硬件或设备相关的问题。这些问题的正确解决建立在对相关概念的正确理解之上。
第6章硬件和设备驱动程序
第一节总线
第二节设备访问方式
第三节设备驱动程序
第四节编写Linux下的设备驱动程序
总线
总线是将计算机中不同类型的硬件组织在一起,并为它们提供通讯保证的计算机关键硬件。总线定义了硬件之间进行通讯的“协议”,遵循同一种协议的硬件可在同一条总线上协调工作。物理上,总线由计算机主板上传送信号的线路以及附属的控制芯片组成。各种设备大多以控制卡的形式插在总线槽上。总线协议包括一些物理上的约定,例如电气特性以及控制卡的尺寸等。另外,总线协议也定义了总线上的信号时序以及总线的最大数据传输速率(以MHz为单位)等特性。不同的协议形成了不同的总线。在流行 PC 机中,常见的总线类型如表 所示。
表 PC 中的常见总线类型
名称
说明
ISA 总线
ISA 是“Industy Standard Architecture”的英文缩写。ISA 总线最初用于 IBM 的PC AT 机中,一次可传输 16 位数据,最大的数据传输率为 5MB/sec。
VESA 局部总线
VESA 是“Video Electronics Standards Association视频电子标准协会”的英文缩写。VESA 局部总线可提供处理器和视频卡之间的高速数据传输。
EISA 总线
EISA 是“Extended Industy Standard Architecture扩展工业标准结构”的英文缩写。EISA 总线的传输速率为 30MB/sec。但该总线很少使用。
PCI 总线
PCI 是“ponent Interconnection,外设组件互连”的英文缩写。PCI 是最新的高性能总线。它的时钟频率为 33 MHz,一次可传输 64 位数据。
Linux不支持微通道结构总线MCA(Micro Channel Architecture)。
Linux不支持微通道结构总线MCA(Micro Channel Architecture)。
外设组件互连(ponent Interconnection,PCI)是一种将系统中外部设备以结构化与可控制方式连接到起来的总线标准,包括系统部件连接的电气特性及行为。PCI 总线现在广泛使用在基于 Pentium 的计算机中,一方面是因为该总线的数据吞吐量大,另一方面是因为该总线和具体的处理器无关,也就是说,同一个 PCI 设备,既可以使用在 i386 计算机中,也可以使用在 Alpha AXP 计算机中。PCI 总线的设计也使各种 PCI 外设卡可即插即用,但即插即用需要操作系统软件额外的支持。
Linux 对 PCI 总线的支持
1. PCI 总线的结构
Linux 对 PCI 总线的支持
1. PCI 总线的结构
图 。每条 PCI 总线上的设备数目是有一定限制的,因此该系统使用PCI-PCI桥将不同的PCI总线粘合在一起。不同的PCI总线有唯一的编号,CPU 处于 PCI 0 号总线上。利用PCI-ISA桥可在 PCI 总线上连接ISA总线。利用 PCI-PCI 桥和PCI-ISA 桥,可以突破单个 PCI 总线的限制而连接许多设备。一般来说,服务器和桌面计算机的PCI总线拓扑结构是不同的。
图 简单的 PCI 系统逻辑示意图
ISA 设备有两种地址空间,一种是 I/O 端口空间,另一种是存储器空间。和 ISA 设备相比较,PCI设备有三种地址空间,分别是I/O 端口空间、存储器空间和配置空间。不同的 CPU 类型对地址空间类型的支持不同,i386 处理器的 I/O 端口和存储器空间是分开的,利用不同的处理器指令操作这些地址;Alpha AXP 处理器却只有存储器空间,也就是说,端口的输入输出和内存访问的指令是一样的。因此,Alpha AXP 处理器利用一种独特的内存映射方式将部分虚拟地址空间映射为 PCI 的地址空间。