2009-08-18 74 views
2

幾個月前,我不得不編寫一個小工具來編程rtl8139卡的eeprom。它基本上是剝離下來以讀取/寫入eeprom的rtl8139-diag工具。從pci-/pcie卡讀取芯片ID

這個工具必須擴展到現在能夠編程rtl8101卡的eeprom。這不是一個問題,因爲eeprom的接口類似於rtl8139的接口。實際上,唯一的區別是eeprom文件的內容。

我想實現的是一個自動檢測,如果給定端口地址處的卡是rtl8139或rtl8101並選擇擬合的eeprom-dump,則會進行自動檢測。我無法通過讀出eeprom來確定這些芯片的差異,因爲要編程的卡片是'處女',而eeprom內容基本上是0xffff

我注意到,無論eeprom的內容如何,​​Linux總是加載適合這些卡的驅動程序。所以我認爲,我只需要讀取卡的芯片ID。

我該怎麼做?

回答

3

我想你可能會發現lspcilspci -vv會幫你。 (您可能需要成爲root用戶)。

也就是說,如果PCI卡設置在卡中,而不是從eeprom確定,則應該能夠使用lspci獲取卡的PCI ID並確定哪個卡你在一起工作。

-n選項會爲您提供原始數據,如果您正在編寫腳本,這可能會更有幫助。

或者,您可以從/ sys/devices/pci */*/device和vendor中讀取以查找這些值。

+0

這將是一個解決方案,如果我可以改變調用程序的環境(調用lspci,regexp來獲取chipid,使用開關調用程序),但不幸的是我必須在工具內實現自動檢測。 – flokra 2009-08-18 21:31:06

+1

然後從程序中讀取'/ sys'文件。如果這不起作用,則需要更多地解釋約束條件。 – retracile 2009-08-18 21:34:53

+0

謝謝,那會做。我可能必須掃描所有設備的ID和IO-Port,但沒關係。 – flokra 2009-08-18 21:47:36