【问题标题】:Why can I not change the PCI configuration registers on linux?为什么我不能更改 Linux 上的 PCI 配置寄存器?
【发布时间】:2016-06-27 19:03:36
【问题描述】:

我想更改 PCI 设备的 Vendor_ID 和 Device_ID。 但是,我所做的每一个更改都不会保存,我也不知道为什么。

首先我尝试使用 setpci 进行更改,结果如下:

# sudo setpci -s 01:00.0 00.w
# 8086
# sudo setpci -s 01:00.0 00.w=168C
# sudo setpci -s 01:00.0 00.w
# 8086

然后我尝试使用两个不同的十六进制编辑器进行相同的更改,编辑位于 /sys/bus/pci/devices/0000:01:00.0/中的 config 文件>,但保存后,文件似乎没有变化。 我确实以root身份打开它,保存时没有任何错误。

我也试过 ethtool,但它甚至无法访问寄存器:

# sudo ethtool -e wlan0
# Cannot get EEPROM data: Operation not supported

我在 Lubuntu 15.10 和 Knoppix 7.6 上都尝试了上述所有方法,结果完全相同。

那么,为什么会发生这种情况? 如果寄存器受到保护,有没有办法解除保护?

更多信息:

  • 提到的 pci 设备是 Intel 7260-AC 无线网络适配器
  • 我希望 BIOS 将其识别为 Qualcomm Atheros AR9485 无线网络适配器,因为它的白名单会阻止其他一切。
  • 不能修改 BIOS。
  • 我正在通过 USB 驱动器运行 Lubuntu 和 Knoppix

【问题讨论】:

    标签: linux ubuntu configuration pci


    【解决方案1】:

    PCI 配置寄存器通常具有只读 (RO)、读写 (RW) 或其他不太常见的属性。

    问题是您试图将值写入只读寄存器。我没有看到这个特定设备的文档,但我使用过其他英特尔 PCI 设备,我从未见过 RW(读/写)设备 ID 或供应商 ID 寄存器。例如,查看第 96 页上的 link,VID 和 DID 寄存器是 RO(只读)。

    不幸的是,没有办法更改寄存器的只读属性,因为这几乎肯定是在硬件级别强制执行的。

    假设您可以更改设备 ID 或供应商 ID 寄存器,我想这不一定意味着网络适配器正常工作,因为 BIOS 和操作系统将这些值用于 ACPI 和设备驱动程序。可能有一种方法可以在 BIOS 中伪造设备 ID 和供应商 ID,但正如您所说,这不是一种选择,我认为它无论如何也行不通。

    根据您的 BIOS 将 Qualcomm 无线适配器与 Intel 无线适配器列入白名单的方式/原因,可能会针对此问题提供一些解决方法。我说最好的解决方案是以某种方式更改 BIOS 白名单,也许是通过更新。

    如果有帮助,我有 code 可以修改任何设备的 PCI 配置寄存器(尽管这不会绕过硬件级别的限制,例如 RO、RW 等)。我认为这不会解决您的问题,但至少您可以从中了解有关 PCI 配置寄存器的更多信息。

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 2018-07-13
      • 2019-11-24
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多