【PCI】lspci & setpci 工具编译及使用

本文介绍了如何从源码下载并进行交叉编译,使用lspci命令解析PCI设备信息,包括设备的总线、槽位、功能号等,以及如何查看和手动修改PCI设备的配置空间寄存器,如CommandStatus寄存器的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、源码下载及编译

1. 源码下载

http://mj.ucw.cz/download/linux/pci/

2. 交叉编译

2.1 修改顶层 Makefile 文件,增加以下内容
在这里插入图片描述
在这里插入图片描述
2.2 执行 make
在这里插入图片描述

二、lspci

# lspc
00:00.0 Class 0604: Device 19e5:3798  // Root Bus
01:00.0 Class 0604: Device 12d8:2608
  // 桥片设备,设备号为 “01:00.0”,具体的类别是 0604,型号为 “12d8:2608”。
02:01.0 Class 0604: Device 12d8:2608
  // 表示桥片设备下的插槽1,为 “02:01.0”,均为类别 0604,型号为 “12d8:2608”。
02:02.0 Class 0604: Device 12d8:2608  // 表示桥片设备下的插槽2,为 “02:02.0”,均为类别 0604,型号为 “12d8:2608”。
03:00.0 Class 0480: Device 19e5:3531 (rev 06)  // 插槽 “02:01.0” 下的设备,分别为类别 0480,型号分别为"19e5:3531"
04:00.0 Class 0500: Device 4953:6601           // 插槽 “02:02.0” 下的设备,分别为类别 0500,型号分别为“4953:6601”。

# lspci -vt
-[0000:00]---00.0-[01-ff]----00.0-[02-04]--+-01.0-[03]----00.0  Device 19e5:3531
                                           \-02.0-[04]----00.0  Device 4953:6601         

以上面的 04:00.0 为例

04:00.0 Class 0500: Device 4953:6601  // 桥片下的slot 02下的设备2

首先一个PCI设备在PCI总线中的位置可以用 domain: bus: slot: function 来表示,分别代表

  • 总线域(0x0000-0xffff)
  • 总线号(0x00-0xff)
  • 槽位号(0x00-0x1f,一般一个槽位号就是指一个设备号)
  • 功能号(0-7, 一个pci 物理设备可以实现多个功能设备,且逻辑功能相互独立,其实就是硬件虚拟化)

  以上面的 04:00.0 为例,总线域为0000(lspci默认省略总线域0000,可以加参数-D显示),bus总线号为04,槽位号为00,功能号为0,对应的是具体的设备,因为槽位号为00
  以上面的 02:01.0 为例,总线域为0000(lspci默认省略总线域0000,可以加参数-D显示),bus总线号为02,槽位号为01,功能号为0,对应的是桥片下的slot,并非具体的设备

[root@localhost keda_moyun]# lspci -nn -D

在这里插入图片描述

1. 查看具体设备的配置空间

# lspci -s 04:00.0
04:00.0 Class 0500: Device 4953:6601
    Subsystem: Device 4953:6601
    Flags: bus master, fast devsel, latency 0, IRQ 154
    Memory at f3600000 (32-bit, non-prefetchable) [size=2M]
    Capabilities: [40] Power Management version 3
    Capabilities: [48] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [58] Express Endpoint, MSI 00
    Capabilities: [100] Device Serial Number 00-00-00-00-00-00-00-00
    Kernel driver in use: fpgae1
00: 53 49 01 66 46 01 10 00 00 00 00 05 10 00 00 00
10: 00 00 60 f3 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 53 49 01 66
30: 00 00 00 00 40 00 00 00 00 00 00 00 9a 01 00 00
40: 01 48 03 7e 08 00 00 00 05 58 80 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 10 00 01 00 00 8e 64 00
60: 10 28 00 00 11 f4 03 00 40 00 11 10 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

2. 查看 slot 配置空间

查看bus为 06:00.0 对应的3556的对应8796对应port口的配置空间

lspci -s 04:02.0 -vxxx

在这里插入图片描述

3. 查看 其它信息

./lspci  -s 01:00.0 -vvv

在这里插入图片描述

三、setpci

手动修改配置空间寄存器

# 读取 04:17.0 桥片对应port配置空间0x04(command status)寄存器的值
setpci -s 04:17.0 0x4.l
# 修改 04:17.0 桥片对应port配置空间0x04(command status)寄存器的值
setpci -s 04:17.0 0x4.l=0x0007

重新设置command寄存器的值为0x0007
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值