lspci命令詳解

  

基礎命令學習目錄首頁html

 

最近常常用到 lspci -nn | grep Eth 命令,須要學習下PCI總線,找到一篇文章,雖然也是轉載,但寫的較清晰,再次轉載下。linux

http://blog.csdn.net/zhenhuakang/article/details/5463605數據庫

 

1、PCI簡介
     PCI是一種外設總線規範。咱們先來看一下什麼是總線:總線是一種傳輸信號的路徑或信道。典型狀況是,總線是鏈接於一個或多個導體的電氣連線,總 線上鏈接的全部設備可在同一時間收到全部的傳輸內容。總線由電氣接口和編程接口組成。本文討論Linux 下的設備驅動,因此,重點關注編程接口。
     PCI是Peripheral Component Interconnect(外圍設備互聯)的簡稱,是廣泛使用在桌面及更大型的計算機上的外 設總線。PCI架構被設計爲ISA標準的替代品,它有三個主要目標:得到在計算機和外設之間傳輸數據時更好的性能;儘量的平臺無關;簡化往系統中添加和 刪除外設的工做。

2、PCI尋址
     從如今開始,我想盡量經過一些實際的例子來講明問題,而減小理論方面的問題的描述,由於,相關的理論的東西,能夠在其它地方找到。
     咱們先來看一個例子,個人電腦裝有1G的RAM,1G之後的物理內存地址空間都是外部設備IO在系統內存地址空間上的映射。 /proc/iomem描述了系統中全部的設備I/O在內存地址空間上的映射。咱們來看地址從1G開始的第一個設備在/proc/iomem中是如何描述 的:
             40000000-400003ff : 0000:00:1f.1
     這是一個PCI設備,40000000-400003ff是它所映射的內存地址空間,佔據了內存地址空間的1024 bytes的位置,而 0000:00:1f.1則是一個PCI外設的地址,它以冒號和逗號分隔爲4個部分,第一個16位表示域,第二個8位表示一個總線編號,第三個5位表示一 個設備號,最後是3位,表示功能號。編程

     由於PCI規範容許單個系統擁有高達256個總線,因此總線編號是8位。但對於大型系統而言,這是不夠的,因此,引入了域的概念,每一個 PCI域能夠擁有最多256個總線,每一個總線上可支持32個設備,因此設備號是5位,而每一個設備上最多可有8種功能,因此功能號是3位。由此,咱們能夠得 出上述的PCI設備的地址是0號域0號總線上的31號設備上的1號功能。bash

     那上述的這個PCI設備究竟是什麼呢?下面是個人電腦上的lspci命令的輸出:
     00:00.0 Host bridge: Intel Corporation 82845 845 (Brookdale) Chipset Host Bridge (rev 04)
     00:01.0 PCI bridge: Intel Corporation 82845 845 (Brookdale) Chipset AGP Bridge(rev 04)
     00:1d.0 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #1) (rev 02)
     00:1d.1 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #2) (rev 02)
     00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 42)
     00:1f.0 ISA bridge: Intel Corporation 82801CAM ISA Bridge (LPC) (rev 02)
     00:1f.1 IDE interface: Intel Corporation 82801CAM IDE U100 (rev 02)
     00:1f.3 SMBus: Intel Corporation 82801CA/CAM SMBus Controller (rev 02)
     00:1f.5 Multimedia audio controller:Intel Corporation 82801CA/CAM AC'97 Audio Controller (rev 02)
     00:1f.6 Modem: Intel Corporation 82801CA/CAM AC'97 Modem Controller (rev 02)
     01:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 420 Go](rev a3)
     02:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller(rev 46)
     02:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+(rev 10)
     02:04.0 CardBus bridge: O2 Micro, Inc. OZ6933 Cardbus Controller (rev 01)
     02:04.1 CardBus bridge: O2 Micro, Inc. OZ6933 Cardbus Controller (rev 01)
     lspci沒有標明域,但對於一臺PC而言,通常只有一個域,即0號域。經過這個輸出咱們能夠看到它是一個IDE interface。由上述的 輸出能夠看到,個人電腦上共有3個PCI總線(0號,1號,2號)。在單個系統上,插入多個總線是經過橋(bridge)來完成的,橋是一種用來鏈接總線 的特殊PCI外設。因此,PCI系統的總體佈局組織爲樹型,咱們能夠經過上面的lspci輸出,來畫出個人電腦上的PCI系統的樹型結構:
