如何从 CLI 读取 Linux 中的特定 PCI 设备寄存器?

如何从 CLI 读取 Linux 中的特定 PCI 设备寄存器?

为了控制背光,我需要执行以下操作:

sudo setpci -s 00:02.1 F4.B=x

这可以理解为:

对于 ID 为 00:02.1 的 PCI 设备,将寄存器 F4(仅字节)设置为 x。

为了找出我想要的 x 值,我想读取其当前值(在我正在编写的脚本中)。我该怎么做?

早期作品

这似乎是 的领域lspci。我试过了

sudo lspci -x -s 00:02.1

但这没有提供足够的范围(没有达到寄存器/地址 F4)。-xxx但是我可以使用命令行来完成。这给了我一个转储,我可以在 F4 处看到字节,我验证了我可以使用命令对其进行操作setpci。但是,手册上说:

  -xxx   Show hexadecimal dump of the whole PCI configuration space. It is  available  only  to  root  as  several  PCI
         devices  crash when you try to read some parts of the config space (this behavior probably doesn't violate the
         PCI standard, but it's at least very stupid). However, such devices are rare, so you needn't worry much.

所以我宁愿不把它放在以 root 身份自动运行的程序中。有什么方法可以只读取寄存器 F4 的值吗?程序getpci?标志?我错过的setpci某个特殊标志?lspci

(环境是三星 N140 上网本上的 Ubuntu Netbook Remix 9.04 (karmic) (32 位))

答案1

您需要该程序setpci。看起来这种格式可以满足您的要求:

setpci -s 00:02.1 F4.B

man setpci:与您的版本唯一的不同在于您尝试设置寄存器,因此您为其命名并分配一个值(“ F4.B=x”)。在这里,只需为其命名;不要分配值。

来自手册页:

运营

要查询配置寄存器的值,只需命名它(通过输入其名称或输入寄存器地址,并带有可选的.B、.W 或.L 后缀,指定寄存器宽度为字节、字或长字)。

要设置寄存器,请写入 reg=values,其中 reg 与您用于查询寄存器的相同,values 是要从给定地址开始写入的值的逗号分隔列表。要写入的每个值都可以指定为十六进制数或位:掩码对,这会导致掩码中与二进制位相对应的位更改为位中相应位的值

答案2

请注意,如果您的显示器使用新的 intel_backlight 接口,则这将不起作用(到目前为止,只有 gnome 电源管理器可以管理它)。

请阅读这个:https://askubuntu.com/questions/57236/unable-to-change-brightness-in-a-lenovo-laptop/81389#81389以及列出的链接特别是我的帖子(以 Álvaro 的名义)

相关内容