PCIe体系结构导读(19)
发布时间:2021-06-11
发布时间:2021-06-11
目前PCIe总线规范,依然在迅猛发展,但并不是所有PCIe设备都支持这些在PCIe总线的最新规范中提及的概念。一般说来,PCIe总线规范提出的新的概念,最先在x86处理器系统的Chipset和Intel设计的PCIe设备中出现。
--------------------------------------------------------------------------------
[1]包括SMP系统和更为复杂的NUMA结构处理器系统。
[2]本章出现的IA处理器指Intel的x86-64处理器,而不是指Itanium处理器。
第III篇Linux与PCI总线
本篇主要讲述Linux系统与PCI/PCIe总线相关的一些内容,其重点在于Linux系统PCI/PCIe总线驱动程序的实现。并以此为基础说明PCI总线控制器,及其相关设备在系统软件的初始化过程。本篇并不会拘泥于Linux系统的实现细节,但是仍将介绍一些与Linux系统相关的基本知识。本篇内容基于Linux2.6.31.6内核。
值得注意的是,在不同处理器体系结构中,Linux系统初始化PCI总线的过程并不相同。如在Linuxx86系统中,BIOS为PCI总线的初始化做出了许多辅助工作,而在LinuxPowerPC或者LinuxARM中使用的Fireware,如U-Boot,并没有做类似的工作。
从系统软件的角度上看,PCI总线与PCIe总线的初始化过程和资源分配较为类似,为节约篇幅,本篇使用PCI总线统称PCI和PCIe总线,并将Linux系统的PCI和PCIe子系统简称为LinuxPCI。
在第12.3节中讲述了一个最基本的,基于PCI总线的Linux设备驱动程序。这个PCI设备驱动程序使用了一些Linux系统提供的标准API和数据结构,例如使用pci_resource_start和pci_resource_len函数获得该设备BAR空间的基地址和长度,并在request_irq函数中使用pci_devàirq参数注册该设备使用的中断服务例程。
该PCI设备(Capric卡)在驱动程序中使用的这些存储器资源,由系统软件对PCI总线进行初始化时确定,而中断资源在使能相应的PCI设备时由系统软件分配。这个系统软件包括操作系统和Firmware[1]。
与其他处理器系统相比,x86处理器作为一个通用处理器平台,始终强调向前兼容的重要性。而实现向前兼容需要做出许多牺牲,这也造成了Linuxx86对PCI总线的初始化过程最为复杂也最为繁琐,x86处理器在引入了ACPI(AdvancedConfigurationandPowerInterfaceSpecification)机制之后,方便了处理器系统对“不规范外部设备”的管理,但是使得PCI总线的初始化过程更为复杂。
下文将以Linuxx86为主线说明PCI总线的初始化过程。Linuxx86在对PCI总线进行初始化之前,BIOS对PCI总线做出了部分初始化工作,如创建ACPI表、预先分配PCI设备使用的存储器资源,并执行PCI设备ROM中的初始化代码等一系列步骤。
Linuxx86将继承BIOS对PCI总线的初始化成果,并在此基础上进行LinuxPCI子系统的初始化,并执行PCI设备的Linux驱动程序的初始化模块。在Linuxx86中,PCI总线的初始化由一系列模块协调完成。
上一篇:如何让学生摆脱自卑心理.doc1
下一篇:大跨度钢管拱桥缆索吊拼法施工