USBIP

USBIP

USB/IP 是一个开源项目,已合入 Kernel,在 Linux 环境下可以通过使用 USB/IP 远程共享 USB 设备。

USB Client:使用USB的终端,将server共享的usb设备挂载到本地。
USB Server:分享本地的usb设备至远程。

USBIP的架构

主要部分也是两个,读取设备的主机端,设置一个虚拟的主机控制器接口VHCI,它不操纵底层的主机控制器,而是将上层的消息通过网络转发到另一个主机,在另一侧,实现一个USB设备驱动,它不是将USB Core的内容向上传递,同样是通过网络发送出去,叫做Stub端。

在这里插入图片描述

usbip分为两端:server端和client端,它们分别运行在不同的linux主机中,其中运行server端驱动的PC插入usb设备(如U盘等),用于共享。此时client端PC就可以attach到server端,此时client端的主机PC就能看到u盘,它以为真的有一个u盘插入本机,并为其安装驱动,效果跟在本机上直接插入U盘无异,实现了u盘共享,或者USB延长器的功效。

Linux 环境配置

配置 USB Server

加载驱动
  • Ubuntu

    • sudo apt-get install linux-tools-generic #安装包含USBIP的软件包
      // 或者
      sudo apt-get install usbip
      
      sudo modprobe usbip-core #使用modprobe自动处理可载入模块usbip-core
      
      sudo modprobe vhci-hcd #使用modprobe自动处理可载入模块vhci-hcd
      
      sudo modprobe usbip-vudc #使用modprobe自动处理可载入模块usbip-vudc
      
      sudo modprobe usbip-host #使用modprobe自动处理可载入模块usbip-host
      
  • centos

    • sudo apt-get install usbip
      sudo modprobe usbip-core
      sudo modprobe vhci-hcd
      sudo modprobe usbip_host
      
查看设备

插入 USB 设备,并执行以下命令,查询可用的 USB 设备。

usbip list --local
启动服务

记录 busid 的值,并依次执行以下命令,启动监听服务,指定 USB/IP 端口号,共享 USB 设备。

sudo usbipd -D [--tcp-port PORT]
共享设备

首先查看设备:

 usbip list -l
 - busid 4-1 (0627:0001)
   Adomax Technology Co., Ltd : unknown product (0627:0001)

 - busid 1-4.1 (0951:1666)
   Kingston Technology : DataTraveler 100 G3/G4/SE9 G2 (0951:1666)

找到自己要分享设备的busid,之后执行

sudo usbip bind -b [busid]

sudo usbip bind -b 1-4.1
请输入密码:
验证成功
usbip: info: bind device on busid 1-4.1: complete

此时设备共享成功,可以在Client端查看Server共享的usb设备列表。

停止共享

找到你要停止共享的usb设备的busid,之后执行:

usbip unbind -b [busid]

sudo usbip unbind -b 1-4.1
usbip: info: unbind device on busid 1-4.1: complete

此时设备停止共享。

配置USB Client

加载驱动
  • ubuntu

    • sudo modprobe usbip-core #使用modprobe自动处理可载入模块usbip-core
      
      sudo modprobe vhci-hcd #使用modprobe自动处理可载入模块vhci-hcd
      
      sudo modprobe usbip-vudc #使用modprobe自动处理可载入模块usbip-vudc
      
      sudo modprobe usbip-host #使用modprobe自动处理可载入模块usbip-host
      
  • centos

    • yum -y install kmod-usbip usbip-utils
      modprobe usbip-core
      modprobe vhci-hcd
      modprobe usbip-host
      
查询可用设备

执行以下命令,查询云服务器可用的 USB 设备。

usbip list --remote server_ip

sudo usbip list -r 172.17.84.72
Exportable USB devices
======================
 - 172.17.84.72
      1-4.1: Kingston Technology : DataTraveler 100 G3/G4/SE9 G2 (0951:1666)
           : /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:0b.7/usb1/1-4/1-4.1
           : (Defined at Interface level) (00/00/00)
attach 远程usb至本地

执行以下命令,将 USB 设备绑定至本地中。

usbip attach --remote=server_ip --busid=dev_busid

sudo usbip attach -r 172.17.84.72 -b 1-4.1

执行以下命令,查看当前 USB 设备列表。

lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 008: ID 0951:1666 Kingston Technology DataTraveler 100 G3/G4/SE9 G2
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
断开连接

首先查看连接共享的端口号:

sudo usbip port #查看客户端连接usb设备的端口号

 usbip port
Imported USB devices
====================
libusbip: error: fopen
libusbip: error: read_record
Port 00: <Port in Use> at High Speed(480Mbps)
       Kingston Technology : DataTraveler 100 G3/G4/SE9 G2 (0951:1666)
       3-1 -> unknown host, remote port and remote busid
           -> remote bus/dev 001/006

之后,断开对应端口号的连接

sudo usbip detach -p 00 #断开port端口号为00的的远程USB连接

sudo usbip detach -p 00
usbip: info: Port 0 is now detached!

现在设备从本地断开了。

Windows环境配置

Windows端环境配置和Linux端大同小异,可以参考usbip-win项目:https://github.com/cezanne/usbip-win

参考

Linux 系统使用 USB/IP 远程共享 USB 设备

ubuntu20.04版USBIP2.0服务器端及客户端安装与使用命令

Tutorial – USB/IP

USB/IP

https://www.kernel.org/doc/html/latest/usb/usbip_protocol.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值