下面快速记录一下使用 setpci命令配置 PCI设备的步骤。
首先,简单看一下 setpci的使用方法:

$ setpci --help
Usage: setpci [<options>] (<device>+ <reg>[=<values>]*)*General options:
-f      Don't complain if there's nothing to do
-v      Be verbose
-D      List changes, don't commit them
-r      Use raw access without bus scan if possible
--dumpregs  Dump all known register names and exitPCI access options:
-A <method>   Use the specified PCI access method (see '-A help' for a list)
-O <par>=<val> Set PCI access parameter (see '-O help' for a list)
-G      Enable PCI access debugging
-H <mode> Use direct hardware access (<mode> = 1 or 2)Setting commands:
<device>: -s [[[<domain>]:][<bus>]:][<slot>][.[<func>]]-d [<vendor>]:[<device>]
<reg>:        <base>[+<offset>][.(B|W|L)][@<number>]
<base>:       <address><named-register>[E]CAP_<capability-name>[E]CAP<capability-number>
<values>: <value>[,<value>...]
<value>:  <hex><hex>:<mask>

稍微有点复杂,但其实用法很简单。

需要明确的一点是,PCI设备的配置空间共由 64个字节组成,其地址范围为 0x00 ~ 0x3F,这 64个字节是所有 PCI设备必须支持的。
此外,PCIe设备还扩展了 0x40 ~ 0xFF这段配置空间,在这段空间主要存放一些与 MSI或者 MSI-X中断机制和电源管理相关的 Capability结构。其中所有能够提交中断请求的 PCIe设备,必须支持 MSI或者 MSI-X Capability

例如,可以使用 lspci查看 82599网卡的 0x00 ~ 0xFF配置空间中的内容:

$ lspci -s 0b:00.0 -xxx
0b:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
00: 86 80 fb 10 43 01 10 00 01 00 00 02 10 00 80 00
10: 0c 00 d8 ff 9f 03 00 00 21 20 00 00 00 00 00 00
20: 0c 40 e0 ff 9f 03 00 00 00 00 00 00 86 80 03 00
30: 00 00 00 00 40 00 00 00 00 00 00 00 0b 01 00 00
40: 01 50 23 48 00 20 00 2b 00 00 00 00 00 00 00 00
50: 05 70 80 01 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 11 a0 3f 00 04 00 00 00 04 20 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 10 00 02 00 c2 8c 00 10 36 58 09 00 82 c4 01 02
b0: 40 00 82 10 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 1f 00 00 00 00 00 00 00 00 00 00 00
d0: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

我们在使用 setpci修改 PCI设备的配置空间内容时,
1)需要指定设备信息,也就是设备号,与 lspci类似,使用 -s xx:xx.x
2)还需要指定待修改的寄存器的地址,范围是 0x00 ~ 0xFF,并且通过 ‘w’, ‘b’后缀指定数据宽度,其中,'w'表示 2字节,'b'表示 1字节
3)还需要为寄存器指定修改后的值,例如:A0.b=0x01

例如:
查看 0a:00.0设备配置空间 A0地址处 2字节的内容

$ setpci -s 0a:00.0 A0.w

修改 0a:00.0设备配置空间 A0地址处 1字节的内容

$ setpci -s 0a:00.0 A0.b=0x01

例如,我们要打开 XL710网卡的 PCIe IDO功能,
1)首先通过 XL710手册找到 IDO功能所在的配置寄存器,为 Device Control 2寄存器,它的地址是 0XC8
2)通过 setpci查看 device control2的原值

$ setpci -s 0a:00.0 c8.w
0000

3)在原值的基础上使能 IDO功能,并写入新值

$ setpci -s 0a:00.0 c8.w=0x0300

4)确认已经写入成功

$ setpci -s 0a:00.0 c8.w
0300

