一、vid和pid
pid/vid唯一标识一个设备,hardwareid是为了给系统识别的 ,他是根据pid/vid而生成的。这个与序列号没什么关系,序列号一般都是厂家固化到芯片中的信息而已。guid只是为了标志你安装的设备是属于一个什么类当中,这个类可以显示再设备管理器中。比如:你可以定义一个类,当然这个类有与系统中任何类都不同的guid,然后选择一个图标和类名,就可以同网卡等其他设备一起显示在设备管理器下的根目录中了
根据usb规范的规定,所有的usb设备都有供应商id(vid)和产品识别码(pid),主机通过不同的vid和pid来区别不同的设备,vid和pid都是两个字节长,其中,供应商id(vid)由供应商向usb执行论坛申请,每个供应商的vid是唯一的,pid由供应商自行决定,理论上来说,不同的产品、相同产品的不同型号、相同型号的不同设计的产品最好采用不同的pid,以便区别相同厂家的不同设备。
vid和pid通常情况下有两种存储方式,第一种是主控生产商的vid和pid,存储在主控的bootcode中;第二种是设备生产商的vid和pid,该vid和pid存储在主控外部的非易失性存储设备中(eeprom或flash)的设备固件中,当usb设备连接主机时,如果固件中有设备生产商的vid和pid,会将该vid和pid报告给主机,而忽略主控生产商的vid和pid。所以理论上一个usb存储设备的vid应该是设备生产商的vid,而不是主控生产商的vid,这两个vid应该是不同的(主控生产商自己生产的设备除外)。
由于vid和pid重复并不会对产品的使用带来严重影响,很多usb设备生产商(山寨厂居多)为了方便,并不会向usb执行论坛申请自己的vid,而是依然沿用主控生产商的vid或随便向产品写入vid和pid;同时,正规厂家只需要申请vid,pid由厂家自行确定,所以存在相同型号的产品,可能采用了不同的主控(商业需要,很正常),而他们的pid是一样的,基于上述原因通过vid和pid就不能准确识别usb设备的主控型号,这个问题大家在使用usb设备的过程中需要注意。
如:
- {usb_device (0x0733, 0x0430)}, /* intel pc camera pro */