⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000007.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;coolzhang&nbsp;(coolzhang),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;linux&nbsp;bible&nbsp;第六章&nbsp;PCI&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Mon&nbsp;Oct&nbsp;25&nbsp;17:50:59&nbsp;1999)&nbsp;<BR>&nbsp;<BR>发信人:&nbsp;coolzhang&nbsp;(coolzhang),&nbsp;信区:&nbsp;UNIX&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;linux&nbsp;bible&nbsp;第六章&nbsp;PCI&nbsp;<BR>发信站:&nbsp;武汉白云黄鹤站&nbsp;(Mon&nbsp;Oct&nbsp;25&nbsp;15:35:21&nbsp;1999),&nbsp;站内信件&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>第六章&nbsp;PCI&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>外围设备互连(PCI)是一种将系统中外部设备以结构化与可控制方式连接到起来的总线&nbsp;<BR>标准,包括系统部件连接的电气特性及行为。本章将详细讨论Linux核心对系统中的PCI&nbsp;<BR>总线与设备的初始化过程。&nbsp;<BR>&nbsp;<BR>PCI总线和PCI-PCI桥接器在连接系统中设备到上起关键作用,在这个系统中CPU和视频&nbsp;<BR>设备被连到PCI&nbsp;bus&nbsp;0上,它是系统中的主干PCI总线。而PCI-PCI桥接器这个特殊PCI&nbsp;<BR>设备将主干总线PCIbus&nbsp;0与下级总线PCI&nbsp;bus&nbsp;1连接到一起。PCI标准术语中,PCI&nbsp;bus&nbsp;<BR>1是PCI-PCI桥接器的downstream而PCI&nbsp;bus&nbsp;0是此桥接器的up-stream。SCSI和以太网&nbsp;<BR>设备通过二级PCI总线连接到这个系统中。而在物理实现上,桥接器和二级PCI总线被&nbsp;<BR>集成到一块PCI卡上。而PCI-ISA桥接器用来支持古老的ISA设备,图中有一个高级I/O&nbsp;<BR>控制芯片来控制键盘、鼠标及软盘设备。&nbsp;<BR>&nbsp;<BR>6.1&nbsp;&nbsp;PCI地址空间&nbsp;<BR>&nbsp;<BR>CPU和PCI设备需要存取在它们之间共享的内存空间。这块内存区域被设备驱动用来控&nbsp;<BR>制PCI设备并在CPU与PCI设备之间传递信息。最典型的共享内存包括设备的控制与状态&nbsp;<BR>寄存器。这些寄存器用来控制设备并读取其信息。例如PCI&nbsp;SCSI设备驱动可以通过读&nbsp;<BR>取其状态寄存器,找出已准备好将一块数据写入SCSI磁盘的SCSI设备。同时还可以在&nbsp;<BR>设备加电后,通过对控制寄存器写入信息来启动设备。&nbsp;<BR>&nbsp;<BR>CPU的系统内存可以被用作这种共享内存,但是如果采用这种方式,则每次PCI设备访&nbsp;<BR>问此内存块时,CPU将被迫停止工作以等待PCI设备完成此操作。这种方式将共享内存&nbsp;<BR>限制成每次只允许一个系统设备访问。该策略会大大降低系统性能。但如果允许系统&nbsp;<BR>外设不受限制地访问主存也不是好办法。它的危险之处在于一个有恶意行为的设备将&nbsp;<BR>使整个系统置于不稳定状态。&nbsp;<BR>&nbsp;<BR>外设有其自身的内存空间。CPU可以自由存取此空间,但设备对系统主存的访问将处于&nbsp;<BR>DMA(直接内存访问)通道的严格控制下。ISA设备需要存取两个地址空间:ISA&nbsp;I/O&nbsp;<BR>(输入输出)和ISA内存。而PCI设备需要访问三种地址空间:PCI&nbsp;I/O、PCI内存和PCI&nbsp;<BR>配置空间。CPU则可以访问所有这些地址空间。PCI&nbsp;I/O和PCI内存由设备驱动程序使用&nbsp;<BR>而PCI配置空间被Linux核心中的PCI初始化代码使用。&nbsp;<BR>&nbsp;<BR>Alpha&nbsp;AXP处理器并不能象访问系统地址空间那样随意访问这些地址空间,它只能通过&nbsp;<BR>辅助芯片组来存取这些地址空间,如PCI配置空间。Alpha&nbsp;AXP处理器使用稀疏地址映&nbsp;<BR>射策略来从系统巨大的虚拟内存中&quot;窃取&quot;一部分并将其映射到PCI地址空间。&nbsp;<BR>&nbsp;<BR>6.2&nbsp;&nbsp;PCI&nbsp;配置头&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>系统中每个PCI设备,包括PCI-PCI桥接器在内,都有一个配置数据结构,它通常位于&nbsp;<BR>PCI配置地址空间中。PCI配置头允许系统来标识与控制设备。配置头在PCI配置空间的&nbsp;<BR>位置取决于系统中PCI设备的拓扑结构。例如将一个PCI视频卡插入不同的PCI槽,其配&nbsp;<BR>置头位置会变化。但对系统没什么影响,系统将找到每个PCI设备与桥接器并使用它们&nbsp;<BR>配置头中的信息来配置其寄存器。&nbsp;<BR>&nbsp;<BR>典型的办法是用PCI槽相对主板的位置来决定其PCI配置头在配置空间中的偏移。比如&nbsp;<BR>主板中的第一个PCI槽的PCI配置头位于配置空间偏移0处,而第二个则位于偏移256处&nbsp;<BR>(所有PCI配置头长度都相等,为256字节),其它槽可以由此类推。系统还将提供一&nbsp;<BR>种硬件相关机制以便PCI设置代码能正确的辨认出对应PCI总线上所有存在的设备的PCI&nbsp;<BR>配置头。通过PCI配置头中的某些域来判断哪些设备存在及哪些设备不存在(这个域叫&nbsp;<BR>厂商标志域:Vendor&nbsp;Identification&nbsp;field)。对空PCI槽中这个域的读操作将得到一&nbsp;<BR>个值为0xFFFFFFFF的错误信息。&nbsp;<BR>&nbsp;<BR>256字节PCI配置头的结构,它包含以下域:&nbsp;<BR>&nbsp;<BR>厂商标识(Vendor&nbsp;Identification)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用来唯一标识PCI设备生产厂家的数值。Digital的PCI厂商标识为0x1011而Intel&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的为0x8086。&nbsp;<BR>设备标识(Device&nbsp;Identification)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用来唯一标识设备的数值。Digital&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21141快速以太设备的设备标识为0x0009。&nbsp;<BR>状态(Status)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此域提供PCI标准定义中此设备的状态信息。&nbsp;<BR>命令(Command)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过对此域的写可以控制此设备,如允许设备访问PCI&nbsp;I/O内存。&nbsp;<BR>分类代码(Class&nbsp;Code)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此域标识本设备的类型。对于每种类型的视频,SCSI等设备都有标准的分类代码。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如SCSI设备分类代码为0x0100。&nbsp;<BR>基地址寄存器(Base&nbsp;Address&nbsp;Registers)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这些寄存器用来决定和分配此设备可以使用的PCI&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I/O与PCI内存空间的类型,数量及位置。&nbsp;<BR>中断引脚(Interrupt&nbsp;Pin)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCI卡上的四个物理引脚可以将中断信号从插卡上带到PCI总线上。这四个引脚标&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;准的标记分别为A、B、C及D。中断引脚域描叙此PCI设备使用的引脚号。通常特&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定设备都是采用硬连接方式。这也是系统启动时,设备总使用相同中断引脚的原&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因。中断处理子系统用它来管理来自该设备的中断。&nbsp;<BR>中断连线(Interrupt&nbsp;Line)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本设备配置头中的中断连线域用来在PCI初始化代码、设备驱动以及Linux中断处&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;理子系统间传递中断处理过程。虽然本域中记录的这个数值对于设备驱动毫无意&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;义。但是它可以将中断处理过程从PCI卡上正确路由到Linux操作系统中相应的设&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;备驱动中断处理代码中。在interrupt一章中将详细描叙Linux中断处理过程。&nbsp;<BR>&nbsp;<BR>6.3&nbsp;&nbsp;PCI&nbsp;I/O和PCI内存地址&nbsp;<BR>&nbsp;<BR>这两个地址空间用来实现PCI设备和Linux核心中设备驱动程序之间的通讯。例如DEC21141&nbsp;<BR>快速以太网设备的内部寄存器被映射到PICI/O空间上时,其对应的Linux设备驱动可&nbsp;<BR>以通过对这些寄存器的读写来控制此设备。PCI视频卡通常使用大量的PCI内存空间来&nbsp;<BR>存储视频信息。&nbsp;<BR>&nbsp;<BR>在PCI系统建立并通过用PCI配置头中的命令域来打开这些地址空间前,系统决不允许对&nbsp;<BR>它们进行存取。值得注意的是只有PCI配置代码读取和写入PCI配置空间,Linux设备驱&nbsp;<BR>动只读写PCII/O和PCI内存地址。&nbsp;<BR>&nbsp;<BR>6.4&nbsp;&nbsp;PCI-ISA&nbsp;桥接器&nbsp;<BR>&nbsp;<BR>这种桥接器通过将PCI&nbsp;I/O和PCI内存空间的存取转换成对ISA&nbsp;<BR>I/O和ISA内存的存取来支持古老的ISA设备。市场上许多主板中同时包含几个ISA总线&nbsp;<BR>槽和PCI槽。但今后对ISA设备的向后兼容支持将逐渐减弱,最终主板上只会有PCI槽。&nbsp;<BR>早期的Intel&nbsp;8080&nbsp;PC就将ISA设备的ISA地址空间固定了下来。即使在价值5000美圆&nbsp;<BR>的Alpha&nbsp;AXP&nbsp;系统中其ISA软盘控制器地址也和最早IBM&nbsp;PC上的相同。PCI标准将PCI&nbsp;<BR>I/O和PCI内存的低端部分保留给系统中的ISA外设,另外还使用PCI-ISA桥接器实现从&nbsp;<BR>PCI内存访问到ISA内存访问的转换。&nbsp;<BR>&nbsp;<BR>6.5&nbsp;&nbsp;PCI-PCI&nbsp;桥接器&nbsp;<BR>&nbsp;<BR>PCI-PCI桥接器是一种将系统中所有PCI总线连接起来的特殊PCI设备。在简单系统中&nbsp;<BR>只存在一条PCI总线,由于受电气特性的限制,它所连接的PCI设备个数有限。引入&nbsp;<BR>PCI-PCI桥接器后系统可以使用更多的PCI设备。对于高性能服务器这是非常重要的。&nbsp;<BR>Linux提供了对PCI-PCI桥接器的全面支持。&nbsp;<BR>&nbsp;<BR>6.5.1&nbsp;&nbsp;PCI-PCI桥接器:PCI&nbsp;I/O和PCI&nbsp;内存窗口&nbsp;<BR>&nbsp;<BR>PCI-PCI桥接器将PCI&nbsp;<BR>I/O和PCI内存读写请求中的一个子集向下传送。例如在图6.1中,如果来自PCI&nbsp;<BR>总线0请求是对SCSI或以太设备所拥有的PCI&nbsp;<BR>I/O或PCI内存的读写,则此PCI-PCI桥接器将只需把请求从总线0传递到PCI总线1上;&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -