在 Linux 上使用 lspci 命令查看 PCI 总线硬件设备信息

lspci 命令用于显示 Linux 系统上的设备和驱动程序。

当在个人电脑或服务器上运行 Linux 时,有时需要识别该系统中的硬件。lspci 命令用于显示连接到 PCI 总线的所有设备,从而满足上述需求。该命令由 pciutils 包提供,可用于各种基于 Linux 和 BSD 的操作系统。

基础用法

当普通用户运行 lspci 时,显示的信息可能会受到访问权限限制。使用 sudo 运行该命令可以提供完整的信息。

以下是家庭媒体中心电脑的一个示例。它是一台基于 AMD Phenom CPU 的系统,具有 AMD 芯片组,它还配备了 Atheros 无线控制器和 Nvidia 显卡。

仅运行 lspci 会列出 PCI 总线及其连接的设备。所有硬件设备都列有供应商、名称和型号等详细信息。

bash 复制代码
   1. $ sudo lspci
   2. 00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] RS880 Host     Bridge
   3. 00:02.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780     PCI to PCI bridge (ext gfx port 0)
   4. 00:04.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880     PCI to PCI bridge (PCIE port 0)
   5. 00:05.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880     PCI to PCI bridge (PCIE port 1)
   6. 00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD/ATI]     SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
   7. 00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0     USB OHCI0 Controller
   8. 00:12.1 USB controller: Advanced Micro Devices, Inc. [AMD/ATI]     SB7x0 USB OHCI1 Controller
   9. 00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI]     SB7x0/SB8x0/SB9x0 USB EHCI Controller
   10. 00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI]     SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
   11. 00:13.1 USB controller: Advanced Micro Devices, Inc. [AMD/ATI]     SB7x0 USB OHCI1 Controller
   12. 00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI]     SB7x0/SB8x0/SB9x0 USB EHCI Controller
   13. 00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus     Controller (rev 3c)
   14. 00:14.1 IDE interface: Advanced Micro Devices, Inc. [AMD/ATI]     SB7x0/SB8x0/SB9x0 IDE Controller
   15. 00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD/ATI]     SB7x0/SB8x0/SB9x0 LPC host controller
   16. 00:14.4 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SBx00     PCI to PCI Bridge
   17. 00:14.5 USB controller: Advanced Micro Devices, Inc. [AMD/ATI]     SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
   18. 00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h     Processor HyperTransport Configuration
   19. 00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h     Processor Address Map
   20. 00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h     Processor DRAM Controller
   21. 00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h     Processor Miscellaneous Control
   22. 00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h     Processor Link Control
   23. 01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce     GTX 650] (rev a1)
   24. 01:00.1 Audio device: NVIDIA Corporation GK107 HDMI Audio Controller     (rev a1)
   25. 02:00.0 Network controller: Qualcomm Atheros AR9287 Wireless Network     Adapter (PCI-Express) (rev 01)

详细输出

添加 -v 选项会显示每个设备的详细信息,可以使用 -vv 或 -vvv 来获取更多的设备细节。在 -v 级别,lspci 会显示所有设备的各种子系统和内存地址、中断请求(IRQ)编号和一些其他功能信息。输出信息会非常长。在系统上试一试吧。

使用 grep 过滤搜索

可能会需要缩小搜索范围。例如,RPM Fusion 网站有安装 Nvidia 图形驱动程序的说明,里面就首先使用了 grep 命令来定位显卡信息。下面是在笔记本电脑上得到的输出:

bash 复制代码
   1. $ sudo lspci | grep -e VGA
   2. 00:02.0 VGA compatible controller: Intel Corporation UHD Graphics     620 (rev 07)
   3. $ sudo lspci | grep -e 3D
   4. 01:00.0 3D controller: NVIDIA Corporation GM108M [GeForce MX130]     (rev a2)

下面(LCTT 译注:原文为 "above",应为作者笔误)的 grep 命令在媒体中心 PC 上定位了一个 VGA 设备,但没有显示 3D 设备。

bash 复制代码
   1. $ sudo lspci | grep -e VGA
   2. 01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce     GTX 650] (rev a1)
   3. $ sudo lspci | grep -e 3D
   4. $

按供应商 ID 搜索

