USB/IP
来自 USB/IP 网站
- USB/IP 项目旨在开发一个通用的通过 IP 网络共享 USB 设备系统。为了在计算机之间共享具有完整功能的 USB 设备,USB/IP 将“USB I/O 消息”封装到 TCP/IP 有效载荷中并在计算机之间传输。
安装
用法
服务器设置
服务器应连接有物理 USB 设备,并且已加载 usbip_host USB/IP 内核模块。然后 启动并 启用 USB/IP systemd 服务 usbipd.service。该守护进程将在 TCP 端口 3240 上接受连接。
列出已连接的设备
$ usbip list -l
绑定所需设备。例如,共享总线 ID 为 1-1.5 的设备
# usbip bind -b 1-1.5
解除设备绑定
# usbip unbind -b 1-1.5
绑定后,客户端即可访问该设备。
与 systemd 服务绑定
为了使绑定持久化,可以使用以下 systemd 模板单元文件
/etc/systemd/system/usbip-bind@.service
[Unit] Description=USB-IP Binding on bus id %I After=network-online.target usbipd.service Wants=network-online.target Requires=usbipd.service #DefaultInstance=1-1.5 [Service] Type=simple ExecStart=/usr/bin/usbip bind -b %i RemainAfterExit=yes ExecStop=/usr/bin/usbip unbind -b %i Restart=on-failure [Install] WantedBy=multi-user.target
因此,例如,要共享总线 ID 为 1-1 的设备,应 启动/启用 usbip-bind@1-1.service。
客户端设置
确保 vhci_hcd 内核模块已加载。
然后列出服务器上的可用设备
$ usbip list -r server_IP_address
挂接所需设备。例如,挂接总线 ID 为 1-1.5 的设备
$ usbip attach -r server_IP_address -b 1-1.5
--tcp-port port。断开设备连接
设备只能在客户端将其分离后才能断开连接。
列出已挂接的设备
$ usbip port
分离设备
$ usbip detach -p port_number
在服务器上解除设备绑定
$ usbip unbind -b busid
技巧与提示
按厂商/设备 ID 绑定
如果总线 ID 不一致且在每次系统启动时动态分配,则可以改用按厂商/设备 ID 绑定
/etc/systemd/system/usbip-bind@.service
[Unit] Description=USB-IP Binding device id %I After=network-online.target usbipd.service Wants=network-online.target Requires=usbipd.service [Service] Type=simple ExecStart=/bin/sh -c "/usr/sbin/usbip bind --$(/usr/sbin/usbip list -p -l | grep '#usbid=%i#' | cut '-d#' -f1)" RemainAfterExit=yes ExecStop=/bin/sh -c "/usr/sbin/usbip unbind --$(/usr/sbin/usbip list -p -l | grep '#usbid=%i#' | cut '-d#' -f1)" Restart=on-failure [Install] WantedBy=multi-user.target
因此,例如,要共享厂商/设备 ID 为 0924:3d68 的设备,应 启动/启用 usbip-bind@0924:3d68.service。
然后客户端设置将如下所示
- Linux 客户端
$ usbip attach -r server_IP_address --$(/usr/sbin/usbip list -p -r server_IP_address | grep '#usbid=0924:3d68#' | cut '-d#' -f1)
usbip list -p -r server_IP_address 中的 -p 标志是否正常工作。如果不正常,请改用以下行$ usbip attach -r server_IP_address -b $(/usr/sbin/usbip list -p -r server_IP_address | grep '0924:3d68' | cut '-d:' -f1 | awk '{print $1}')
- Windows 客户端
c:\> for /f "tokens=1 delims=:, " %a in ('usbip list -r server_IP_address ^| findstr /r /c:"0924:3d68"') do start usbip attach -r server_IP_address -b %a
共享已通过 /etc/.. 中文件配置的设备
usbip-systemdAUR 提供了用于按厂商/设备 ID 绑定的 systemd 服务文件,以及用于按主机名和厂商/设备 ID 连接的服务文件。
服务器设置
对于每个设备,在 /etc/usbip/bind-devices/ 中创建一个 device.conf 文件,并将 USBIP_DEVICE 设置为厂商/产品 ID,例如
/etc/usbip/bind-devices/example-device.conf
USBIP_DEVICE=0924:3d68
要绑定已配置的 device,请 启动/启用 服务 usbip-bind@example-device.service
客户端设置
对于每个主机/设备,在 /etc/usbip/remote-devices/ 中创建一个 device.conf 文件,并将 HOST 和 USBIP_DEVICE 设置为厂商/产品 ID,例如
/etc/usbip/remote-devices/example-device.conf
USBIP_HOST=example-host USBIP_DEVICE=0924:3d68
确保您的服务器正在运行并且已绑定配置的设备,然后 启动或 停止服务 usbip@example-device.service