00:00.0(主橋)--00:01.0(PCI橋)-----01:00:0(nVidia顯卡)
                   |
                   |---00:1d(USB控制器)--00:1d:0(USB1號控制器)
                   |                    |
                   |                    |--00:1d:1(USB2號控制器)                    |
                   |-00:1e:0(PCI橋)--02:00.0(IEEE1394)
                   |                |
                   |                |-02:01.0(8139網卡)
                   |                |
                   |                |-02:04(CardBus橋)-02:04.0(橋1)
                   |                                   |
                   |                                   |--02:04.1(橋2)
                   |
                   |-00:1f(多功能板卡)-00:1f:0(ISA橋)
                                        |
                                        |--00:1f:1(IDE接口)
                                        |
                                        |--00:1f:3(SMBus)
                                        |
                                        |--00:1f:5(多媒體聲音控制器)
                                        |
                                        |--00:1f:6(調制解調器)
     由上圖能夠得出,個人電腦上共有8個PCI設備,其中0號總線上(主橋)上連有4個,1號總線上連有1個,2號總線上連有3個。00:1f是一個連有5個功能的多功能板卡。
     每個PCI設備都有它映射的內存地址空間和它的I/O區域,這點是比較容易理解的。除此以外,PCI設備還有它的配置寄存器。有了配置寄存器, PCI的驅動程序就不須要探測就能訪問設備。配置寄存器的佈局是標準化的,配置空間的4個字節含有一個獨一無二的功能ID,所以,驅動程序可經過查詢外設 的特定 ID來識別其設備。因此,PCI接口標準在ISA之上的主要創新在於配置地址空間。
前文已講過,PCI驅動程序不須要探測就能訪問設備,而這得益於配置地址空間。在系統引導階段,PCI硬件設備保持未激活狀態,但每一個PCI主板均配備有可以處理PCI的固件,固件經過讀寫PCI控制器中的寄存器,提供了對設備配置地址空間的訪問。
     配置地址空間的前64字節是標準化的,它提供了廠商號,設備號,版本號等信息,惟一標識一個PCI設備。同時,它也提供了最多可多達6個的I/O 地址區域,每一個區域能夠是內存也能夠是I/O地址。這幾個I/O地址區域是驅動程序找到設備映射到內存和I/O空間的具體位置的惟一途徑。有了這兩點, PCI驅動程序就完成了至關於探測的功能。關於這64個字節的配置空間的詳細狀況,可參閱《Linux設備驅動程序第三版》P306,再也不詳述。
     下面,咱們來看一下8139too網卡設備的配置空間的詳細狀況。在2.6內核的系統中,能夠在目錄/sys/bus/pci/drivers/ 下看到不少以PCI設備名命名的目錄,但不是說這些設備都存在於你的系統中。咱們進入8139too目錄,其中有一個以它的設備地址0000:02: 01.0命名的目錄。在這個目錄下能夠找到該網卡設備相關的不少信息。其中resource記錄了它的6個I/O地址區域。內容以下:
         0x0000000000003400 0x00000000000034ff 0x0000000000000101
         0x00000000e0000800 0x00000000e00008ff 0x0000000000000200
         0x0000000000000000 0x0000000000000000 0x0000000000000000
         0x0000000000000000 0x0000000000000000 0x0000000000000000
         0x0000000000000000 0x0000000000000000 0x0000000000000000
         0x0000000000000000 0x0000000000000000 0x0000000000000000
         0x0000000000000000 0x0000000000000000 0x0000000000000000
     由該文件能夠看出,8139too設備使用了兩個I/O地址區域,第一個是它映射的I/O端口範圍,第二個是它映射的內存地址空間。關於這兩個值能夠在/proc/iomem和/proc/ioport中獲得驗證。架構

-[0000:00]-+-00.0
           +-02.0
           +-1d.0
           +-1d.1
           +-1d.2
           +-1d.7
           +-1e.0-[0000:01]--+-02.0
           |                 /-05.0
           +-1f.0
           +-1f.1
           +-1f.3
           /-1f.5
00:00.0 Host bridge: Intel Corporation 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface (rev 03)
00:02.0 VGA compatible controller: Intel Corporation 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device (rev 03)
00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 82)
00:1f.0 ISA bridge: Intel Corporation 82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge (rev 02)ide

(LPC Hub 控制器 1 )
00:1f.1 IDE interface: Intel Corporation 82801DB (ICH4) IDE Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 02)
00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 02)
01:02.0 Communication controller: Conexant HSF 56k HSFi Modem (rev 01)
01:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)函數

 
原文連接:https://blog.csdn.net/haishengflying/article/details/81974360

lspci 是一個用來顯示系統中全部PCI總線設備或鏈接到該總線上的全部設備的工具。工具

