解决usbip-win项目中的USB设备共享连接问题
【免费下载链接】usbip-win 项目地址: https://gitcode.com/gh_mirrors/usb/usbip-win
问题背景
在使用usbip-win项目进行USB设备共享时,用户可能会遇到连接失败的问题。具体表现为在Windows客户端执行usbip attach命令时出现错误提示:"usbip: error: failed to attach on client"和"usbipd: info: request 0x8003(5): failed on server"。本文将详细分析这一问题并提供解决方案。
环境配置
要成功实现USB设备共享,需要正确配置以下环境:
- 服务器端:使用Ubuntu 20.04系统,运行usbip-utils 2.0版本
- 客户端:Windows系统,运行usbip-win 0.3.6版本
问题分析
当用户尝试直接从Windows客户端执行usbip attach命令时,连接会失败。这是因为在建立连接前,客户端需要先获取服务器上可用的USB设备列表信息。直接执行attach命令会导致协议握手不完整,从而引发连接失败。
解决方案
正确的操作流程如下:
-
在Ubuntu服务器端:
- 启动usbip守护进程:
sudo usbipd -D - 绑定要共享的USB设备:
sudo usbip bind -b <设备总线ID>
- 启动usbip守护进程:
-
在Windows客户端端:
- 首先执行设备列表查询命令:
usbip.exe list -r <Ubuntu服务器IP> - 然后再执行设备连接命令:
usbip.exe attach -r <Ubuntu服务器IP> -b <设备总线ID>
- 首先执行设备列表查询命令:
技术原理
这种操作顺序要求的原因在于usbip协议的工作机制:
- 设备枚举阶段:客户端需要先通过
list命令获取服务器上可用的USB设备信息,这会建立初始的通信通道。 - 设备连接阶段:在枚举完成后,客户端才能通过获取的设备信息建立实际的USB设备连接。
跳过枚举阶段直接尝试连接会导致协议握手不完整,服务器无法正确处理连接请求,从而返回错误代码0x8003(5)。
注意事项
- 确保服务器和客户端之间的网络连接畅通,安全设置不会阻止相关端口。
- 确认使用的usbip版本兼容,不同版本间可能存在协议差异。
- 在Ubuntu服务器上,确保已加载必要的内核模块:
modprobe usbip-core和modprobe usbip-host。 - 对于需要特殊权限的设备,可能需要调整udev规则或使用root权限。
总结
通过遵循正确的操作顺序:先查询设备列表再连接设备,可以解决usbip-win项目中的USB设备共享连接问题。这一解决方案不仅适用于文中提到的特定版本组合,也适用于大多数usbip实现,因为这是由usbip协议本身的工作机制决定的。
【免费下载链接】usbip-win 项目地址: https://gitcode.com/gh_mirrors/usb/usbip-win
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



