一、源码下载及编译
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