使用 setpci 配置 PCI 设备相关推荐

  1. linux pcie命令,setpci命令_Linux setpci 命令用法详解:查询和配置PCI设备的使用工具...

    setpci命令是一个查询和配置PCI设备的使用工具. 语法setpci(选项)(参数) 选项-v:显示指令执行的细节信息: -f:当没有任何操作需要完成时,不显示任何信息: -D:测试模式,并不真正 ...

  2. PCI设备的配置空间

    1.基本介绍 其实PCI设备的配置空间就是配置PCI设备的那些寄存器集合.PCI通常将PCI配置信息存放在E2PROM中,PCI设备上电初始化时,将E2PROM中的信息读到PCI设备的配置空间中作为初 ...

  3. Linux内核之PCI设备

    PCI设备 外围设备互连(PCI)是一种将系统中外部设备以结构化与可控制方式连接到起来的总线标准,包括系统部件连接的电气特性及行为.本章将详细讨论Linux核心对系统中的PCI总线与设备的初始化过程. ...

  4. 浅谈Linux PCI设备驱动(一)

    要弄清楚Linux PCI设备驱动,首先要明白,所谓的Linux PCI设备驱动实际包括Linux PCI设备驱动和设备本身驱动两部分.不知道读者理不理解这句话,本人觉得这句话很重要,对于PCI.US ...

  5. QEMU如何虚拟PCI设备

    引子 PCI(PCIE)设备在PC架构中有着举足轻重的地位,了解PCI总线与PCI设备在QEMU中的工作机制有助于我们了解CPU和设备之间的沟通机制,会对PC系统有更全面的认知,同时对virtio设备 ...

  6. PCI设备驱动(一)

    首先要明确两个概念:Linux内核 PCI设备驱动和设备本身驱动两部分.工作中所谓的编写设备驱动,其实就是编写设备本身驱动.因为Linux 内核的PCI驱动是内核自带的. 当然,并不是说内核帮咱们写好 ...

  7. PCIe配置空间和PCI设备中的寄存器

    1.访问PCI配置空间,PCI基本配置空间的读写使用下列函数: 原型定义在<linux/pci.h> int pci_read_config_byte(struct pci_dev *pd ...

  8. PCI设备与PCI桥的配置空间

    PCI配置空间 HOST主桥通过配置读写事务报文访问设备的配置空间,PCI总线规定了三种类型的PCI配置空间.配置空间中出现的地址都是PCI总线域的地址. (1)Agent设备配置空间 (2)Brid ...

  9. ESXI 网卡等PCI设备硬件直通配置

    一.什么是直通(Passthrough) VT-d .DirectPath I/O,通过 DirectPath I/O,虚拟机可以使用 I/O 内存管理单元访问平台上的物理 PCI 功能,就是俗称的虚 ...

最新文章

  1. NetMarketShare:本月桌面浏览器市场份额几乎没有变化
  2. 简单插入排序,折半插入排序和2路插入排序 c源码
  3. Scala Case类和对象
  4. XML与web开发-01- 在页面显示和 XML DOM 解析
  5. mysql添加字符串日期时间_mysql学习笔记--- 字符串函数、日期时间函数
  6. 解决:Access denied for user ‘root’@‘localhost’(using password: YES)
  7. java se入门_java SE 入门之运算符(第三篇)
  8. STL -- string类字符串
  9. C#窗体-个人简历生成(自己设计并编写一个 Windows 应用程序,要求用到TextBox、GroupBox、RadioButton )
  10. 帮你找影视剧同款的“影觅”宣布完成百万美元级Pre-A轮融资_36氪
  11. 台式计算机提示内存不足怎么办,一招解决电脑提示内存不足-电脑内存不足怎么办...
  12. android 手机分辨率占比,Android屏幕密度(Density)和分辨率概念详解
  13. MSOCache文件,带你一文看懂。
  14. Cisco思科IPS签名策略配置引擎告警和日志动作
  15. 1ms超快响应+144Hz极限刷新 这就是电竞游戏显示器该有的样子
  16. ajax请求失败readyState为0
  17. Nachos环境搭建
  18. 【MCAL_CANDriver】-2.1-硬件过滤(Hardware Filter)详述及配置
  19. 计算机灾难性恢复,计算机灾难恢复有哪些不同的选择(Different Options for Computer Disaster Recovery)?...
  20. calender 源码 CSS+JS

热门文章

  1. CPU Designer
  2. 将Android手机屏幕快速投影至WIN7的PC和投影仪
  3. 图像标注平台搭建之cvat
  4. python将源代码转换成在html可显示的格式,Python实现将HTML转换成doc格式文件的方法示例...
  5. 在msconfig里修改了处理器数和最大内存后电脑无法启动一直蓝屏
  6. server responded algorithm negotiation failed
  7. 计算机共享输入命令是什么意思,在命令提示符下输入net view是什么意思?有什么作用?...
  8. 小米相册图片加载慢解决方式
  9. 【openWrt】随身wifi装openWrt的linux内存不够用?开启swap分区吧
  10. vivoNEX来了,高科技能否驱散手机冬天的寒冷?