-
-
Notifications
You must be signed in to change notification settings - Fork 139
Description
根据目前的研究成果,我们将采用 vmbus 中的 af-hyperv 协议包装 usbip 协议来实现本项目中的 USB 直通功能,无需网络参与。注意,目前只维护了win to win 的链路,win to linux 理论成立,向 ExHyperV-USBProxy 提交PR即可实现。
接下来是完整的操作步骤和注意事项,由于处于测试阶段,任何报错和意外都是有可能的,继续使用视作愿意承担风险。
1.宿主需要安装 usbipd-win 并重启,来获得截获 USB 设备的能力。
2.虚拟机需要安装 usbip-win2 并重启,来获得接收 USB 设备的能力。
3.虚拟机还需要下载来自 ExHyperV-USBProxy 的虚拟机代理程序 USBProxy.exe,以便接收来自宿主的设备分配请求。
ExHyperV-USBProxy 是开源的用户态转发,承担与宿主端的 ExHyperV 交换 usbip 的分配命令和数据通道功能,可以自行构建。
4.虚拟机最好使用原版镜像,部分精简版可能无法开启 hvsocket 导致分配失败。
5.目前,通过测试的设备有:Displaylink 显卡、USB 键鼠、安卓手机、固态U盘、普通U盘、摄像头、麦克风。usbip 协议不兼容的设备,本方案也同样不兼容。
6.目前,必须将 ExhyperV 保持运行才能维持 USB 链接,并没有单独将转发服务分离的原因是因为,不想在一阶方案投入过多精力,而是直接开发二阶方案。
二阶方案预告:
目前的思路是,宿主端将 usbipd-win 用户态改造为 af 协议原生实现,虚拟机端将 usbip-win2 内核态改造为 af 协议原生实现,跳过 tcpip 代理层,从而获得时序、带宽更优的体验。
宿主端的内核态驱动仍然使用来自 Oracle VirtualBox 的VBoxUSB.sys,因此无需考虑签名问题。但由于虚拟机端的内核态驱动改造后需要重新签名,因此二阶方案初期届时必须开启测试模式使用,根据性能表现以及市场期望考虑是否提交开源社区签名,还是走商业化的自签名方案。
一阶方案由于只在用户态做了工作,因此不需要考虑签名问题。
下面的图片是 af 协议的带宽能力,其他指标还在测试中。