还有另一种无需 grep 的方法可以使用。假设想确认一下此计算机是否有其他的 Nvidia 设备,在此之前们还需要一些额外信息,使用 -nn 选项显示的供应商和设备 ID 号。在媒体中心 PC 上,此选项会给出 VGA 卡、供应商 ID 和设备 ID:

  1. $ sudo lspci -nn | grep -e VGA
  2. 01:00.0 VGA compatible controller 0300: NVIDIA Corporation GK107 GeForce GTX 650 10de:0fc6 (rev a1)

设备名称后的方括号内有用冒号分隔的数字,即供应商和设备 ID。输出表明 Nvidia Corporation 制造的设备的供应商 ID 为 10de。

-d 选项用于指定供应商、设备或类 ID 的所有设备。以下是系统中的所有 Nvidia 设备(保留 -nn 以解析供应商 ID):

bash 复制代码
   1. $ sudo lspci -nn -d 10de:
   2. 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation     GK107 [GeForce GTX 650] [10de:0fc6] (rev a1)
   3. 01:00.1 Audio device [0403]: NVIDIA Corporation GK107 HDMI Audio     Controller [10de:0e1b] (rev a1)

从输出中可以看到,除了显卡之外,还有一个 Nvidia 音频设备。实际上它们都属于同一张 Nvidia GeForce GTX 650 卡,但这仍然是一个很好的示例。

内核模块

结合 PCI 硬件设备,lspci 可以使用 -k 选项显示内核加载了哪些驱动程序模块。将此选项添加到 lspci 命令来查看有关 Nvidia 设备的信息。

bash 复制代码
   1. $ sudo lspci -nn -k -d 10de:
   2. 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation     GK107 [GeForce GTX 650] [10de:0fc6] (rev a1)
   3.  Subsystem: eVga.com. Corp. GK107 [GeForce GTX 650] [3842:2650]
   4.  Kernel driver in use: nvidia
   5.  Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
   6. 01:00.1 Audio device [0403]: NVIDIA Corporation GK107 HDMI Audio     Controller [10de:0e1b] (rev a1)
   7.  Subsystem: eVga.com. Corp. GK107 HDMI Audio Controller [3842:2650]
   8.  Kernel driver in use: snd_hda_intel
   9.  Kernel modules: snd_hda_intel

可以看到额外显示了两行:正在使用的内核驱动程序(Kernel driver in use) 和 内核模块(Kernel modules),其中后者列出了可用于支持该设备的模块。

同步最新状态

新设备和供应商总是在不断迭代。如果看到显示为 unknown 的设备,说明 PCI 设备 ID 数据库可能已过时。有两种方法可以检查更新。-Q 选项会使用 DNS 查询中央数据库,当然,这需要联网。

bash 复制代码
   $ sudo lspci -Q

还可以通过运行命令 update-pciids 来更新本地 PCI ID 数据库。

bash 复制代码
   1. $ sudo update-pciids
   2. Downloaded daily snapshot dated 2021-08-22 03:15:01

了解有关硬件的更多信息

当然,lspci 只是 Linux 中用于查询系统硬件和软件的诸多命令之一。读者可以在阅读关于 USB 设备的文章,了解有关 Linux 硬件的更多信息:使用此 USB ID 存储库识别 Linux 上的更多设备


via: https://opensource.com/article/21/9/lspci-linux-hardware

作者:Alan Formy-Duval 选题:lujun9972 译者:unigeorge 校对:turbokernel

本文由 LCTT 原创编译,Linux中国 荣誉推出 | 2021-09-17 09:14


获取 PCI 总线硬件设备信息的 7 个 Linux lspci 命令示例

【摘要】

lspci 代表 pci 列表。将此命令视为"ls"+"pci"。

将显示有关服务器中所有 PCI 总线的信息。

除了显示有关总线的信息外,它还将显示有关连接到 PCI 和 PCIe 总线的所有硬件设备的信息。

例如,它将显示有关以太网卡、RAID 控制器、视频卡等的信息。

lspci 实用程序是 pciutils 软件包的一部分。

如果没有 pciutilis,请将其安装在系统上,如下所示。

bash 复制代码
# yum install pciutils

1. 默认用法

默认情况下,它将显示所有设备信息,如下所示。第一个字段是槽信息,格式如下:domain:bus:device.function

在这个例子中,由于所有的域都是 0,所以 lspci 不会显示域。

