lspci 是Linux系统中用于显示PCI(Peripheral Component Interconnect)和PCIe(PCI Express)设备信息的命令。它从内核的PCI设备数据库中读取信息,并以可读的格式显示所有PCI设备的详细信息。对于硬件故障排查、驱动安装和系统配置来说,lspci是非常重要的诊断工具。
lspci [选项]
| 选项 | 说明 |
|---|---|
-m |
以机器可读的格式显示(用于脚本处理) |
-mm |
以机器可读的键值对格式显示 |
-t |
以树状图显示设备层次结构 |
-v |
显示详细信息(冗长模式) |
-vv |
显示非常详细的信息 |
-vvv |
显示最详细的信息(包括PCI配置空间) |
-k |
显示每个设备使用的内核驱动和模块 |
-nn |
同时显示设备的数字ID和名称 |
-x |
以十六进制显示PCI配置空间的前64字节 |
-xxx |
以十六进制显示完整的PCI配置空间 |
-xxxx |
显示扩展PCI配置空间 |
-s [[domain]:][bus]:[slot].[func] |
只显示指定设备的信息 |
-d [vendor]:[device] |
只显示指定厂商和设备ID的设备 |
-i 文件 |
使用指定的ID数据库文件 |
-D |
始终显示PCI域号 |
-b |
以总线为中心查看(显示总线上的所有地址) |
-P |
通过/proc/bus/pci接口访问 |
-H 模式 |
使用指定的访问模式(1、2、sysfs) |
-M |
启用总线映射模式(用于故障排查) |
-h, --help |
显示帮助信息 |
--version |
显示版本信息 |
PCI设备地址由以下部分组成:
[domain]:[bus]:[slot].[function]
例如:0000:00:1f.2 表示:
- 域 (domain): 0000
- 总线 (bus): 00
- 插槽 (slot): 1f
- 功能 (function): 2
| 字段 | 说明 | 示例 |
|---|---|---|
| 设备地址 | PCI设备的物理地址 | 00:00.0 |
| Class | 设备类别(十六进制+描述) | 0300 - VGA兼容控制器 |
| Vendor | 厂商ID(十六进制+名称) | 8086 - Intel Corporation |
| Device | 设备ID(十六进制+名称) | 9bca - Comet Lake-U GT2 [UHD Graphics] |
| SVendor | 子系统厂商ID | 17aa - Lenovo |
| SDevice | 子系统设备ID | 3801 - ThinkPad T14 Gen 1 |
| Rev | 修订版本号 | 04 |
| ProgIf | 编程接口 | 00 |
| Interrupt | 中断号 | 16 |
| Region | 内存/IO区域 | Memory at 602c000000 (64-bit, non-prefetchable) |
显示系统中所有PCI设备的基本信息:
# 显示所有PCI设备
lspci
# 示例输出:
# 00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 07)
# 00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile)
# 00:14.0 USB controller: Intel Corporation Cannon Lake PCH USB 3.1 xHCI Host Controller (rev 10)
# 00:16.0 Communication controller: Intel Corporation Cannon Lake PCH HECI Controller (rev 10)
# 00:17.0 SATA controller: Intel Corporation Cannon Lake PCH SATA AHCI Controller (rev 10)
# 00:1c.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port #1 (rev f0)
# 00:1f.0 ISA bridge: Intel Corporation Cannon Lake PCH LPC Controller (rev 10)
# 00:1f.3 Audio device: Intel Corporation Cannon Lake PCH cAVS (rev 10)
# 00:1f.4 SMBus: Intel Corporation Cannon Lake PCH SMBus Controller (rev 10)
# 00:1f.5 Serial bus controller: Intel Corporation Cannon Lake PCH SPI Controller (rev 10)
# 01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
# 02:00.0 Network controller: Intel Corporation Wireless-AC 9560 [Jefferson Peak] (rev 10)
显示PCI设备的详细信息:
# 显示详细信息
lspci -v
# 显示非常详细的信息
lspci -vv
# 显示最详细信息(包括配置空间)
lspci -vvv
# 显示特定设备的详细信息
lspci -s 00:02.0 -v
# 示例输出(部分):
# 00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile) (prog-if 00 [VGA controller])
# Subsystem: Dell UHD Graphics 630 (Mobile)
# Flags: bus master, fast devsel, latency 0, IRQ 139
# Memory at 602c000000 (64-bit, non-prefetchable) [size=16M]
# Memory at 4000000000 (64-bit, prefetchable) [size=256M]
# I/O ports at 3000 [size=64]
# [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
# Capabilities: [40] Vendor Specific Information: Len=0c
# Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
# Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable- 64bit-
# Capabilities: [d0] Power Management version 2
# Capabilities: [100] Process Address Space ID (PASID)
# Capabilities: [200] Address Translation Service (ATS)
# Kernel driver in use: i915
# Kernel modules: i915
显示每个PCI设备使用的内核驱动和模块:
# 显示设备使用的驱动和模块
lspci -k
# 显示详细信息+驱动信息
lspci -vk
# 示例输出:
# 00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile)
# Subsystem: Dell UHD Graphics 630 (Mobile)
# Kernel driver in use: i915
# Kernel modules: i915
#
# 00:14.0 USB controller: Intel Corporation Cannon Lake PCH USB 3.1 xHCI Host Controller (rev 10)
# Subsystem: Dell Cannon Lake PCH USB 3.1 xHCI Host Controller
# Kernel driver in use: xhci_hcd
# Kernel modules: xhci_pci
#
# 01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
# Subsystem: Dell RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
# Kernel driver in use: r8169
# Kernel modules: r8169
显示设备的数字ID和设备层次结构:
# 显示数字ID(厂商ID和设备ID)
lspci -nn
# 显示树状结构
lspci -t
# 显示树状结构+详细信息
lspci -tvv
# 示例树状输出:
# -[0000:00]-+-00.0
# +-02.0
# +-14.0
# +-16.0
# +-17.0
# +-1c.0-[01]----00.0
# +-1f.0
# +-1f.3
# +-1f.4
# \-1f.5
# 数字ID输出示例:
# 00:02.0 VGA compatible controller [0300]: Intel Corporation UHD Graphics 630 (Mobile) [8086:9bca] (rev 07)
# 01:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
按设备类别筛选显示:
# 只显示网络控制器
lspci | grep -i network
lspci | grep -i ethernet
# 只显示显示控制器(显卡)
lspci | grep -i vga
lspci | grep -i display
# 只显示USB控制器
lspci | grep -i usb
# 只显示存储控制器
lspci | grep -i sata
lspci | grep -i scsi
lspci | grep -i raid
# 只显示音频设备
lspci | grep -i audio
# 使用数字ID筛选
lspci -d 10ec: # 显示所有Realtek设备
lspci -d 8086: # 显示所有Intel设备
lspci -d 1002: # 显示所有AMD设备
lspci -d 10de: # 显示所有NVIDIA设备
以十六进制显示PCI设备的配置空间:
# 显示PCI配置空间前64字节
lspci -x
# 显示完整PCI配置空间(256字节)
lspci -xxx
# 显示特定设备的配置空间
lspci -s 00:02.0 -xxx
# 示例输出:
# 00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile) (rev 07)
# 00: 86 80 ca 9b 07 00 10 00 07 00 00 03 00 00 00 00
# 10: 04 00 00 0c 60 02 00 00 00 00 00 40 01 00 00 00
# 20: 01 30 00 00 00 00 00 00 00 00 00 00 86 80 18 40
# 30: 00 00 00 00 40 00 00 00 00 00 00 00 0b 01 00 00
以机器可读格式输出,便于脚本处理:
# 机器可读格式(旧格式)
lspci -m
# 键值对格式(推荐用于脚本)
lspci -mm
# JSON格式(如果支持)
lspci -mm | python3 -c "import sys, json; print(json.dumps([dict(zip(['slot','cls','vendor','device','svendor','sdevice','rev','progif','driver'], line.split('\" \"'))) for line in sys.stdin.read().split('\n') if line], indent=2))"
# 提取特定信息到变量
VENDOR_ID=$(lspci -s 00:02.0 -n | awk '{print $3}' | cut -d: -f1)
DEVICE_ID=$(lspci -s 00:02.0 -n | awk '{print $3}' | cut -d: -f2)
echo "Vendor ID: $VENDOR_ID, Device ID: $DEVICE_ID"
# 显示设备及其驱动,按总线排序
lspci -Dk
# 以总线为中心的视图
lspci -b
# 显示所有Intel设备的详细信息
lspci -d 8086: -vv
# 显示树状结构,包括设备名称
lspci -t -nn
# 显示特定类别的所有设备
lspci -d ::0300 # 所有显示控制器
lspci -d ::0200 # 所有网络控制器
lspci -d ::0106 # 所有SATA控制器
# 检查PCIe链路速度和宽度
lspci -vv | grep -A 5 -B 5 "LnkSta"
# 检查设备是否支持SR-IOV
lspci -vv | grep -i sriov
| 类别代码 | 类别名称 | 说明 |
|---|---|---|
00 |
Unclassified | 未分类设备 |
01 |
Mass storage controller | 大容量存储控制器(SCSI、SATA、RAID等) |
02 |
Network controller | 网络控制器(以太网、无线网卡等) |
03 |
Display controller | 显示控制器(显卡、集成显卡等) |
04 |
Multimedia controller | 多媒体控制器(音频、视频采集卡等) |
05 |
Memory controller | 内存控制器 |
06 |
Bridge | 桥接设备(PCI桥、PCIe桥等) |
07 |
Communication controller | 通信控制器(串口、并口、蓝牙等) |
08 |
System peripheral | 系统外设(DMA控制器、定时器等) |
09 |
Input device controller | 输入设备控制器(键盘、鼠标控制器等) |
0a |
Docking station | 扩展坞 |
0b |
Processor | 处理器(协处理器等) |
0c |
Serial bus controller | 串行总线控制器(USB、FireWire、SMBus等) |
0d |
Wireless controller | 无线控制器(Wi-Fi、蓝牙等) |
0e |
Intelligent controller | 智能控制器 |
0f |
Satellite communications controller | 卫星通信控制器 |
10 |
Encryption controller | 加密控制器(TPM、加密加速器等) |
11 |
Signal processing controller | 信号处理控制器 |
12 |
Processing accelerators | 处理加速器(GPU、FPGA等) |
13 |
Non-Essential Instrumentation | 非必要仪器设备 |
#!/bin/bash
# 脚本1:检测硬件信息
echo "=== 系统硬件检测报告 ==="
echo "生成时间: $(date)"
echo ""
# 检测显卡信息
echo "1. 显卡信息:"
lspci | grep -i "vga\|3d\|display" | while read line; do
echo " $line"
done
# 检测网卡信息
echo ""
echo "2. 网络控制器:"
lspci | grep -i "network\|ethernet" | while read line; do
DEVICE=$(echo $line | awk '{print $1}')
echo " $line"
echo " 驱动信息: $(lspci -s $DEVICE -k | grep "Kernel driver" | cut -d: -f2)"
done
# 检测存储控制器
echo ""
echo "3. 存储控制器:"
lspci | grep -i "sata\|scsi\|raid" | while read line; do
echo " $line"
done
# 脚本2:检查特定设备是否存在
check_device() {
local vendor=$1
local device=$2
if lspci -d ${vendor}:${device} > /dev/null 2>&1; then
echo "设备 ${vendor}:${device} 存在"
return 0
else
echo "设备 ${vendor}:${device} 不存在"
return 1
fi
}
# 检查NVIDIA显卡是否存在
check_device "10de" "1c03"
# 脚本3:生成硬件ID报告
generate_hardware_report() {
OUTPUT_FILE="/tmp/hardware_report_$(date +%Y%m%d_%H%M%S).txt"
echo "硬件ID报告" > $OUTPUT_FILE
echo "==========" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
lspci -nn | while read line; do
if [[ $line =~ \[([0-9a-f]{4}):([0-9a-f]{4})\] ]]; then
vendor_id=${BASH_REMATCH[1]}
device_id=${BASH_REMATCH[2]}
echo "$line" >> $OUTPUT_FILE
echo "Vendor ID: $vendor_id, Device ID: $device_id" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
fi
done
echo "报告已保存到: $OUTPUT_FILE"
}
# 脚本4:检查PCIe链路状态
check_pcie_link_status() {
echo "PCIe链路状态检查:"
echo "================="
lspci -vv 2>/dev/null | grep -A 5 -B 5 "LnkSta:" | while read line; do
if [[ $line =~ ^([0-9a-f]{2}:[0-9a-f]{2}\.[0-9a-f]) ]]; then
device=$BASH_REMATCH
echo "设备: $device"
elif [[ $line =~ LnkSta: ]]; then
echo " $line"
fi
done
}
| 厂商ID | 厂商名称 | 常见产品 |
|---|---|---|
8086 |
Intel Corporation | CPU、芯片组、网卡、集成显卡 |
10de |
NVIDIA Corporation | 独立显卡、专业显卡 |
1002 |
Advanced Micro Devices (AMD) | CPU、显卡、芯片组 |
10ec |
Realtek Semiconductor | 声卡、网卡、读卡器 |
14e4 |
Broadcom Inc. | 网卡、存储控制器 |
1969 |
Atheros Communications | 无线网卡 |
1217 |
O2 Micro, Inc. | 读卡器 |
1b73 |
FLIR Systems | 视频采集卡 |
15ad |
VMware | 虚拟设备 |
1234 |
Technical Corp. | 测试设备 |
-vv输出中查看/usr/share/misc/pci.ids数据库文件来解析厂商和设备名称sudo update-pciids# 1. lspci命令不存在
# 检查是否安装
which lspci
# 安装(如果需要)
# Ubuntu/Debian: sudo apt-get install pciutils
# RHEL/CentOS: sudo yum install pciutils
# 2. 设备信息不完整
# 更新PCI ID数据库
sudo update-pciids
# 3. 无法查看配置空间
# 使用root权限运行
sudo lspci -xxx
# 4. 检查设备是否被内核识别
dmesg | grep -i pci
dmesg | grep -i "pci.*enable"
# 5. 查看原始PCI信息
cat /proc/bus/pci/devices
ls -la /sys/bus/pci/devices/
# 6. 重置PCI设备(危险!仅在必要时使用)
# 查找设备地址
lspci -n -s 00:02.0
# 卸载驱动
sudo modprobe -r i915
# 重新扫描PCI总线
sudo echo 1 > /sys/bus/pci/devices/0000:00:02.0/remove
sudo echo 1 > /sys/bus/pci/rescan
# 7. 检查PCIe链路状态
lspci -vv | grep -A 3 "LnkSta\|LnkCap"
# 8. 查看PCI设备资源
cat /proc/iomem | grep -i pci
cat /proc/ioports | grep -i pci
# PCI配置空间布局(前64字节):
# 偏移 长度 字段
# 0x00 2 厂商ID (Vendor ID)
# 0x02 2 设备ID (Device ID)
# 0x04 2 命令寄存器 (Command)
# 0x06 2 状态寄存器 (Status)
# 0x08 1 修订ID (Revision ID)
# 0x09 3 类代码 (Class Code)
# 0x0C 1 缓存行大小 (Cache Line Size)
# 0x0D 1 主延迟定时器 (Master Latency Timer)
# 0x0E 1 头类型 (Header Type)
# 0x0F 1 BIST (Built-In Self Test)
# 0x10 4 基地址寄存器0 (Base Address Register 0)
# 0x14 4 基地址寄存器1 (Base Address Register 1)
# ... 更多基地址寄存器
# 0x3C 1 中断线 (Interrupt Line)
# 0x3D 1 中断引脚 (Interrupt Pin)
# 0x3E 1 最小授权 (Min Grant)
# 0x3F 1 最大延迟 (Max Latency)
# 查看特定偏移的值
sudo lspci -s 00:02.0 -xxx | head -20