首页 理论教育 USB协议及私有云架构的设计与实践

USB协议及私有云架构的设计与实践

时间:2023-10-28 理论教育 版权反馈
【摘要】:目前常用的USB协议有1.1、2.0、3.0、3.1等。图9-1USB over IP原理首先在Ubuntu中确定U盘的设备ID,安装usbredir-server并在44444端口监听。

USB协议及私有云架构的设计与实践

USB包括控制器和外设,控制器位于主机上且一个主机可同时拥有多个USB控制器,控制器通过root hub提供接口供其他USB设备连接,而这些USB设备又可以分为hub、存储、智能卡、加密狗、打印机等。目前常用的USB协议有1.1、2.0、3.0、3.1(Type-C)等。

在QEMU中,我们一般可以对USB控制器进行透传,外设进行透传或重定向

1.控制器透传

首先USB控制器也位于PCI总线上,所以我们将整个控制器及其上面的hub、外设全部透传至虚拟机中,可以参考上一节中的相关域定义,不同的是我们需要找到USB控制器对应的PCI总线地址,如下所示。

然后选择要透传的USB控制器,我们需要查看主机线路简图或外设简图以确定要透传的USB接口,如果是对主机直接操作需避免将连有USB键盘鼠标设备的控制器透传至虚拟机,否则会造成后续操作的不便。

参考上一节中的驱动绑定,使用vfio-pci对USB控制器进行透传,假设要透传的控制器为2号控制器,它的总线地址为00:1a.0,设备ID为8086:8d26。

最后在QEMU中添加参数形如“-device vfio-pci,host=00:1a.0,id=hostdev0,bus=pci.0,multifunction=on,addr=0x9”即可。

2.外设透传

QEMU下USB外设的透传相对比较容易,只需要在域定义中添加对应的USB外设的厂商与设备ID即可,以透传USB-Key为例。

对应到QEMU的参数即是“-device usb-host,vendorid=0x04b9,productid=0x8001”或者“-device usb-host,hostbus=1,hostaddr=3,id=hostdev0”,也可是“-usbdevice host:0529:0001”等形式。(www.xing528.com)

3.外设重定向

USB外设的重定向是私有桌面云的必备功能之一,目前其实现方法包括硬件和软件两种,其中软件实现最为常用的是USB over TCP/IP,即通过TCP/IP协议重定向客户端USB外设到虚拟机中。QEMU桌面协议spice里的对应实现是spice USB Redirection,即通过添加一个专用的通道用于客户端到虚拟机的USB重定向。

USB over TCP/IP的一般实现如图9-1所示,其中PDD为具体的USB外设驱动(Peripheral Device Driver),HCD为USB控制器驱动(Host Controller Driver),Stub Driver为客户端USB外设的统一驱动,VHCIDriver为虚拟机中的USB控制器驱动。当客户端插入USB外设时,系统会对其使用Stub驱动,设备重定向后USB请求与数据会被Stub驱动封装,经由TCP/IP传递至虚拟机的VHCI驱动,反过来亦如此。

接下来笔者使用usbredir-server工具,将Ubuntu客户端的U盘重定向至另一主机中的虚拟机。

图9-1 USB over IP原理

首先在Ubuntu中确定U盘的设备ID,安装usbredir-server并在44444端口监听。

然后在另一台主机中启动虚拟机,并添加如下设备定义。

虚拟机启动后,可以看到对应的QEMU命令中多了一个特殊的usb-redir设备,形似“-chardev socket,id=charredir2,host=192.168.0.58,port=44444-device usb-redir,chardev=charredir2,id=redir2”。这个设备即是QEMU的USB重定向设备后端,它可用在USB over TCP/IP中,也可作为spice USB channel的设备后端。

需要注意的是,上述实现中hypervisor会主动发送请求到客户端端口(spice USB Redirection无此要求),而这在实际场景中往往比较难以实现。采用这种实现的私有云厂平台会在特定服务器(也可以是hypervisor)中启用代理网关或者网络隧道,客户端将网络端口映射到其上的某个端口,hypervisor再与服务器连接,从而完成双方间接通信,技术细节可以参考spice协议的squid代理实现。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