2016-03-12 39 views
0

我想更改PCI設備的Vendor_ID和Device_ID。 但是,我所做的每一項改變都無法挽救,我不知道爲什麼。爲什麼我不能在Linux上更改PCI配置寄存器?

首先我嘗試使用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/,但保存後,文件似乎沒有變化。 我確實以root身份打開它,保存時不會出現任何錯誤。

我也試過的ethtool,但它甚至不能訪問寄存器:

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

我試過上述的一切都在兩個Lubuntu 15.10和Knoppix的7.6,導致完全相同的行爲。

那麼,爲什麼會發生這種情況呢? 如果寄存器受保護,是否有解除它們的方法?

一些更多的信息:

  • 所提到的PCI設備是英特爾7260-AC無線網絡適配器
  • 我想BIOS中識別爲高通Atheros AR9485無線網絡適配器,因爲它是白名單塊一切。
  • 修改BIOS不是一個選項。
  • 我從USB驅動器

回答

1

PCI配置寄存器運行Lubuntu和Knoppix的通常屬性,如只讀(RO),讀寫(RW),或其他一些不常用的。

問題是您正試圖將值寫入只讀寄存器。我沒有看到這個特定設備的文檔,但我曾與其他英特爾PCI設備合作過,我從未見過RW(讀/寫)設備ID或供應商ID註冊。例如,請看第96頁上的link,VID和DID寄存器是RO(只讀)。

不幸的是,沒有辦法改變寄存器的只讀屬性,因爲這幾乎可以肯定是在硬件級實施的。

假設您可以更改設備ID或供應商ID寄存器,我想這不一定意味着工作網絡適配器,因爲BIOS和操作系統將這些值用於ACPI和設備驅動程序。可能有辦法在BIOS中僞造設備ID和供應商ID,但正如你所說,這不是一種選擇,我認爲它不會起作用。

根據您的BIOS白名單的方式/原因,高通無線適配器與英特爾無線適配器可能會爲此問題提供一些解決方法。我說最好的解決方案是以某種方式更改BIOS白名單,或許是通過更新。我有code可以修改任何設備的PCI配置寄存器(雖然這不會繞過RO,RW等硬件級限制)。我認爲這不會解決您的問題,但至少您可以從中瞭解更多關於PCI配置寄存器的信息。

相關問題