找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 207|回复: 0

PCIe从入门到精通之九:利用lspci和PCIe设备的ID查看配置空间

[复制链接]

27

主题

0

回帖

248

积分

管理员

积分
248
发表于 2026-1-17 14:57:59 | 显示全部楼层 |阅读模式 来自 LAN

PCIe从入门到精通之九:利用lspci和PCIe设备的ID查看配置空间

0. 引言

在《PCIe从入门到精通之七:PCIe设备的配置空间简介》我们已经大体上介绍PCIe设备的配置空间;在《PCIe从入门到精通之八:PCIe设备的身份证ID》PCIe设备的身份证ID。介绍了这么多理论,朋友们一定会说,你教的都是些没用的东西,不能学以致用。

下面我们通过实战来解决下面两个问题:有什么命令可以查看PCIe设备的身份证ID和配置空间?将PCIe设备的身份证ID和配置空间显示出来后它们是什么样子的?

所有PCIe主题的文章都会收录在《深入浅出聊PCIe》合集里,欢迎评阅。

需要下载PCIe学习资料标准的朋友(pdf格式),请关注本微信公众号"硬件工程师宝典",在对话框内回复"CIe",将获取标准下载链接。

1. 查看PCIe设备的身份证ID

使用设备管理器 (Device Manager),这是最直观和常用的方法。

  1. 打开设备管理器。可以通过在运行(Win + R)中输入 devmgmt.msc 并按回车键来打开设备管理器。
  2. 找到你想要查看的PCIe设备。这些设备通常在"显示适配器"、"网络适配器"或其他类别下。
  3. 右键点击该设备,然后选择"属性"。
  4. 在属性窗口中,切换到"详细信息"选项卡。
  5. 在"属性"下拉菜单中,选择"位置信息 (Location Information)"。
  6. 此时,你将看到设备的Bus Number、Device Number和Function Number,格式通常为"CI bus X, device Y, function Z"。

如下图所示,图中的网卡的PCIe device ID是:Bus 9, Device 0, Function0;

Windows设备管理器查看PCIe设备ID

Linux下如何查看PCIe设备的身份证ID

在Linux下查看PCIe设备的Bus Number、Device Number和Function Number (BDF),lspci 是最常用和推荐的工具。

使用 lspci 命令,输出通常会以 BBD.F 的格式显示设备的BDF地址。

$ lspci

00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 07)

00:02.0 VGA compatible controller: Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630]

00:08.0 System peripheral: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Gaussian Mixture Model

00:14.0 USB controller: Intel Corporation Cannon Lake PCH USB 3.1 xHCI Host Controller (rev 10)

00:14.2 RAM memory: Intel Corporation Cannon Lake PCH Shared SRAM (rev 10)

00:15.0 PCI bridge: Intel Corporation Cannon Lake PCH SPI Controller (rev 10)

00:16.0 Communication controller: Intel Corporation Cannon Lake PCH HECI Controller (rev 10)

00:17.0 SATA controller: Intel Corporation Cannon Lake PCH SATA AHCI Controller (rev 10)
...

在上面的例子中,第一个设备00:00.0 Host bridge表示Bus number=0、device number=0、function number=0的host bridge。其它的PCIe设备依次类推。

下图是一个PCIe tree,按照图中的示例从中可以找出各个device的bus number,device number和function number。大家可以自己按图索骥。

PCIe设备树结构

2. 如何查看PCIe设备的配置空间

先回忆一下PCIe设备配置空间的结构:

PCI Express 配置空间被划分为一个与"CI兼容的配置空间"(PCI Compatible Configuration Space)和一个"CIe扩展配置空间"(PCIe Extended Configuration Space)。如下图所示,"CI兼容的配置空间"由前 256 字节组成(Byte 0h~FFh);PCI Express 将每个function的配置空间扩展到了 4096 字节(4KB,FFFh),而"CIe扩展配置空间"则由除PCI兼容的配置空间外剩余的配置空间组成(Byte 100h~FFFh)。

在PCI兼容的配置空间里,前0h~3Fh存放的是PCI header(device基本信息),后面的40h~FFh存放的是PCIe Capability Structure(device都有哪些本领)。

在扩展配置空间里(Byte 100h~FFFh),全部存放的是PCIe Extended Parameters and Capability Structure。

PCIe配置空间结构

Windows下如何查看PCIe设备的配置空间

在Windows下直接查看PCIe设备的配置空间(Configuration Space)不像在Linux下那样直接通过 lspci -xxxx 或 sysfs 文件系统那样方便。Windows操作系统出于安全和系统稳定性的考虑,对底层硬件的直接访问进行了严格的抽象和限制。普通用户和应用程序通常无法直接读取或写入PCIe设备的配置空间寄存器。可以通过第三方工具实现。

Linux下如何查看PCIe设备的配置空间

查看原始十六进制配置空间 (lspci -s BusIDeviceID.FunctionID -xxx)

1) 标准配置空间 0x000-0x0FF 的数据
标准配置空间 0x000-0x0FF 的数据
以后我们将用上面这张图来详细介绍各个寄存器的含义。
2)扩展配置空间 0x100-0xFFF 的数据示例 $ lspci -s 0000:01:00.0 -xxxx


... (前面是标准配置空间 0x000-0x0FF 的数据)
下面是扩展配置空间 0x100-0xFFF 的数据示例:
00000100: 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000160: 1b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001c0: 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
... (一直到 0xFF0 偏移量)
```
### 三, 抛砖引玉
我们可以通过命令来显示PCIe配置空间的值,那么PCIe设备的配置空间的这些值是怎么从PCIe设备里被读取到Host OS的?可以通过什么方式来读写?具体的读写流程是怎样的?
敬请关注下一篇:《PCIe从入门到精通之十:PCIe配置空间的访问方式详解》
### 四,参考文献:


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|PCIe技术圈-专注PCIe技术的中文社区 ( 皖ICP备17021150号-5 )|网站地图

GMT+8, 2026-2-16 04:58 , Processed in 0.037175 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表