Bios实习 学习篇- 5.PCIe学习(1)

1.pcie概念

PCIe 不是“很多设备挂在一根总线上的传统 PCI”,而是一种分层、分级、点对点的高速串行互连。 对 BIOS/UEFI 来说,PCIe 最重要的不是“线有多快”,而是 上电后怎么把链路训起来、怎么枚举设备、怎么给设备分配地址空间和总线号、怎么把这些信息交给操作系统

2.为什么 PCIe 这么重要

因为现代高性能外设几乎都围着它转: GPU 走 PCIe NVMe SSD 走 PCIe 很多高性能 NIC、加速卡、FPGA 卡也走 PCIe CXL 的物理承载层也建立在 PCIe 之上,不过那是更后一层的话题

所以,学 PCIe,本质上是在学现代平台 I/O 的主干道。对 BIOS 工程师来说,不懂 PCIe,很多上电异常、设备丢失、资源冲突、启动卡死都会像雾里看花。

PCIe 子系统的初始化是平台初始化的核心环节之一。整个流程遵循 "桥接器→总线→设备→功能" 的层级扫描模式

CPU ↔ PCI Host Bridge ↔ PCI Root Bridge ↔ PCI Bus ↔ PCI Device ↔ PCI Function

3.PCI Host Bridge Protocol核心概念

PCI Host Bridge 是连接 CPU 系统总线和 PCI 总线的桥梁,负责:

  • 地址空间转换(CPU 物理地址 ↔ PCI 总线地址)
  • 中断路由
  • 总线事务转发

在 EDK2 中,每个平台通常有一个或多个 PCI Host Bridge 实例,每个实例管理一个或多个 PCI Root Bridge。

4.PCI Enumeration(PCI 枚举)

DXE 阶段的 PCI 枚举由PciBusDxe驱动完成,完整流程如下:

1.初始化阶段

定位所有 PCI Host Bridge Protocol 实例

为每个 Host Bridge 创建 PCI Root Bridge I/O Protocol 实例

2.总线扫描阶段

从总线号 0 开始,扫描每个总线上的所有设备(0-31)和功能(0-7)

读取配置空间的 Vendor ID 和 Device ID,判断是否存在设备

如果发现 PCI-PCI 桥或 PCIe 桥,递归扫描下游总线

3.资源需求收集阶段

读取每个设备的 BAR(Base Address Register),计算所需的内存和 I/O 资源

收集所有桥的总线号需求(次级总线号、从属总线号)

按资源类型和对齐要求进行排序

4.资源分配阶段

分配总线号范围

分配 I/O 资源范围

分配 32 位内存资源范围

分配 64 位内存资源范围

将资源分配结果写入设备的 BAR 和桥的配置寄存器

5.设备初始化阶段

启用设备的内存和 I/O 空间访问

配置设备的中断线

为每个 PCI 功能创建 PCI I/O Protocol 实例

全部评论

相关推荐

04-10 18:32
已编辑
四川大学 Java
牛客17492028...:我只能说你这学历boss有的是人要,
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务