参考:

  1. Interpreting the output of lspci
  2. 深入PCI与PCIe之一:硬件篇
  3. 深入PCI与PCIe之二:软件篇
  4. lspci 详解pci拓扑结构与pci树形结构

lspci命令使用和解析

lspci在linux系统中查看PCI总线上连接设备信息的工具。一些常用的参数

  • –v:显示详细信息
  • –s:指定设备的PCI地址
  • –n:显示设备的PCI ID
  • –vv:显示更加详细的信息

常见的应用场景:

  1. 检测PCI设备是否正常工作:lspci命令能列出相关设备信息说明设备已经被识别
  2. 查看硬件配置信息:识别计算机的配置信息来正确的安装和配置相关设备的驱动程序
  3. 查找特定类型的设备:可查找特定类型的设备,列入-l参数列出网络相关的设备

其他同类型的工具:lshw,hwinfo,lspcmcia

1
2
3
4
5
6
7
lspci
02:00.0 Network controller: Intel Corporation Wireless 7265 (rev 59)

lspci -D
0002:e8:00.0 PCI bridge: ----- Co., Ltd. Device 1610 (rev 01)
0004:48:00.0 PCI bridge: ----- Co., Ltd. Device 1610 (rev 01)
0004:49:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS3008 PCI-Express Fusion-MPT SAS-3 (rev 02)

Bus地址:[00:1c.0] 00表示总线编号(Bus Number),1c表示设备编号(Device Number),0表示功能编号(Function Number),三个编号都是采用16进制表示

理论上,一个Segment可以有256个Bus,每个Bus可以有32个Device,每个Device可以有8个Function;设备特别多的情况下会存在多个DomainNumber,或者使用lspci -D命令输出会带上DomainNumber

1
2
lspci -nn 
00:19.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection (3) I218-LM [8086:15a2] (rev 03)

[0200]表示当前设备类型DeviceClass,[8086:15a2]表示设备的VendorID和Device
lspci命令会默认尝试读取/usr/share/hwdata/pci.ids.gz/usr/share/hwdata/pci.ids文件,利用DeviceClass、VendorID:DeviceID去匹配相应的设备,这个设备清单是由https://pci-ids.ucw.cz/维护的,我们也可以直接去网站上去查询。

1
2
3
4
5
6
7
8
lspci -vt
+-[0000:62]-+-00.0 Intel Corporation Device 09a2
| +-00.1 Intel Corporation Device 09a4
| +-00.2 Intel Corporation Device 09a3
| +-00.4 Intel Corporation Device 0998
| \-02.0-[63-75]----00.0-[64-75]--+-00.0-[65-6a]----00.0-[66-6a]----10.0-[67-6a]----00.0-[68-6a]--+-00.0-[69]----00.0 NVIDIA Corporation Device 20f3
| | \-1f.0-[6a]----00.0 LSI Logic / Symbios Logic Device 00b2
| +-04.0-[6b-70]----00.0-[6c-70]--+-00.0-[6d-6f]----00.0-[6e-6f]----00.0-[6f]----00.0 NVIDIA Corporation Device 20f3

-v参数会显示设备的供应商和名字,虽然Domain Number都是0000但是设备不一定连接到同一条总线上
参考图片:
image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
lspci -vvv
c0:00.0 Bridge: NVIDIA Corporation Device 1af1 (rev a1)
Subsystem: NVIDIA Corporation Device 13b8
Physical Slot: 1
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 984
NUMA node: 1
Region 0: Memory at e2000000 (32-bit, non-prefetchable) [size=32M]
Capabilities: [60] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee01a98 Data: 0000
Capabilities: [78] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s unlimited, L1 <64us
ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset- SlotPowerLimit 25.000W
DevCtl: Report errors: Correctable- Non-Fatal+ Fatal+ Unsupported-
RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+
MaxPayload 256 bytes, MaxReadReq 4096 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #0, Speed 8GT/s, Width x2, ASPM not supported, Exit Latency L0s unlimited, L1 <4us
ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 8GT/s, Width x2, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range AB, TimeoutDis+, LTR+, OBFF Via message
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+
EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=01
Status: NegoPending- InProgress-
Capabilities: [250 v1] Latency Tolerance Reporting
Max snoop latency: 0ns
Max no snoop latency: 0ns
Capabilities: [128 v1] Power Budgeting <?>
Capabilities: [420 v2] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UESvrt: DLP+ SDES+ TLP+ FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr+ BadTLP+ BadDLLP+ Rollover+ Timeout+ NonFatalErr+
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-
Capabilities: [600 v1] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>
Capabilities: [900 v1] #19
Capabilities: [bb0 v1] #15
Kernel driver in use: nvidia-nvswitch
Kernel modules: nvidia_drm, nvidia
1
lspci -xxx展示pci设备的配置空间,十六进制输出