Fork me on GitHub
侧边栏

setpci命令使用

setpci 是一个用于查询和配置 PCI 设备配置空间的命令行工具。让我详细解释它的用法:

基本语法

setpci [选项] 操作... 常用选项: -v 显示详细信息 -f 强制执行,不进行安全检查 -d [厂商ID]:[设备ID] 指定设备 -s [[bus]:][slot][.[func]] 指定总线、插槽和功能号

使用--dumpregs能够查看常用的寄存器名称以及偏移和寄存器宽度,可以使用寄存器名称来代替寄存器地址

常见用法示例

  1. 列出所有 PCI 设备

lspci

  1. 读取特定设备的配置寄存器

# 读取 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
  1. 修改配置寄存器值

写入命令寄存器 setpci -s 00:02.0 04.w=0147 # 设置延迟定时器(偏移量 0d) setpci -s 00:02.0 0d.b=20

  1. 使用厂商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

安全注意事项

  1. 使用前备份

# 保存当前配置 setpci -s 00:02.0 04.w > backup.txt

  1. 谨慎修改
  • 错误的修改可能导致系统不稳定
  • 建议先读取再修改
  • 重要操作前做好备份
  1. 权限要求

# 需要 root 权限 sudo setpci [选项] [操作]

调试技巧

  1. 使用详细模式

setpci -v -s 00:02.0 04.w

  1. 批量操作

# 读取多个寄存器 setpci -s 00:02.0 04.w 06.w 08.b

  1. 查看设备能力

# 读取能力指针(偏移量 34) setpci -s 00:02.0 34.b

posted @ 2025-03-20 16:53  yooooooo  阅读(629)  评论(0)    收藏  举报