曾经参考 https://blog.csdn.net/laoxue123456/article/details/138339029 来共享windows上的usb 发现没有办法成功总是出现 tcp 错误。telnet测试能够正常连接 很是奇怪,window上换成低版本的usbipd仍然是同样的错误,没有办法的情况下参考了docker官方文档才得以正常工作,现将过程重新写一遍
1 下载安装windows版本的usbipd https://github.com/dorssel/usbipd-win/tags
此处可以选择下载最新版本的msi文件
执行命令
查询usb命令,
usbip list
分享usb设备
usbipd bind -b 0-0-0
取消共享
usbipd unbind -a
2 docker 的使用
文件结构
我的docker-compose.yml和dockerfile
dockerfile
FROM osrf/ros:humble-desktop-full-jammy
#EXPOSE 99/TCP
docker-compose
version: '1'
services:
robot-humble:
build: .
privileged: true
devices:
- /dev/ttyUSB0
environment:
- DISPLAY=host.docker.internal:0.0
volumes:
- ./.vscode-server:/root/.vscode-server
- ./ros2_ws:/root/ros2_ws
tty: true
command: /bin/bash
以上可参考我的文档 https://blog.csdn.net/ashcn2001/article/details/145743865?spm=1001.2014.3001.5502
3 进入docker ,执行俩列语句获取usbip
参考https://docs.docker.com/desktop/features/usbip/
apt update
apt install linux-tools-virtual hwdata usbutils kmod
update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20
usbutils是为了能够使用lsusb
kmod 包含了lsmod
命令执行获取共享,这个时候宿主机不能使用该usb了
列举可用的usb
usbip list -r host.docker.internal
结果如下
Exportable USB devices
======================
- host.docker.internal
0-0-0: unknown vendor : unknown product (0000:0000)
: /sys/bus/0/0/0
: (Defined at Interface level) (00/00/00)
: 0 - unknown class / unknown subclass / unknown protocol (03/00/00)
连接usb设备
usbip attach -r host.docker.internal -d 0-0-0