PCIe基础BDF和配置空间详解

✨ 前言:

在PCI Express (PCIe) 架构中,"BDF"和"配置空间"是两个重要概念,它们与PCIe设备的识别和配置紧密相关。

✨ 一、 BDF定义

BDF是一种寻址机制,用于唯一标识系统中每个PCIe设备。BDF的全称是Bus/Device/Function,带有以下组成部分:

Bus:一个 8 位字段,表示设备所在的总线号。因为是8位,所以PCIe可以支持256个总线。
Device:一个 5位字段,表示特定总线上的设备号。每个总线可以有32个设备,编号从0到31。
Function:一个 3 位字段,表示特定设备的功能号。因为是3位,所以一个设备可以有最多8个功能。

这样的结构使得系统可以支持多达 256个总线 × 32个设备/总线 × 8个功能/设备 = 65536个唯一功能,这是个足够大的空间来满足现代计算机系统的需要。
需要注意的是,每个设备必须要有功能0(Fun0),其他的7个功能(Fun1~Fun7)都是可选的。
一个简单的例子如下图所示:
在这里插入图片描述

✨二、配置空间定义

什么是配置空间?
配置空间是每个PCIe设备的一个特定内存区域,它包含了管理该设备的关键信息,如设备ID、供应商ID、中断信息、BAR(基地址寄存器)等。
配置空间大小?
早期的PCI时期,系统为每个PCI设备分配的内存大小仅有256个Bytes。到后来的PCIE时期,随着设备性能增强,PCIE设备的配置空间扩展至4K个Bytes。在这里需要注意:PCIE一共支持256条Bus,32个Dev,8个Fun。因此在满负载的情况下,共需内存大小 = 4k * 256 328 = 256M,这个256M的内存空间是为PCIE设备准备的空间系统不可用。如下图所示:
在这里插入图片描述
下图是从PCI总线中继承过来的配置空间:
在这里插入图片描述

2.1 配置寄存器

配置空间内含有若干配置寄存器,以下是其中一些主要的寄存器:

供应商ID:用以识别制造商。 设备ID:特定于供应商的设备标识。 命令和状态寄存器:用以控制设备功能和报告设备状态。
类代码:指示设备的类型和功能。 BARs:用于映射设备到系统的地址空间,可以是内存或I/O地址。 中断行和中断引脚:包含中断相关配置。
能力列表:PCIe设备支持的额外功能(例如,电源管理、热插拔等)。

2.2 扩展配置空间

对于PCIe设备,扩展了更大的配置空间,通常为4KB,它允许更多的功能和复杂的配置。

2.3 如何访问配置空间

Legacy PCI Method:通过特定的CPU端口地址读取和写入。这种方法对于标准PCI设备而言是通用的,但对于PCIe设备来说,可能是受限的。
Memory-Mapped I/O:在这种机制下,配置空间被映射到系统的地址空间中,CPU可以通过常规的内存访问指令来访问配置空间。在现代系统中,这种方法被广泛采用,因为它更高效。
需要特别注意的是,PCIe的Spec中明确规定只有Root有权限发起配置请求(Originate Configuration Requests),也就是说PCIe系统里面的其他设备是不允许去配置其他设备的配置空间的,即peer-to-peer的配置请求是不允许的。并且配置请求的路由(Routing)方式只能是采用BDF(Bus,Device,Function)。
处理器一般不能够直接发起配置读写请求,因为其只能产生Memory Request和IO Request。这就意味着Root必须要将处理器的相关请求转换为配置读写请求。针对传统的PCI设备(Legacy PCI),采用的是IO间接寻址访问(IO-indirect Accesses);针对PCIe设备,采用的是Memory-Mapped Accesses。

2.4 BDF和配置空间的应用

当系统启动时,操作系统和固件(如BIOS或UEFI)会枚举系统中的所有PCI/PCIe设备,读取它们的配置空间,并根据设备的功能和需要进行配置。例如,系统会根据BAR寄存器设置来分配内存或I/O资源给设备。BDF值在这个过程中作为设备的唯一标识符,用于设备选择和配置空间的寻址。
Root和Switch的每一个端口中都包含一个P2P桥,并且知道桥的配置空间头(Configuration Space Header)是Type1型的。如下图所示:
在这里插入图片描述
每个Type1型的Header中都包含最后一级总线号(Subordinate Bus Number)、下一级总线号(Secondary Bus Number)和上一级总线号(Primary Bus Number)等信息。当配置请求进行BDF路由的时候,正是依靠这些信息来确定要找的设备的。一个简单地例子如下图所示:
在这里插入图片描述

✨小结:

总而言之,BDF提供了唯一标识系统中PCIe设备的方法,而配置空间则是存储设备配置和管理信息的地方,对于PCIe设备的整个生命周期而言都是至关重要的。

相关推荐

  1. gateway基本配置详解

    2024-04-25 19:00:02       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 19:00:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 19:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 19:00:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 19:00:02       20 阅读

热门阅读

  1. 多网卡IP配置netplan

    2024-04-25 19:00:02       38 阅读
  2. 前端实现批量下载并打包成ZIP文件

    2024-04-25 19:00:02       11 阅读
  3. Xshell常用命令大全

    2024-04-25 19:00:02       14 阅读
  4. tryhackme

    tryhackme

    2024-04-25 19:00:02      10 阅读
  5. 【测试开发学习历程】异常处理

    2024-04-25 19:00:02       12 阅读
  6. 深交所发布独董履职手册,规范独董履职行为

    2024-04-25 19:00:02       11 阅读
  7. CVE-2022-0543 Redis沙盒逃逸漏洞复现(CVE-2022-0543)

    2024-04-25 19:00:02       14 阅读