FreeBSD下,可以用pciconf命令来显示设备的详细信息,比如网卡的信息显示如下:
# pciconf -lv
……
em0@pci0:3:0:0: class=0x020000 card=0x83691043 chip=0x10d38086 rev=0x00 hdr=0x00
vendor = 'Intel Corporation'
device = '82574L Gigabit Network Connection'
class = network
subclass = ethernet
……
但在一个系统,突然不显示vendor和device的名称,仅class和subclass:
# pciconf -lv
……
em0@pci0:3:0:0: class=0x020000 card=0x83691043 chip=0x10d38086 rev=0x00 hdr=0x00
class = network
subclass = ethernet
……
这是怎么回事呢?
原来pciconf从硬件读到的信息,也只有上面那几行,然后再根据硬件库的信息,解读其中厂商、型号、类别等信息,然后再显示。
class列,主要是类别信息,前两位是类别,01代表存储,02代表网卡,03代表网卡;后面两位是子类;最后两位是硬件描述。
card列:前四位是序列号,后四位是厂商,1043对应于华硕,8086对应于Intel,fffe是vmware的。
chip列:芯片,前四位是型号,后四位是厂商,10d3对应于82574L,8086就是Intel
这个对应的厂商及型号代码资料在哪儿呢?
在FreeBSD中,位于/usr/share/misc/pci_vendors文件中,你可以用vi打开看一下,这个是用tab分隔的资料库,里面有非常详细的资料,甚至比官方的数据还要详细,官方的数据:http://www.pcidatabase.com/reports.php?type=tab-delimeted,你可以下载下来,让pciconf去读取这个数据库,方法是把它存入到PCICONF_VENDOR_DATABASE中:
setenv PCICONF_VENDOR_DATABASE /home/pci_vendor
再回到开头的主题,/usr/share/misc/pci_vendors应该不小心被删除了,所以导致pciconf读到不到厂商的信息,所以也就不会再去解读网卡型号了,解决方法也比较简单,复制一个就好了。