setpci命令使用
setpci 是一个用于查询和配置 PCI 设备配置空间的命令行工具。让我详细解释它的用法:
基本语法
setpci [选项] 操作... 常用选项: -v 显示详细信息 -f 强制执行,不进行安全检查 -d [厂商ID]:[设备ID] 指定设备 -s [[bus]:][slot][.[func]] 指定总线、插槽和功能号
使用--dumpregs能够查看常用的寄存器名称以及偏移和寄存器宽度,可以使用寄存器名称来代替寄存器地址
常见用法示例
- 列出所有 PCI 设备
lspci
- 读取特定设备的配置寄存器
# 读取 00:1.0 设备的命令寄存器(偏移量 04)
# 读取 00:1.0 设备的命令寄存器(偏移量 04)
setpci -s 00:01.0 04.w
或者
setpci -s 00:01.0 COMMAND+0.w
或者
setpci -s 00:01.0 COMMAND.W
# 读取设备状态(偏移量 06)
setpci -s 00:01.0 06.w
或者
setpci -s 00:01.0 STATUS+0.w
或者
setpci -s 00:01.0 STATUS.w
- 修改配置寄存器值
写入命令寄存器 setpci -s 00:02.0 04.w=0147 # 设置延迟定时器(偏移量 0d) setpci -s 00:02.0 0d.b=20
- 使用厂商ID和设备ID指定设备
指定特定厂商和设备ID的设备 setpci -d 8086:1234 04.w
常用寄存器偏移量
常用寄存器偏移可以在--dumpregs中查看到
数据宽度说明
.b 字节(8位) .w 字(16位) .l 双字(32位)
实际应用示例
查看设备的命令寄存器
# 首先找到设备 lspci # 假设设备在 00:02.0 setpci -s 00:02.0 04.w
启用设备的总线主控能力
# 读取当前命令寄存器值 setpci -s 00:02.0 04.w # 设置总线主控位(位4) setpci -s 00:02.0 04.w=0104
读取所有 BAR 寄存器
# 读取 BAR0 setpci -s 00:02.0 10.l # 读取 BAR1 setpci -s 00:02.0 14.l
安全注意事项
- 使用前备份
# 保存当前配置 setpci -s 00:02.0 04.w > backup.txt
- 谨慎修改
- 错误的修改可能导致系统不稳定
- 建议先读取再修改
- 重要操作前做好备份
- 权限要求
# 需要 root 权限 sudo setpci [选项] [操作]
调试技巧
- 使用详细模式
setpci -v -s 00:02.0 04.w
- 批量操作
# 读取多个寄存器 setpci -s 00:02.0 04.w 06.w 08.b
- 查看设备能力
# 读取能力指针(偏移量 34) setpci -s 00:02.0 34.b


浙公网安备 33010602011771号