AD:oop

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設備配置空間

 

lspci 是一個用來顯示系統中全部PCI總線設備或鏈接到該總線上的全部設備的工具。

參數:

-v 使得 lspci 以冗餘模式顯示全部設備的詳細信息。 -vv 使得 lspci 以過冗餘模式顯示更詳細的信息 (事實上是 PCI 設備能給出的全部東西)。這些數據的確切意義沒有在此手冊頁中解釋,若是你想知道更多,請參照 /usr/include/linux/pci.h 或者 PCI 規範。 -n 以數字形式顯示 PCI 生產廠商和設備號,而不是在 PCI ID 數據庫中查找它們。 -x 以十六進制顯示 PCI 配置空間 (configuration space) 的前64個字節映像 (標準頭部信息)。此參數對調試驅動和 lspci 自己頗有用。 -xxx 以十六進制顯示全部 PCI 配置空間的映像。此選項只有 root 可用,而且不少 PCI 設備在你試圖讀取配置空間的未定義部分時會崩潰 (此操做可能不違反PCI標準,可是它至少很是愚蠢)。 -b 以總線爲中心進行查看。顯示全部 IRQ 號和記憶體地址,就像 PCI 總線上的卡看到的同樣,而不是核心看到的內容。 -t 以樹形方式顯示包含全部總線、橋、設備和它們的鏈接的圖表。 -s [[<bus>]:][<slot>][.[<func>]] 僅顯示指定總線、插槽上的設備或設備上的功能塊信息。設備地址的任何部分均可以忽略,或以「*」代替 (意味著全部值)。全部數字都是十六進制。例如:「0:」指的是在0號總線上的全部設備;「0」指的是在任意總線上0號設備的全部功能塊;「0.3」選擇 了全部總線上0號設備的第三個功能塊;「.4」則是隻列出每一設備上的第四個功能塊。 -d [<vendor>]:[<device>] 只顯示指定生產廠商和設備 ID 的設備。 這兩個 ID 都以十六進制表示,能夠忽略或者以「*」代替 (意味著全部值)。 -i <file> 使用 <file> 做爲 PCI ID 數據庫而不是使用預設的 /usr/share/hwdata/pci.ids -p <dir> 使用 <dir> 做爲包含 PCI 總線信息的目錄而不是使用預設的目錄 /proc/bus/pci -m 以機器可讀的方式轉儲 PCI 設備數據 (支持兩種模式:普通和冗餘),便於稿本解析。 -M 使用總線映射模式,這種模式對總線進行全面地掃描以查明總線上的全部設備,包括配置錯誤的橋以後的設備。請注意,此操做只應在調試時使 用,並可能形成系統崩潰 (只在設備有錯誤的時候,可是不幸的是它們存在),此命令只有 root 可使用。同時,在不直接接觸硬體 PCI 訪問模式中使用 -M 參數沒有意義,由於顯示的結果 (排除 lspci 中的 bug 的影響) 與普通的列表模式相同。 --version 顯示 lspci 的版本。這個選項應當單獨使用。 PCILIB 選項 PCILIB OPTIONS PCI 工具使用 PCILIB (一種可移植的庫,提供平臺獨立的函數來訪問 PCI 配置空間)來和PCI卡交互。下面的選項用來控制庫參數,特別是所用訪問模式的指定。預設狀況下,PCILIB 使用第一種可用的訪問模式,不會顯示任何調試信息。每個開關選項都列出了一組它所支持的硬件/軟軟件列表。 -P <dir> 使用 linux 2.1 風格的配置,直接訪問目錄 <dir> 而非 /proc/bus/pci 目錄。(只能在linux 2.1或以上版本中使用) -H1 經過 Intel 架構 1 來實現直接硬體訪問。(只能用於 i386 及其相容機) -H2 經過Intel 架構2來實現直接硬體訪問。警告:此模式只能尋址任何總線上的前16個設備,而且在不少狀況下至關不可靠。(只能用於 i386 及其相容機) -S 使用 PCI 系統調用訪問。(只能用於 Alpha  Ultra-Sparc 上的 Linux) -F <file> 從所給的包含 lspci -x命令輸出的檔案中獲取相關信息。這在分析使用者提交的錯誤報告時頗有用,由於你能夠用任何方式來顯示硬體配置信息而無需爲了獲取更多信息打擾使用者。(可用於全部系統) -G 增長庫的調試等級。(可用於全部系統)

 
實例:
實例1:沒必要加上任何選項,就可以顯示出目前的硬件配備