bash 复制代码
# 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:09.0 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI Express Root Port 9 (rev 13)
00:14.0 PIC: Intel Corporation 7500/5520/5500/X58 I/O Hub System Management Registers (rev 13)
00:14.1 PIC: Intel Corporation 7500/5520/5500/X58 I/O Hub GPIO and Scratch Pad Registers (rev 13)
00:14.2 PIC: Intel Corporation 7500/5520/5500/X58 I/O Hub Control Status and RAS Registers (rev 13)
00:1a.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 02)
00:1d.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92)
00:1f.0 ISA bridge: Intel Corporation 82801IB (ICH9) LPC Interface Controller (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801IB (ICH9) 2 port SATA Controller [IDE mode] (rev 02)
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)
03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)
06:03.0 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200eW WPCM450 (rev 0a)

注意:在下面的所有示例中,我们将通过从上面的列表中选择几个设备来仅显示部分输出。

2. 以不同格式转储 PCI 信息

如果要将 lspci 命令的输出传递给 shell 脚本,可能需要使用 -m 选项(或 -mm 选项),如下所示。

当要查看子系统信息时,此选项也很有帮助。例如,对于 RAID 控制器,默认输出只是说正在使用 LSI Logic RAID 控制器。但是,以下输出显示子系统,即 DELL PERC H700 集成 RAID 控制器系统。

bash 复制代码
# lspci -m
00:00.0 "Host bridge" "Intel Corporation" "5500 I/O Hub to ESI Port" -r13 "Dell" "PowerEdge R610 I/O Hub to ESI Port"
00:09.0 "PCI bridge" "Intel Corporation" "7500/5520/5500/X58 I/O Hub PCI Express Root Port 9" -r13 "" ""
00:14.0 "PIC" "Intel Corporation" "7500/5520/5500/X58 I/O Hub System Management Registers" -r13 "" ""
00:1a.0 "USB controller" "Intel Corporation" "82801I (ICH9 Family) USB UHCI Controller #4" -r02 "Dell" "PowerEdge R610 USB UHCI Controller"
00:1f.0 "ISA bridge" "Intel Corporation" "82801IB (ICH9) LPC Interface Controller" -r02 "Dell" "PowerEdge R610 82801IB (ICH9) LPC Interface Controller"
00:1f.2 "IDE interface" "Intel Corporation" "82801IB (ICH9) 2 port SATA Controller [IDE mode]" -r02 -p8f "Dell" "PowerEdge R610 SATA IDE Controller"
01:00.0 "Ethernet controller" "Broadcom Corporation" "NetXtreme II BCM5709 Gigabit Ethernet" -r20 "Dell" "PowerEdge R610 BCM5709 Gigabit Ethernet"
03:00.0 "RAID bus controller" "LSI Logic / Symbios Logic" "MegaRAID SAS 2108 [Liberator]" -r05 "Dell" "PERC H700 Integrated"
06:03.0 "VGA compatible controller" "Matrox Electronics Systems Ltd." "MGA G200eW WPCM450" -r0a "Dell" "PowerEdge R610 MGA G200eW WPCM450"

3. 以树格式输出

-t 选项将以树格式显示输出,其中包含有关总线的信息,以及设备如何连接到这些总线,如下所示。输出将仅使用数字 ID。

bash 复制代码
# lspci -t
-[0000:00]-+-00.0
           +-01.0-[01]--+-00.0
           |            \-00.1
           +-03.0-[02]--+-00.0
           |            \-00.1
           +-07.0-[04]--
           +-09.0-[05]--
           +-14.0
           +-14.1
           +-1c.0-[03]----00.0
           +-1d.0
           +-1e.0-[06]----03.0
           +-1f.0

4. 详细的设备信息

如果想查看特定设备的详细信息,请使用 -v 获取更多信息。这将显示有关所有设备的信息。该命令的输出会很长,需要向下滚动查看相应的部分。

对于详细程度的附加级别,可以使用 -vv 或 -vvv。

在以下示例中,我仅给出了 RAID 控制器设备的输出。

bash 复制代码
# lspci -v
 03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)
        Subsystem: Dell PERC H700 Integrated
        Flags: bus master, fast devsel, latency 0, IRQ 16
        I/O ports at fc00 [size=256]
        Memory at df1bc000 (64-bit, non-prefetchable) [size=16K]
        Memory at df1c0000 (64-bit, non-prefetchable) [size=256K]
        Expansion ROM at df100000 [disabled] [size=256K]
        Capabilities: [50] Power Management version 3
        Capabilities: [68] Express Endpoint, MSI 00
        Capabilities: [d0] Vital Product Data
        Capabilities: [a8] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [c0] MSI-X: Enable+ Count=15 Masked-
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [138] Power Budgeting <?>
        Kernel driver in use: megaraid_sas
        Kernel modules: megaraid_sas

