实现usb设备快速访问的方法和系统的制作方法
【技术领域】
[0001 ]本发明涉及USB技术领域,特别是涉及实现USB设备快速访问的方法和系统。
【背景技术】
[0002]USB系统由USB主机(简称Host)、USB集线器(简称HUB)和USB设备(简称设备)三部分组成,HUB的上行Port面向Host、下行Port面向设备或者其它HUB。在下行Port上,HUB提供了设备连接检测和设备拔出检测功能,并给各下行Port供电。USB系统采用主从结构,所有的数据通讯都由主端(Host)发起,而从端(USB设备)一直扮演受控的角色,按照主端的要求接收或发送数据。
[0003]USB设备连接到Host时,Host必须通过默认的控制管道对其进行枚举,完成获得其设备描述、进行地址分配、获得其配置描述、加载对应的驱动程序、进行设备配置等操作之后,应用程序方可正常访问所述USB设备。现有技术中,当USB设备连接到Host之后,按照以下流程进行枚举:
[0004]1、连接了USB设备的HUB在Host查询其状态改变端点时,所述HUB返回对应的消息告知Host某个Port(端点)状态发生了改变;当主机知道了该事件之后,给所述集线器发送一个Get_Status请求,HUB返回消息告诉主机设备的连接详细信息。
[0005]2、Host等待(至少100mS)所述USB设备上电稳定,然后向所述HUB发送请求,建立起一条连接Host和所述USB设备的通信通道,复位并使能所述Port; HUB执行Port复位操作,复位完成后所述Port就使能了 ;所述USB设备进入到默认状态状态,至此,USB设备已经准备好通过Endpoint 0的默认流程响应控制传输,S卩USB设备现在使用缺省地址0x0与主机通信。
[0006]3、Host通过缺省地址0x0向所述USB设备发送Get_Device_Descriptor命令,以取得缺省控制管道所支持的最大数据包长度。主机一次只能枚举一个USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。
[0007]4、主机通过发送一个Set_Address请求来分配一个唯一的地址给USB设备。USB设备返回一个确认并保存新的地址。此后,所述USB设备将一直使用该地址,直到被拔出HUB。
[0008]5、主机通过新地址重新发送Get_Device_Descriptor命令读取设备描述符的全部字段,以了解该设备的总体信息,如厂商标识符(VID)、产品标识符(PID)。
[0009]6、主机根据读取到的USB设备的设备描述符,选择并安装所述USB设备对应的驱动程序;不同的USB设备类有不同的驱动程序,比如对于键盘鼠标有USB HID驱动,USB存储设备有USB Storage驱动。
[0010]7、在获得驱动程序支持的条件下,Host通过分配的新地址向所述USB设备发送661:_06¥;[06_(]011;1^811瓜1:;[011命令读取设备配置信息,等待1]313设备回答,直到读取所述1]513设备的全部配置信息;根据所述USB设备的配置信息,主机通过新地址发送Set_Conf igurat1n命令请求,对所述USB设备进行配置。如果配置成功,USB设备进入“配置”状态,至此,所述USB设备可以和应用程序进行数据传输。
[0011]在Host枚举USB设备的过程中,为接入的USB设备分配新地址之前,所述USB设备只会对0地址做出响应,为了给所述USB设备指派可用的新地址,必须在Host和USB设备之间建立起一条专用的通信连接。在建立通信连接之后,完成设备配置之前,Host与USB设备之间还需要进行20余次交互,在此期间Host将无法通过总线与所述USB设备之外的其他USB设备通信。
[0012]可见,如果Host在同一时刻连接了很多USB设备,并对这些设备执行批量操作,此时所述Host枚举USB设备将消耗较长时间,应用软件必须等待较长时间,直到连接所述Host的全部USB设备都配置好之后,才能够访问这些USB设备。
【发明内容】
[0013]基于此,本发明提供一种实现USB设备快速访问的方法和系统,能够缩短因USB设备枚举导致的访问等待时间。
[0014]本发明一方面提供一种实现USB设备快速访问的方法,包括:
[0015]检测到虚拟USB设备接入主机系统,发起对所述虚拟USB设备的枚举,安装与所述虚拟USB设备相应的驱动程序;
[0016]检测到物理USB设备接入所述主机系统,建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系;
[0017]主机应用程序通过所述驱动程序、所述映射关系对所述物理USB设备进行访问。
[0018]本发明另一方面提供一种实现USB设备快速访问的系统,包括:
[0019]虚拟设备枚举单元,用于检测到虚拟USB设备接入主机系统,发起对所述虚拟USB设备的枚举,安装与所述虚拟USB设备相应的驱动程序;
[0020]映射管理单元,用于检测到物理USB设备接入所述主机系统,建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系;
[0021]访问控制单元,用于主机应用程序通过所述驱动程序、所述映射关系对所述物理USB设备进行访问。
[0022]上述技术方案的实现USB设备快速访问,通过创建多个虚拟USB设备,发起对所述虚拟USB设备的枚举,安装与所述虚拟USB设备相应的驱动程序;并将它们映射到接入系统的物理USB设备,有效缩短了Host在同一时刻插入大量物理USB设备时,系统枚举设备及加载驱动程序过程所消耗的时间,使得应用程序可以快速访问接入系统的物理USB设备。
【附图说明】
[0023]图1为实施例一的实现USB设备快速访问的方法的示意性流程图;
[0024]图2为实现USB设备快速访问的USB系统框架一的示意图;
[0025]图3为实现USB设备快速访问的USB系统框架二的示意图;
[0026]图4为实施例二的实现USB设备快速访问的系统的示意性结构图。
【具体实施方式】
[0027]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0028]本发明提供的实施例包括实现USB设备快速访问的方法实施例,还包括相应的实现USB设备快速访问的系统实施例。以下分别进行详细说明。
[0029]图1为实施例一的实现USB设备快速访问的方法的示意性流程图;如图1所示,本实施例的实现USB设备快速访问的方法包括如下过程S1至S3,各过程详述如下:
[0030]S1,检测到虚拟USB设备接入主机系统,发起对所述虚拟USB设备的枚举,安装与所述虚拟USB设备相应的驱动程序;
[0031]本步骤之前,预先生成若干虚拟USB设备,设置各虚拟USB设备的设备描述、配置描述、接口描述和端点描述等设备参数,然后向主机系统发送设备接入指示。
[0032]进一步的,对所述虚拟USB设备的枚举过程中,可通过预设的设备枚举器中存储的USB设备的默认设备参数模拟USB设备,收到读取设备描述或者配置信息的请求消息之后,所述设备枚举器可根据所述设备参数返回对应的信息,以进行虚拟USB设备的枚举。
[0033]优选的,本实施例中可预先设置一个虚拟主机控制器驱动,通过该虚拟主机控制器驱动用于生成并管理虚拟USB设备。所述虚拟主机控制器驱动的作用和USB主机控制器驱动(H⑶)一样,处于USB驱动的最底层,负责与USB设备直接通信。比如虚拟USB设备枚举过程中,由所述虚拟主机控制器驱动向所述设备枚举器发出Get_Device_Descriptor、Get_Devi ce_Conf igurat1n、Set_Address 以及Set_Conf igurat1n 等请求命令。
[0034]需要说明的是,本实施例中,假设生成的虚拟USB设备与接入主机系统的物理USB设备为相同类型的设备,即设备类型、VID/PID均一致。
[0035]S2,检
测到物理USB设备接入所述主机系统,建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系。
[0036]作为一优选实施方式,建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系的具体方式可包括,获取已完成枚举的虚拟USB设备的状态信息,所述状态信息包括空闲状态和使用状态,得出当前为空闲状态的某虚拟USB设备;然后建立所述物理USB设备与该虚拟USB设备的映射关系,同时将该虚拟USB设备的状态信息更新为使用状态。
[0037]需要说明的是,在此之后,若检测到所述物理USB设备从HUB拔出,向HUB向所述主机返回设备拔出消息,此时需删除所述物理USB设备与虚拟USB设备的映射关系,并将对应虚拟USB设备的状态更新为空闲状态。
[0038]作为一优选实施方式,所述物理USB设备移出主机后,与其对应的虚拟USB设备的应用程序并不会卸载,以便在其它物理USB设备接入后,再次加载该驱动程序与其它物理USB设备通信,缩短设备访问时间。
[0039]作为一优选实施方式,在检测到物理USB设备接入主机系统时,还包括步骤:判断当前正在进行枚举的设备是否为虚拟USB设备,若不是,可通过预设的钩子函数拦截所述物理USB设备对应的设备接入事件,以阻止系统发起对所述物理USB设备的枚举,即系统不会对所述物理USB设备执行一个标准的设备枚举流程。与此同时,可通过虚拟主机控制器驱动和设备枚举器模拟一个虚拟设备枚举过程,所述设备枚举器通过HUB与所述物理USB建立通信,所述设备枚举器获取与所述物理USB设备类型相同的虚拟USB设备的设备参数(本实施例中虚拟USB设备与接入系统的物理USB设备为相同类型的设备),根据所述设备参数为所述物理USB设备分配地址,以及对所述物理USB设备进行设备配置。在完成配置之后,再将所述物理USB设备的端口编号与某个已完成枚举、且为空闲状态的虚拟USB设备建立映射关系Ο
[0040]作为另一优选实施方式,在HUB检测到所述物理USB设备拔出HUB,主机系统收到HUB返回的设备拔出消息,同样可通过预设的钩子函数拦截所述物理USB设备的移出事件,以阻止系统卸载与其对应的虚拟USB设备相应的驱动程序。在有其它物理USB设备接入系统时可再次使用该驱动程序,可缩短访问设备的时间。
[0041]S3,主机应用程序通过所述驱动程序、所述映射关系对所述物理USB设备进行访问。
[0042]本实施例中,由于所述物理USB设备与所述虚拟USB设备为相同的USB设备,因此所述虚拟USB设备相应的驱动程序也支持所述物理USB设备。
[0043]需要说明的是,USB驱动程序可分为三层:平台相关驱动(PerDevice Driver,简称PDD)、USB驱动核心、USB主机控制器驱动(Host Controller Driver,HCD)。本实施例中,平台相关驱动PDD指虚拟USB设备相应的驱动程序,处于USB驱动核心的上层,用于衔接应用程序和USB驱动核心的中介,是最终与应用程序交互的软件模块,为应用程序提供接口。不同的USB设备类对应不同的平台相关驱动(驱动程序),比如对于键盘鼠标有USB HID驱动,USB存储设备有USB Storage驱动。驱动核心是USB驱动结构的核心层,负责将USB包(USBRequest Block)提交给底层的USB主机控制器驱动(HCD)。底层的USB主机控制器驱动是USB驱动中直接与硬件交互的软件模块,其主要功能包括USB主机控制器硬件初始化、为USB驱动核心层提供相应的接口函数、提供USB根集线器设备配置及控制功能、完成四种类型的数据传输等。
[0044]作为一优选实施方式,在设置虚拟主机控制器驱动、设备枚举器的基础上,还可在主机系统中预先设置USB插粧驱动程序和URB转发器。其中,所述虚拟主机控制器驱动、设备枚举器、USB插粧驱动程序分别与所述URB转发器通信连接,所述虚拟主机控制器驱动通过USB驱动核心与平台相关驱动通信连接,所述USB插粧驱动程序通过USB驱动核心与HCD通信连接;此外,所述设备枚举器还与HCD通信连接,为新接入的物理USB设备分配地址以及进行设备配置。所述URB转发器中存储有物理USB设备与已完成枚举的虚拟USB设备的映射关系表,因此主机应用程序通过H)D、USB驱动核心、URB转发器、USB插粧驱动程序将URB包发送至Η⑶,Η⑶将所述URB包通过USB主机控制器、USB根集线器发送至连接主机的HUB,最后所述URB包被连接所述HUB的对应物理USB设备接收,所述物理USB设备返回的数据基于相似路径达到主机应用程序。主机应用程序无需等待较长的设备枚举时间,可快速访问接入主机的物理USB设备。
[0045]由于主机系统没有为所述物理USB设备安装驱动程序,这样USB插粧驱动程序把URB包提交给HCD之后仍然无法访问到所述物理USB设备,因此可利用操作系统的内建机制来实现将所述USB插粧驱动程序绑定所述物理USB设备。比如在Linux 2.6内核,可以通过sysfs文件系统来实现这种绑定操作,而不依赖于设备的热插拔机制来动态安装相应的设备驱动。
[0046]基于上述实施例的实现USB设备快速访问的方法,下面给出三种具体的实施方式。
[0047]图2为实现USB设备快速访问的USB系统框架一的示意图,如图2所示,所述USB系统框架包括:主机PC、USB集线器(HUB)和USB设备(Ukey)。该USB系统采用主从结构,所有的数据通讯都由主机PC发起,而Ukey—直扮演受控的角色,按照主机PC的要求接收或发送数据。在该USB系统基础上,还增加了如下部件:
[0048](1)虚拟主机控制器接口(Virtual Host Controller Interface,简称VHCI),用于生成并管理虚拟USB设备。VHCI负责与所述设备枚举器直接通信。
[0049](2)设备枚举器,用于模拟HUB设备向VHCI发送设备接入指示,还用于模拟虚拟USB设备对枚举过程中的请求指令做出默认响应。
[0050](3)USB插粧驱动程序,用于通过HCD与USB主机控制器进行交互,以实现应用程序与接入HUB的物理USB设备的通信。
[0051](4)URB转发器,用于实现VHCI与USB插粧驱动程序、设备枚举器之间的桥接。
[0052]基于上述USB系统,进一步的,上述过程S1的具体实现过程可为:
[0053]在设备枚举器中预先设置虚拟USB设备的最大数量N;并且假定接入主机的虚拟USB设备和物理USB设备均相同(即设备类型、VID/PID均一致),设备枚举器中还保存了USB设备的默认设备参数,包括设备描述、配置描述、接口描述以及端点描述等信息。
[0054]在初始化阶段,设备枚举器模拟HUB设备向VHCI发送检测到设备的消息。收到该消息,主机系统将发起虚拟USB设备枚举流程,包括通过VHCI选定设备、获取设备描述信息、为虚拟USB设备分配地址、安装相应的驱动程序以及进行设备配置等一系列操作。
[0055]所述URB转发器识别出VHCI正处于枚举虚拟USB设备的过程中,它将VHCI发来的相关请求报文转发给所述设备枚举器,并将所述设备枚举器返回的响应报文转发给所述VHCL.
[0056]经过多次交互过程,主机系统中将为N个虚拟USB设备安装各自相应的驱动程序,虚拟USB设备的枚举完成。
[0057]进一步的,上述过程S2的具体实现过程可为:
[0058]在初始化阶段,通过所述设备枚举器还在主机系统中注入钩子函数,用以监视由USB主机控制器向系统上报物理USB设备的接入事件。在用户将连接有多个物理USB设备的HUB插入主机PC时,USB主机控制器检测到HUB及其连接的物理USB设备状态,并尝试通知主机该事件发生(即向主机系统发出对应的设备接入指示),此时所述钩子函数将被调用。如果设备枚举器发现当前正在执行枚举的设备是虚拟USB设备,则不执行任何操作;如果发现当前正在执行枚举的设备是USB主机控制器检测到的物理USB设备,则设备枚举器将当前的物理设备接入事件拦截,使得系统无法收到所述物理USB设备的接入事件,这样USB驱动核心便不会发起一个新的枚举流程对所述物理USB设备进行枚举。与此同时,通过所述虚拟主机
控制器驱动和所述设备枚举器模拟一个虚拟USB设备枚举过程,所述设备枚举器通过HUB与所述物理USB设备建立通信连接,通过发送SET_ADDRESS和SET_C0NFIGURAT10N指令为所述物理USB设备分配地址和进行设备配置。完成之后,所述设备枚举器还将所述物理USB设备的端口编号与某个已完成枚举、且为空闲状态的虚拟USB设备建立映射关系,同时将该虚拟USB设备标识为使用状态,并且将该映射关系传送给所述URB转发器,以更新URB转发器中存储的映射关系。
[0059]由于设备枚举器拦截了所述物理USB设备对应的设备接入指示,因此主机系统中没有为所述物理USB设备安装一个驱动程序,这样USB插粧驱动程序把URB包提交给HCD之后无法访问到所述物理USB设备,因此需要利用操作系统内建机制来实现所述USB插粧驱动程序与所述物理USB设备的绑定。比如在Linux 2.6内核中,可以通过sysfs文件系统来实现这种绑定操作,而不依赖于热插拔机制来动态加载新的驱动程序,有利于缩短设备访问时间。
[0060]上述过程S3的具体实现过程可包括:当PC端应用程序读取/写入某个虚拟USB设备时,URB转发器会将接收到的URB包传送给所述USB插粧驱动程序。在转发报文之前,URB转发器将根据本地存储的虚拟USB设置与物理USB设备的映射关系表修改所述URB包中的地址。譬如,所述虚拟USB设备分配的地址为a,而设备枚举器为它对应的物理USB设备分配了地址b,则URB转发器需要将所述URB报文中的地址a替换为地址b,然后再传送给所述USB插粧驱动程序。由于经过地址替换,USB驱动核心在接收到USB插粧驱动程序发来的URB包时,就可以将其传递到所述物理USB设备。当所述物理USB设备对URB请求报文做出响应之后,这些URB响应报文同样会经过URB转发器传递给VHCI,最后返回给应用程序。
[0061 ]另外,当用户将连接有多个物理USB设备的HUB从PC拔出时,USB主机控制器检测到该事件并尝试通知主机系统,所述钩子函数将拦截该事件。此时,设备枚举器会删除所述物理USB设备与虚拟USB设备的映射关系表,并将对应虚拟USB设备的状态更新为空闲状态,同时更新URB转发器中的映射关系表。
[0062]由于物理USB设备的拔出事件被过滤掉,即使连接有物理USB设备的HUB已经被拔出,系统中已经加载的虚拟USB设备也不会被卸载,所述虚拟USB设备相应的驱动程序也不会被卸载;但是,没有映射物理USB设备的虚拟USB设备无法被应用程序正常读写的。例如,当应用程序尝试读取/写入一个没有映射物理USB设备的虚拟USB设备时,URB转发器将URB包转发到设备枚举器,此时所述设备枚举器单元将会返回一个设备错误的相应URB包。
[0063]此外,所述设备枚举器还与应用程序通信连接,应用程序通过与设备枚举器通信来获取物理USB设备的连接状态,从而决定何时执行读取/写入所述物理USB设备的操作。
[0064]可见,通过本实施例的实现USB设备快速访问的方法,通过模拟USB设备的枚举过程,在系统中创建多个虚拟USB设备,并将它们映射到实际的物理USB设备,通过简化物理USB设备枚举流程,有效地缩短了在同一时刻插入大量USB设备时系统枚举设备及加载设备驱动程序过程所消耗的时间,使得应用程序可以快速访问这些USB设备。此外,通过在虚拟USB设备和物理USB设备之间建立动态映射,通过动态修改URB包的地址实现自动路由,便于对多个USB设备统一编址管理。
[0065]图3为实现USB设备快速访问的USB系统框架二的示意图,如图3所示,所述USB系统框架包括:主机(client和sever)、与sever连接的HUB,以及接入HUB的USB设备(Ukey)。在client主机系统中,设置有所述虚拟主机控制器接口 VHCI,所述VHCI通过USB驱动核心与PDD通信,PDD用于与应用程序通信。在sever主机系统中,设置有设备枚举器、USB插粧驱动程序和URB转发器,所述设备枚举器、USB插粧驱动程序分别与所述URB转发器通信连接,所述USB插粧驱动程序通过USB驱动核心与HCD通信,所述Η⑶与USB主机控制器通信,USB主机控制器通过USB根集线器与连接有USB设备的HUB通信。并且,所述client中的VHCI还通过网络接口与sever中的URB转发器和设备枚举器通信连接。
[0066]可见,图3所示的系统框架与图2所示USB系统框架的主要区别是:虚拟USB设备和物理USB设备分别位于在两个不同的主机系统中,这两个主机系统可以运行不同类型的操作系统,两个主机系统之间通过网络接口相互连接并转发URB包,实现对物理USB设备的快速访问。
[0067]除此之外,图3所示的USB系统框架中USB系统框架是将多个USB设备及HUB接入两个主机中的某一个(即sever主机)。基于图3所示的USB系统框架,sever主机还可通过网络与多个服务器PC连接,每个服务器中接入有1个或多个USB设备;同时在client系统中增加一个虚拟USB分配模块,它通过网络接口与sever中的设备枚举器单元进行通信。
[0068]在此场景中,sever连接了来自多个不同服务器PC的USB设备,因此需要保证来自多个服务器的USB设备与client系统中的虚拟USB设备之间的——对应的映射关系,client系统中每个虚拟USB设备只能关联到某一个服务器中的某一个物理USB设备。因此需要在client系统中增加一个虚拟USB分配模块,它通过网络接口与sever主机中的设备枚举器单元进行通信,用户在HUB端接入新的物理USB设备时,所述虚拟USB分配模块为设备枚举器单元分配一个可用的虚拟USB设备,在HUB端的物理USB设备被拔出时,所述虚拟USB分配模块回收与之对应的虚拟USB设备。
[0069]与现有的USB设备枚举及访问过程相比,通过本发明USB设备快速访问的方法,通过设备枚举器模拟特定的USB设备,协助系统完成虚拟USB设备的枚举过程;简化物理USB设备的枚举过程,缩短枚举大量物理USB设备所消耗的时间;虚拟USB设备与真实USB设备建立一一对应的映射关系,并在URB转发器中修改地址,实现URB包的自动路由,为点对点、点对多点的虚拟USB映射提供了高度的灵活性,便于对来自多个服务器的USB设备统一编址管理。
[0070]以下对可用于执行上述实现USB设备快速访问的方法的实现USB设备快速访问的系统实施例进行说明。为了便于说明,实现USB设备快速访问的系统实施例的结构示意图中,仅仅示出了与本发明实施例相关的部分,本领域技术人员可以理解,图中示出的系统结构并不构成对系统的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0071 ]图4为本发明实施例二的实现USB设备快速访问的系统的示意性结构图;如图4所示,本实施例的实现USB设备快速访问的系统包括:虚拟设备枚举单元510、映射管理单元520以及访问控制单元530,各模块详述如下:
[0072]所述虚拟设备枚举单元510,用于检测到虚拟USB设备接入主机系统,发起对所述虚拟USB设备的枚举,安装与所述虚拟USB设备相应的驱动程序;
[0073]优选的,所述虚拟设备枚举单元510,还用于生成若干虚拟USB设备,设置各虚拟USB设备的设备参数,向主机系统发送设备接入指示,所述设备参数包括设备描述、配置描述、接口描述和端点描述信息。
[0074]所述映射管理单元520,用于检测到物理USB设备接入所述主机系统,建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系;
[0075]优选的,所述映射管理单元520,还用于获取与所述物理USB设备类型相同的虚拟USB设备的设备参数,根据所述设备参数为所述物理USB设备分配地址,以及对所述物理USB设备进行设备配置。
[0076]所述访问控制单元530,用于主机应用程序通过所述驱动程序、所述映射关系对所述物理USB设备进行访问。
[0077]优选的,其中建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系的具体方式可包括:获取已完成枚举的虚拟USB设备的状态信息,所述状态信息包括空闲状态和使用状态,得到当前为空闲状态的某虚拟U
SB设备;建立所述物理USB设备与该虚拟USB设备的映射关系,并将该虚拟USB设备的状态信息更新为使用状态。
[0078]所述映射管理单元520,还用于检测到所述物理USB设备移出所述主机系统,删除所述物理USB设备与虚拟USB设备的映射关系,并将对应虚拟USB设备的状态更新为空闲状
??τ ο
[0079]作为另一优选实施方式,所述映射管理单元520,还用于检测到物理USB设备接入所述主机系统时,确定当前正在进行枚举的设备不为虚拟USB设备,拦截所述物理USB设备对应的设备接入指示,以阻止发起对所述物理USB设备的枚举;以及,检测到所述物理USB设备移出所述主机系统时,拦截所述物理USB设备的移出事件,以阻止卸载对应虚拟USB设备相应的驱动程序。
[0080]需要说明的是,上述示例的实现USB设备快速访问的系统的实施方式中,各模块/单元之间的信息交互、执行过程等内容,由于与本发明前述方法实施例基于同一构思,其带来的技术效果与本发明前述方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
[0081]此外,上述示例的实现USB设备快速访问的系统的实施方式中,各功能模块的逻辑划分仅是举例说明,实际应用中可以根据需要,例如出于相应硬件的配置要求或者软件的实现的便利考虑,将上述功能分配由不同的功能模块完成,即将所述实现USB设备快速访问的系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0082]另外,上述示例的实现USB设备快速访问的系统的实施方式中,各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0083]所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。本领域普通技术人员可以理解本发明的任意实施例指定的方法的全部或部分步骤是可以通过程序来指令相关的硬件(个人计算机、服务器、或者网络设备等)来完成。该程序可以存储于一计算机可读存储介质中。该程序在执行时,可执行上述任意实施例指定的方法的全部或部分步骤。前述存储介质可以包括任何可以存储程序代码的介质,例如只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
[0084]在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0085]以上所述实施例仅表达了本发明的几种实施方式,不能理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【主权项】
1.一种实现USB设备快速访问的方法,其特征在于,包括: 检测到虚拟USB设备接入主机系统,发起对所述虚拟USB设备的枚举,安装与所述虚拟USB设备相应的驱动程序; 检测到物理USB设备接入所述主机系统,建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系; 主机应用程序通过所述驱动程序、所述映射关系对所述物理USB设备进行访问。2.根据权利要求1所述的实现USB设备快速访问的方法,其特征在于,所述检测到虚拟USB设备接入主机系统之前包括: 生成若干虚拟USB设备,设置所述虚拟USB设备的设备参数,向主机系统发送设备接入指示; 所述设备参数包括设备描述、配置描述、接口描述和端点描述信息。3.根据权利要求1所述的实现USB设备快速访问的方法,其特征在于,所述建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系,之前还包括: 获取与所述物理USB设备类型相同的虚拟USB设备的设备参数,根据所述设备参数为所述物理USB设备分配地址,以及对所述物理USB设备进行设备配置。4.根据权利要求1所述的实现USB设备快速访问的方法,其特征在于,所述建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系,包括, 获取已完成枚举的虚拟USB设备的状态信息,所述状态信息包括空闲状态和使用状态,得到当前为空闲状态的某虚拟USB设备; 建立所述物理USB设备与该虚拟USB设备的映射关系,并将该虚拟USB设备的状态信息更新为使用状态。5.根据权利要求4所述的实现USB设备快速访问的方法,其特征在于,所述建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系之后,还包括: 若检测到所述物理USB设备移出所述主机系统,删除所述物理USB设备与虚拟USB设备的映射关系,并将对应虚拟USB设备的状态更新为空闲状态。6.根据权利要求1所述的实现USB设备快速访问的方法,其特征在于,所述检测到物理USB设备接入所述主机系统之后,还包括: 若确定当前正在进行枚举的设备不为虚拟USB设备,拦截所述物理USB设备的接入事件,以阻止发起对所述物理USB设备的枚举; 以及,若检测到所述物理USB设备移出所述主机系统,拦截所述物理USB设备的移出事件,以阻止卸载对应虚拟USB设备的驱动程序。7.一种实现USB设备快速访问的系统,其特征在于,包括: 虚拟设备枚举单元,用于检测到虚拟USB设备接入主机系统,发起对所述虚拟USB设备的枚举,安装与所述虚拟USB设备相应的驱动程序; 映射管理单元,用于检测到物理USB设备接入所述主机系统,建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系; 访问控制单元,用于主机应用程序通过所述驱动程序、所述映射关系对所述物理USB设备进行访问。8.根据权利要求7所述的实现USB设备快速访问的系统,其特征在于,所述虚拟设备枚举单元,还用于生成若干虚拟USB设备,设置所述虚拟USB设备的设备参数,向主机系统发送设备接入指不; 所述设备参数包括设备描述、配置描述、接口描述和端点描述信息。9.根据权利要求7所述的实现USB设备快速访问的系统,其特征在于,所述映射管理单元,还用于获取与所述物理USB设备类型相同的虚拟USB设备的设备参数,根据所述设备参数为所述物理USB设备分配地址,以及对所述物理USB设备进行设备配置。10.根据权利要求7所述的实现USB设备快速访问的系统,其特征在于,所述建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系,包括, 获取已完成枚举的虚拟USB设备的状态信息,所述状态信息包括空闲状态和使用状态,得到当前为空闲状态的某虚拟USB设备; 建立所述物理USB设备与该虚拟USB设备的映射关系,并将该虚拟USB设备的状态信息更新为使用状态。11.根据权利要求10所述的实现USB设备快速访问的系统,其特征在于,所述映射管理单元,还用于若检测到所述物理USB设备移出所述主机系统,删除所述物理USB设备与虚拟USB设备的映射关系,并将对应虚拟USB设备的状态更新为空闲状态。12.根据权利要求7所述的实现USB设备快速访问的系统,其特征在于,所述映射管理单元,还用于检测到物理USB设备接入所述主机系统之后,若确定当前正在进行枚举的设备不为虚拟USB设备,拦截所述物理USB设备的接入事件,以阻止发起对所述物理USB设备的枚举;以及,若检测到所述物理USB设备移出所述主机系统,拦截所述物理USB设备的移出事件,以阻止卸载对应虚拟USB设备的驱动程序。
【专利摘要】本发明涉及一种实现USB设备快速访问的方法和系统。所述方法包括:检测到虚拟USB设备接入主机系统,发起对所述虚拟USB设备的枚举,安装与所述虚拟USB设备相应的驱动程序;检测到物理USB设备接入所述主机系统,建立所述物理USB设备与已完成枚举的虚拟USB设备的映射关系;主机应用程序通过所述驱动程序、所述映射关系对所述物理USB设备进行访问。通过本发明,能够缩短因USB设备枚举导致访问等待时间。
【IPC分类】G06F13/38, G06F13/40
【公开号】CN105488000
【申请号】CN201510992819
【发明人】张永强
【申请人】广东数字证书认证中心有限公司
【公开日】2016年4月13日
【申请日】2015年12月23日