PCIe(PCI Express)的配置和枚举是计算机系统启动和初始化过程中的重要环节,它们确保系统能够正确地识别和与各个PCIe设备进行通信。以下是对PCIe配置和枚举的详细介绍:
PCIe配置
- 配置概述:
- 当系统首次启动时,配置软件尚未扫描PCIe结构,因此不知道机器的拓扑结构。
- 唯一已知的是在根联合体内存在主机/PCI桥,且总线0直连到该桥的下游。
- 扫描PCIe结构以找出其拓扑的进程称为枚举。
- 配置寄存器:
- 每种PCIe功能都实现了一组配置寄存器。
- 处理器执行软件命令时,根联合体会发起配置事务来读写这些配置寄存器。
- 访问这些寄存器可以发现功能是否存在,并对其进行配置以进行正常操作。
- 配置空间:
- PCIe定义了一块专用的配置空间,该空间分配给每种功能以实现其配置寄存器。
- PCI兼容空间占据前256个字节,包含PCI兼容配置寄存器。
- PCIe扩展配置空间占据后3840个字节,用于实现可选的PCIe扩展功能寄存器。
PCIe枚举
- 枚举的含义:
- 枚举是指在系统启动或初始化过程中自动发现、识别和配置连接到PCIe总线上的设备的过程。
- 关键步骤:
- 设备发现:系统扫描PCIe总线,检测并确定所有物理连接的设备位置及其类型。
- 设备识别:读取设备的配置空间信息,包括Vendor ID、Device ID等,以了解设备的制造商、型号等。
- 资源分配:为每个设备分配独一无二的地址空间、中断请求线等系统资源。
- 设备配置:基于设备提供的配置信息,设置设备的工作模式等。
- 驱动加载:操作系统加载与设备相匹配的驱动程序,以实现对设备的高层控制和数据交互。
- 作用原理:
- 系统从根联合体(Root Complex)开始,逐级向下遍历各个层次的交换机(Switches)和端点设备(Endpoints)。
- 通过发送配置请求TLP(Transaction Layer Packet)来探测每个潜在的设备位置。
- 一旦检测到设备存在,系统读取其配置空间中的标识符信息,并据此确定设备类型。
- 根据设备的BAR(Base Address Registers)信息,系统为其分配相应的地址空间,并确保设备能够通过中断机制向CPU报告事件。
总的来说,PCIe的配置和枚举是确保计算机系统能够正确识别和配置连接到PCIe总线上的设备的重要过程。这些过程在系统启动和初始化时自动进行,以确保设备能够正常工作并与系统进行通信。