# lspci 00:00.0 Host bridge: Intel Corporation 3200/3210 Chipset DRAM Controller //主板芯片 00:19.0 Ethernet controller: Intel Corporation 82566DM-2 Gigabit Network Connection (rev 02) 00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02) 00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 02) 00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 02) 00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 02) //USB控制器 00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 02) //接口插槽 00:1c.4 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 5 (rev 02) 00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 02) 00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 02) 00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 02) 00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 02) 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92) 00:1f.0 ISA bridge: Intel Corporation 82801IR (ICH9R) LPC Interface Controller (rev 02) 00:1f.2 IDE interface: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 4 port SATA IDE Controller (rev 02) 00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02) 00:1f.5 IDE interface: Intel Corporation 82801I (ICH9 Family) 2 port SATA IDE Controller (rev 02) 02:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200e [Pilot] ServerEngines (SEP1) (rev 02) //顯卡 03:02.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller (rev 05) //網卡

 
實例2:查看通常詳細信息

# lspci -v 00:00.0 Host bridge: Intel Corporation 3200/3210 Chipset DRAM Controller Subsystem: Intel Corporation Unknown device 34d0 Flags: bus master, fast devsel, latency 0 Capabilities: [e0] Vendor Specific Information 00:19.0 Ethernet controller: Intel Corporation 82566DM-2 Gigabit Network Connection (rev 02) Subsystem: Intel Corporation Unknown device 34d0 Flags: bus master, fast devsel, latency 0, IRQ 50 Memory at e1a00000 (32-bit, non-prefetchable) [size=128K] Memory at e1a20000 (32-bit, non-prefetchable) [size=4K] I/O ports at 20e0 [size=32] Capabilities: [c8] Power Management version 2 Capabilities: [d0] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable+ Capabilities: [e0] #13 [0306]

 
實例3:查看網卡詳細信息

# lspci -s 03:02.0 -vv  //-s後面接的是每一個設備的總線、插槽與相關函數功能 03:02.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller (rev 05) Subsystem: Intel Corporation Unknown device 34d0 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr+ Stepping- SERR+ FastB2B- Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <tabort- <mabort- >SERR- <perr- Latency: 32 (63750ns min), Cache Line Size: 64 bytes Interrupt: pin A routed to IRQ 209 Region 0: Memory at e1920000 (32-bit, non-prefetchable) [size=128K] Region 1: Memory at e1900000 (32-bit, non-prefetchable) [size=128K] Region 2: I/O ports at 1000 [size=64] Expansion ROM at fffe0000 [disabled] [size=128K] Capabilities: [dc] Power Management version 2 Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=1 PME- Capabilities: [e4] PCI-X non-bridge device Command: DPERE- ERO+ RBC=512 OST=1 Status: Dev=00:00.0 64bit- 133MHz- SCD- USC- DC=simple DMMRBC=2048 DMOST=1 DMCRS=8 RSCEM- 266MHz- 533MHz-

 
附錄:
附錄1:爲了能使用這個命令全部功能,你須要有 linux 2.1.82 或以上版本,支持 /proc/bus/pci 接口的核心。在舊版本核心中,PCI工具必須使用只有root才能執行的直接硬體訪問,並且老是出現競爭情況以及其餘問題。
若是你要報告 PCI 設備驅動中,或者是 lspci 自身的 bugs,請在報告中包含 「lspci -vvx」 的輸出。

附錄2:CentOS bash: lspci: command not found解決方法
大多使用/sbin/lspci便可,我發現個人系統中/sbin下也沒有。使用yum install lspci顯示沒有這個包。

# yum whatprovides */lspci Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.grandcloud.cn * extras: mirrors.163.com * updates: mirrors.grandcloud.cn base/filelists | 3.6 MB 00:16 extras/filelists_db | 241 kB 00:00 updates/filelists_db | 2.4 MB 00:19 pciutils-3.1.7-5.el5.x86_64 : PCI bus related utilities //這裏顯示的pciutils-3.1.7-5.el5.x86_64 Repo : base Matched from: Filename : /sbin/lspci pciutils-3.1.7-3.el5.x86_64 : PCI bus related utilities. Repo : installed Matched from: Filename : /sbin/lspci

所以只須要yum install pciutils便可

附錄3.lspci用到的文件/usr/share/hwdata/pci.ids:全部已知 PCI ID 的清單 (廠商,設備名,類,子類)/proc/bus/pci:linux 2.1.82 以後版本核心提供的 PCI 總線配置空間的接口。包含每一個總線 (per-bus) 的子目錄以及每一個設備卡 (per-card) 的配置空間檔案,還有一個 devices 檔案,包含全部PCI設備的列表

相關文章
相關標籤/搜索