【实用方法】Linux PCI/PCI-E设备配置空间读取与修改

时间:2021-04-17 19:29:23

原文链接:http://ilinuxkernel.com/?p=166

PCIPCIe,是计算机常使用的一种高速总线,PCI/PCIe设备的正常运行,操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCIPCI-E配置空间。通过读写PCI/PCIe配置空间,可以更改设备运行参数,优化设备运行。Linux内核中,因为PCIPCIe只适用了一种总线PCI(内核提供的总线系统),故访问PCI-E配置空间,也包括了PCI设备配置空间。

下面介绍用户空间读取、修改、扫描PCI/PCIe设备的用户命令及使用:

一、读取PCI-E设备配置空间的命令是:lspci 

详细命令参数,可以使用man lspci来查看

[root@localhost ~]# lspci

00:00.0 Host bridge: Intel Corporation 5500 I/O Hub to ESI Port (rev 13)

00:01.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 1 (rev 13)

00:03.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 3 (rev 13)

00:07.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 7 (rev 13)

00:09.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 9 (rev 13)

00:10.0 PIC: Intel Corporation 5520/5500/X58 Physical and Link Layer Registers Port 0 (rev 13)

00:10.1 PIC: Intel Corporation 5520/5500/X58 Routing and Protocol Layer Registers Port 0 (rev 13)

00:11.0 PIC: Intel Corporation 5520/5500 Physical and Link Layer Registers Port 1 (rev 13)

00:11.1 PIC: Intel Corporation 5520/5500 Routing & Protocol Layer Register Port 1 (rev 13)

00:13.0 PIC: Intel Corporation 5520/5500/X58 I/O Hub I/OxAPIC Interrupt Controller (rev 13)

00:14.0 PIC: Intel Corporation 5520/5500/X58 I/O Hub System Management Registers (rev 13)

… …

01:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)

01:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)

04:00.0 SCSI storage controller: LSI Logic / Symbios Logic SAS1068E PCI-Express Fusion-MPT SAS (rev 08)

05:00.0 VGA compatible controller: XGI Technology Inc. (eXtreme Graphics Innovation) Z9s/Z9m (XG21 core)

[root@localhost ~]#


二、 修改 PCIE 配置空间的命令为: setpci
格式和参数:setpci -s BUSID:DEVID.FUNCID REGISTEROFFSET.B=NEWVALUE

如:

setpci -s 0:14.0 60.B=6

是将设备0:14.0设备,PCI配置空间为0x60,写入新的字节值为6。查看PCI配置空间修改是否生效,可以通过lspci命令来查看,如设置0:14.0后,读取命令为lspci –s 0:14.0 –xxx

三、 扫描或探测 PCI/PCI-E 设备的命令为: scanpci

参数:

-v 打印所有设备的配置空间信息。

-1 使用PCI配置Type 1

-2 使用PCI配置Type 2

-f -1-2参数结合,强制使用某种类型。

-O:使用OS的PCI配置空间访问方式访问。