PCIe是指PCI Express,是一种计算机总线标准。在PCIe中,每个连接到主板上的设备都有唯一的地址,被称为BDF。
- BDF:Bus、Device、Function 的缩写。其中Bus是指PCIe总线编号(一个系统中可能存在多个PCIe总线),Device是指连接到该总线上的某个设备编号,Function是指同一个设备上不同功能的编号。
- Root表示开头、根部的意思。因此,Root BDF是指PCIe层次结构中最高层的设备(通常是主板)的BDF地址。
在PCIe设备ID和驱动程序匹配过程中,使用Root BDF和设备的BDF地址来确认特定设备的位置和身份。
PCIe BDF 是用于唯一识别 PCIe 设备的标志符。BDF 表示总线编号、设备编号和功能编号。这三个数字结合在一起,可以标识一个具体的 PCIe 设备。
- 总线编号:表示 PCIe 设备所连接到的 PCIe 根端点所在的物理总线编号。这个编号是唯一的,它和系统中所有其他 PCIe 总线的编号都不同。
- 设备编号:表示物理总线上被分配给 PCIe 设备的编号。这个编号是唯一的,它和同一总线上的其他设备的编号都不同。
- 功能编号:表示在同一 PCIe 设备内部,每个功能被分配的编号。对于只有一个功能的设备,这个值通常为 0。而对于包含多个功能的设备,每个功能都被分配一个唯一的编号。
BDF 的典型格式为 BBBB:DD:FF
。其中,“BBBB” 是四位十六进制的总线编号,“DD” 是两位十六进制的设备编号,“FF” 是两位十六进制的功能编号。
例如,一个叫做“0000:03:00.0”的 PCIe BDF 号码,表示这个 PCIe 设备连接到物理总线 0000 上,它的设备编号为 03,它只有一个功能,其功能编号为 0。
在 Linux 系统中,可以使用各种工具来查看 PCI Express(PCIe)总线拓扑。以下是一些常见的方法:
- 使用 lspci 命令
lspci -t
该命令以树形结构列出 PCIe 总线及其连接的设备和桥接器信息。
- 使用 lspci 和 grep 命令
lspci -vv | grep "^\([0-9a-f]\{2\}:\)\{2\}[0-9a-f]\{2\}"
该命令将以详细格式输出 lspci 信息,并查找所有 PCIe 设备的详细信息。
- 使用 lshw 命令
sudo lshw -class bridge -businfo
该命令列出 PCIe 桥接器及其子设备的详细信息,并以总线信息的形式输出。
- 使用 hwloc 工具
hwloc-ls --whole-system
该工具将显示整个系统的硬件拓扑结构,包括 PCIe 拓扑。