Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从pci-/pcie卡读取芯片id_C_Linux_Detection_Hardware Interface_Pci Bus - Fatal编程技术网

从pci-/pcie卡读取芯片id

从pci-/pcie卡读取芯片id,c,linux,detection,hardware-interface,pci-bus,C,Linux,Detection,Hardware Interface,Pci Bus,几个月前,我不得不写一个小工具来编程rtl8139卡的eeprom。它基本上是一个用来读/写eeprom的工具 必须扩展此工具,以便现在能够对rtl8101卡的eeprom进行编程。这不是问题,因为eeprom的接口与rtl8139的接口类似。实际上,唯一的区别是eeprom文件的内容 我想要实现的是一个自动检测,它检查给定端口地址的卡是否是rtl8139或rtl8101,并选择合适的eeprom转储。我无法通过读取eeprom来确定这些芯片之间的差异,因为要编程的卡是“原始卡”,eeprom的

几个月前,我不得不写一个小工具来编程rtl8139卡的eeprom。它基本上是一个用来读/写eeprom的工具

必须扩展此工具,以便现在能够对rtl8101卡的eeprom进行编程。这不是问题,因为eeprom的接口与rtl8139的接口类似。实际上,唯一的区别是eeprom文件的内容

我想要实现的是一个自动检测,它检查给定端口地址的卡是否是rtl8139或rtl8101,并选择合适的eeprom转储。我无法通过读取eeprom来确定这些芯片之间的差异,因为要编程的卡是“原始卡”,eeprom的内容基本上是
0xffff

我注意到,Linux总是为这些卡加载合适的驱动程序,而不管eeprom的内容如何。所以我想,我只需要读取卡的芯片id


我该怎么做?

我想你可能会发现
lspci
lspci-vv
会对你有所帮助。(您可能需要成为root用户。)

也就是说,如果PCI id是在卡中设置的,而不是通过eeprom确定的,则您应该能够使用
lspci
获取卡的PCI id并确定正在使用的卡

-n
选项将为您提供原始数字,如果您编写此脚本,这可能会更有帮助


或者,您可以从/sys/devices/pci*/*/device和vendor中读取这些值。

如果我可以更改调用程序的环境(调用lspci、regexp获取芯片ID、调用带有开关的程序),这将是一个解决方案,但不幸的是,我必须在工具中实现自动检测。然后从程序中读取
/sys
文件。如果这不起作用,您需要进一步解释约束。谢谢,这样就行了。我可能需要扫描所有设备的id和IO端口,但没关系。