5. 在输出中显示设备代码

如果要显示 PCI 供应商代码,并且设备代码仅显示为数字,请使用 -n 选项。这不会查找 PCI 文件以获取数字的相应值。

bash 复制代码
# lspci -n
01:00.1 0200: 14e4:1639 (rev 20)
02:00.0 0200: 14e4:1639 (rev 20)
02:00.1 0200: 14e4:1639 (rev 20)
03:00.0 0104: 1000:0079 (rev 05)
06:03.0 0300: 102b:0532 (rev 0a)

如果要同时显示描述和编号,请使用选项 -nn,如下所示。

bash 复制代码
# lspci -nn
01:00.0 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet [14e4:1639] (rev 20)
03:00.0 RAID bus controller [0104]: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] [1000:0079] (rev 05)
06:03.0 VGA compatible controller [0300]: Matrox Electronics Systems Ltd. MGA G200eW WPCM450 [102b:0532] (rev 0a)
..

6.查找特定设备

当知道 domain🚌slot.func 格式中的插槽号时,可以查询特定设备,如下所示。在下面的示例中,我们没有指定域号,因为它是 0,可以省略。

bash 复制代码
# lspci -s 03:00.0
03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)

当知道 vendor:device 格式的设备编号时,可以查询特定设备,如下所示。

bash 复制代码
# lspci -d 1000:0079
03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)

如果只知道供应商 ID 或设备 ID,则可以省略另一个 ID。例如,以下两个命令都将返回与上述相同的输出。

bash 复制代码
lspci -d:0079
lspci -d 1000:

7.显示内核驱动程序

当想知道将处理特定设备操作的内核模块的名称时,这非常有用。请注意,此选项仅适用于 Kernel 2.6 及更高版本。

bash 复制代码
# lspci -k
00:1f.2 IDE interface: Intel Corporation 82801IB (ICH9) 2 port SATA Controller [IDE mode] (rev 02)
        Subsystem: Dell PowerEdge R610 SATA IDE Controller
        Kernel driver in use: ata_piix
        Kernel modules: ata_generic, pata_acpi, ata_piix
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
        Subsystem: Dell PowerEdge R610 BCM5709 Gigabit Ethernet
        Kernel driver in use: bnx2
        Kernel modules: bnx2
03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)
        Subsystem: Dell PERC H700 Integrated
        Kernel driver in use: megaraid_sas
        Kernel modules: megaraid_sas        

via: 获取 PCI 总线硬件设备信息的 7 个 Linux lspci 命令示例-云社区-华为云 Tiamo_T 发表于 2022/09/08 16:41:32

https://bbs.huaweicloud.com/blogs/374466

相关推荐
承渊政道9 分钟前
Linux系统学习【进程控制:进程创建、终止与等待、进程程序替换、自主shell命令行解释器详解】
linux·服务器·c++·学习·ubuntu·bash·远程工作
Kurisu57513 分钟前
深度拆解:从 Linux 内核 Namespace 与 Cgroups 洞察容器技术的底层本质
java·linux·运维
liulilittle19 分钟前
Linux SS快速诊断命令
linux·运维·智能路由器
晚风吹红霞37 分钟前
Linux下的趣味编程 —— 进度条、Git版本控制与GDB调试实战
linux·运维·git
nan madol39 分钟前
Rocky Linux 9.5 部署 Percona XtraDB Cluster (PXC) 集群
linux·运维·服务器
zincsweet39 分钟前
Linux 命名管道(FIFO)详解:原理分析、源码封装与通信流程图解
linux·服务器·c++·流程图
linux修理工42 分钟前
使用 virt-install 命令行快速创建 KVM 虚拟机(以 CentOS 7 为例)
linux·运维·centos
|_⊙44 分钟前
进程间通信(System V 标准下的多种通信方式)
linux·运维·服务器
zincsweet1 小时前
C++ 实现进程池:主从架构、管道通信与任务调度
linux·c++
草莓熊Lotso1 小时前
【CMake】静态库的编译、链接与引用全解析
linux·c语言·数据库·c++·软件工程·cmake