命令简介
lspci
(list PCI devices)是用于列出系统中所有PCI总线及连接设备信息的工具,可展示设备的厂商、型号、类别、内核驱动、配置空间等详细属性。PCI设备包括显卡、网卡、声卡、存储控制器等硬件,lspci
通过读取PCI配置空间获取信息,支持从简单列表到十六进制配置 dump 的多种输出模式,是硬件识别、驱动调试、系统诊断的核心工具,尤其适用于排查PCI设备兼容性、驱动加载问题。
其核心功能:
- 硬件信息展示:显示所有 PCI/PCIe 设备的型号、厂商、总线地址、驱动程序等。
- 配置空间访问:支持读取设备的 PCI 配置寄存器(如标准配置空间、扩展配置空间)。
- 调试支持:提供详细输出模式(如
--vvxxx
)和内核驱动关联信息(如-k
)。 - 脚本兼容性:通过机器可读格式(
-m
、-mm
)支持自动化解析。
适用场景:
- 系统管理员排查硬件兼容性问题。
- 开发人员调试 PCI 设备驱动。
- 自动化监控工具获取硬件状态。
命令语法
lspci [选项]
核心功能
1. 设备信息层级
- 总线拓扑:通过
-t
显示树状结构,展示桥接器(Bridge)与设备的连接关系。 - 设备分类:按 PCI 类别(如网卡、显卡、存储控制器)组织信息。
2. 详细输出模式
- 基础详细(
-v
):显示设备能力(如 IRQ、DMA、内存地址)、电源管理支持。 - 深度详细(
-vvv
):包含未定义寄存器、扩展能力(如 PCIe 链路状态、错误计数)。 - 配置空间(
-x
、-xxx
、-xxxx
):十六进制转储配置寄存器,用于低层调试。
3. 内核关联信息
- 驱动绑定(
-k
):显示当前设备使用的内核模块(如e1000e
网卡驱动)。 - 模块建议:列出可支持该设备的驱动模块(如
snd_hda_intel
声卡模块)。
4. 硬件访问控制
- 直接访问(
-H1
、-H2
):通过 Intel 配置机制读取硬件寄存器。 - 离线分析(
-F
):从文件加载之前保存的配置空间数据进行分析。
参数详解
基础显示模式
选项 | 功能 |
---|---|
-m | 简洁机器可读格式(单行参数形式,适合 Shell 脚本解析)。 |
-mm | 扩展机器可读格式(每行 tag:value 对,支持空白分隔)。 |
-t | 树状拓扑图(显示总线桥接关系,如 -[0000:00]-+-01.0 )。 |
输出详细级别
选项 | 功能 |
---|---|
-v | 显示详细设备能力(如内存地址、IRQ、电源管理)。 |
-vv | 更详细信息(含未定义字段、扩展能力)。 |
-vvv | 极端详细模式(包含冗余或未知寄存器)。 |
-x | 显示标准配置空间前 64 字节(或 CardBus 的 128 字节)。 |
-xxx | 显示完整 256 字节配置空间(需 root 权限)。 |
-xxxx | 显示扩展 4096 字节配置空间(PCIe 2.0+)。 |
设备筛选
选项 | 功能 |
---|---|
-s [[[[<域>]:]<总线>]:][<设备>][.[<功能>]] | 按地址筛选设备(如 00:02.0 )。 |
-d [<厂商>]:[<设备>][:<类别>] | 按 ID 筛选(如 8086:15a7 匹配 Intel 网卡)。 |
其他功能
选项 | 功能 |
---|---|
-k | 显示内核驱动和关联模块(如 Driver: e1000e )。 |
-b | 总线视角(显示设备视角的 IRQ/地址,而非内核视角)。 |
-D | 显示 PCI 域编号(默认隐藏域 0)。 |
-F <文件> | 从文件加载配置空间(用于离线分析)。 |
-M | 深度扫描模式(探测异常桥接后的设备)。 |
输出字段说明
默认输出(lspci
)
字段 | 含义 |
---|---|
00:00.0 | 总线地址(域:总线:设备.功能,如 0000:00:00.0 )。 |
Host bridge | 设备类别(如 Network controller 、VGA compatible controller )。 |
Intel Corporation | 厂商名称。 |
Xeon E3-1200 v6/7th Gen Core Processor | 设备型号。 |
详细输出(-v
)
字段 | 含义 |
---|---|
Subsystem | 子系统厂商和型号(如 Dell Inc. Device 072d )。 |
Physical Slot | 物理插槽编号(如 1:00.0 )。 |
Flags | 设备能力标志(如 bus master , fast devsel )。 |
Memory at ... | 内存地址范围(如 0xdfa00000 (32-bit, non-prefetchable) )。 |
Capabilities | 扩展能力(如 Power Management , MSI )。 |
内核关联输出(-k
)
字段 | 含义 |
---|---|
Kernel driver in use | 当前使用的驱动(如 i915 显卡驱动)。 |
Kernel modules | 可用驱动模块(如 nvidia_drm, nouveau )。 |
使用示例
-
基本用法
lspci
输出所有 PCI 设备的简要列表。
-
显示详细信息
lspci -v
显示每个设备的详细信息(如 IRQ、内存地址)。
-
树形结构显示
lspci -t
以树状图展示设备层次结构(总线、桥、设备)。
-
指定设备信息
lspci -s 00:02.0 -vvx
显示总线
00
、插槽02
、功能0
的详细配置空间信息。 -
过滤指定厂商/设备
lspci -d 10ec:8139
仅显示 Realtek 8139 网卡(厂商 ID
10ec
,设备 ID8139
)。 -
机器可读模式
lspci -m
输出结构化数据,便于脚本解析(如 JSON 或键值对)。
-
调试 PCI 配置空间
sudo lspci -xxx
以十六进制显示所有配置空间映像(需
root
权限)。 -
仅显示0号总线上的设备,以数字形式展示ID
lspci -s 0: -n
-
显示Intel(厂商ID 8086)网卡(设备ID 15f3)的详细配置空间
lspci -vvx -d 8086:15f3
-
从文件
pci_dump.txt
(lspci -x
的输出)读取并显示信息
lspci -F pci_dump.txt
注意事项
-
权限要求
- 读取完整配置空间(
-xxx
、-xxxx
)需 root 权限,部分设备可能因硬件设计导致访问失败。
- 读取完整配置空间(
-
输出稳定性
- 默认输出格式可能随版本变化,脚本中建议使用
-m
或-mm
模式确保兼容性。
- 默认输出格式可能随版本变化,脚本中建议使用
-
硬件访问方法
- 指定访问方式(如
-H1
)可解决某些设备读取异常问题(如旧版芯片组)。
- 指定访问方式(如
-
调试建议
- 提交驱动问题时,使用
lspci -vvxxx
提供完整信息(需 root)。
- 提交驱动问题时,使用
-
ID 数据库更新
- 使用
-q
通过 DNS 查询最新 PCI ID 数据库(避免本地缓存过时)。
- 使用
典型应用场景
-
硬件兼容性验证
- 检查设备是否被正确识别(如新网卡是否匹配预期驱动)。
-
驱动调试
- 通过
-k
确认驱动绑定状态(如Kernel driver in use
字段)。
- 通过
-
性能优化
- 分析 PCIe 链路速度(如
Capabilities
中的LnkCap
和LnkSta
)。
- 分析 PCIe 链路速度(如
-
自动化监控
- 使用
-mm
格式解析设备状态(如检测 GPU 是否在线)。
- 使用
-
安全审计
- 检查未知 PCI 设备(如异常 USB 控制器可能表示硬件攻击)。
退出状态码
状态码 | 含义 |
---|---|
0 | 成功 |
1 | 参数错误(如无效地址格式) |
2 | 权限不足(如尝试读取受保护配置空间) |
3 | 硬件访问失败(如设备不响应 PCI 请求) |
相关文件
/usr/share/hwdata/pci.ids
:PCI ID数据库(厂商、设备、类别名称映射),可通过update-pciids
更新。~/.pciids-cache
:-q
选项查询中央数据库的缓存文件。/lib/modules/<内核版本>/modules.pcimap
:内核模块与PCI ID的映射文件(-k
选项依赖)。