原文链接:http://ilinuxkernel.com/?p=166
PCI和PCIe,是计算机常使用的一种高速总线,PCI/PCIe设备的正常运行,操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及PCI-E配置空间。通过读写PCI/PCIe配置空间,可以更改设备运行参数,优化设备运行。在Linux内核中,因为PCI和PCIe只适用了一种总线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 ~]#
格式和参数: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配置空间访问方式访问。