Linux PCI/PCI-E裝置配置空間讀取與修改
1 前言
PCI和PCI Express,是電腦常使用的一種高速匯流排。作業系統中的PCI/PCI-E裝置驅動以及作業系統核心,都需要訪問PCI及PCI-E配置空間。PCI/PCI-E裝置的正常運行,離不開PCI/PCI-E配置空間。
通過讀寫PCI/PCI-E配置空間,可以更改裝置運行參數,最佳化裝置運行。本文介紹使用者空間可以讀取、修改、掃描PCI/PCIE裝置的使用者命令及使用。
在Linux核心中,為PCI和PCI-E只適用了一種匯流排PCI(核心提供的匯流排系統),故訪問PCI-E配置空間,也包括了PCI裝置配置空間。
2 P C I E裝置配置空間讀取
讀取PCI-E裝置配置空間的命令是lspci。
NAME
lspci – list all PCI devices
SYNOPSIS
lspci [options]
詳細命令參數,可以使用man lspci來查看,這裡我們只介紹常用參數。
命令預設輸出結果是,當前系統的所有PCI/PCI-E裝置。
[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 ~]#
常用參數:
-v 顯示裝置的詳細資料。
-vv 顯示裝置更詳細的資訊。
-vvv 顯示裝置所有可解析的資訊。
-x 以16進位顯示配置空間的前64位元組,或者CardBus橋的前128位元組。
-xxx 以16進位顯示整個PCI配置空間(256位元組)。
-xxxx 以16進位顯示整個PCI-E配置空間(4096位元組)。
-s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]]:
顯示指定裝置。
樣本:
[root@localhost ~]# lspci -vvvxxxx -s 00:14.0
00:14.0 PIC: Intel Corporation 5520/5500/X58 I/O Hub System Management Registers (rev 13) (prog-if 00 [8259])
Subsystem: Unknown device 00e5:0008
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Capabilities: [40] Express Unknown type IRQ 0
Device: Supported: MaxPayload 128 bytes, PhantFunc 0, ExtTag-
Device: Latency L0s <64ns, L1 <1us