由VMware USB驱动引发的USB接口“故障”解析

   此前一直正常使用的DellU2311h显示器上面的一个USB接口突然无法使用了,表现为插入什么设备都无法识别,但可以听到有设备插入和弹出的系统提示音。经过仔细观察设备管理器,发现不管在那一个USB接口插入什么设备,都会被识别为unknownusb device,硬件ID为USB\vid_0E0F & pid_0001,且提示驱动无法加载。

    故障分析:
      Dell U2311h显示器上自带了一个USBHub,一共有四个USB接口,显示器侧面两个,底部两个,通过显示器自带的一根USB电缆连接到主板背部(显示器上的四个USB接口是通过显示器供电的,不是通过连接到主板背部的USB线缆供电)。这次出故障的USB接口是底部的第一个接口,经过反复测试发现,USB设备只要插入其它三个USB接口或者机箱上的USB接口,都能正常使用,但一旦插入到显示器底部对应的第一个USB,则出现上面的故障。

      既然插入和弹出设备时系统有声音提示,那说明物理连接应该是没有问题的,所以极有可能是软件故障。通过google那个unknownusbdevice的硬件id,发现这个id对应的硬件和vmware有关,于是很容易联想到是VMware的USB功能导致的,把VMUSBArbService这个服务停掉后,拨下对应的设备再次插上,这次终于被正常识别了。

   那么为什么会出现这样的问题呢?

   VMware是一个很有名的虚拟机软件,众所周知,虚拟机是指共享宿主机的硬件,在宿主系统里面再运行一个或多个独立的操作系统。由于涉及到硬件层的操作,所以虚拟机软件必须要在宿主系统中加载很多驱动来实现虚拟系统的基本功能,比如:共享宿主机的网络,USB设备,磁盘等等。在使用官方安装包安装的VMware的情况下,其会自动在宿主机系统服务里面添加如下几个服务且设为自动启动:
   VMAuthdService (用于实现虚拟系统的认证的服务)
   VMnetDHCP   (用于实现虚拟机的DHCP自动分配ip地址的服务)
    VMware NATService   (用于实现虚拟机共享宿主机网络实现NAT的服务)
   VMUSBArbService      (用于实现共享宿主机USB设备的服务)
   VMwareHostd      (这个是vmware 9.0及以后新增的服务)

    问题就出在VMwareUSB这个服务上面。这个服务的主要用于把接入宿主机的USB设备接入到虚拟系统中这个功能,这个功能具体是如何实现我们不必深究,但过程有必要说一下。当把一个USB设备插入宿主机之后,vmware会默认把这个设备直接接入虚拟系统中去(除非在虚拟机USB选项里面禁用了自动接入USB设备这个功能),此时,VMware就会为这个USB设备加载一个名叫VMwareUSBDevice的驱动,推测这个驱动就是用于把USB设备接入虚拟系统中。正常情况下,这个驱动加载不会出问题,驱动加载完成之后,USB设备就会被接入到虚拟系统中去,而在宿主系统中这个USB设备就会变成VMwareUSBDevice这个设备,而不再是原来的设备名了,也就是说此时该USB设备只能在虚拟系统里面使用,宿主机就已经无法再使用这个USB设备了。

   VMware对于USB设备的接入不知道是以什么样的方式来识别的,之所以会造成上面的“故障”,很明显在加载VMwareUSB Device这个驱动的时候出了问题,造成了该驱动无法被正常加载,然后就会出现一个unknown usbdevice,如此一来,这个设备在宿主机和虚拟机都无法使用了,也就造成了对应的USB接口坏掉了的假象。

   当然这只是推测,具体到底是什么情况还不得而知。而且奇怪的是,假设VMware USBDevice这个驱动未被正常加载,那应该只是对于那一个设备无法正常使用,而不应该造成那个USB接口都不能使用。当然这可能也是VMware的一个小bug了吧。

   最后,推荐使用Vmware的朋友们可能把VMUSBArbService和VMwareHostd这两个服务取消开机自动启动(当然前提是用不到把USB设备接入到虚拟系统中这个功能),改成手动启动即可,这样开机时可能会快一点点。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页