USB over IP技术简介
1. USBIP 简介
在 USB 系统中,USB 设备和 USB 主机间通过 USB 线连接在一起。USB 线的长度较短,USB 设备只能安装到 USB 主机周边,设备和主机的距离也就很短。USB over IP(后文简称为 USBIP) 技术将 USB 设备接入 IP 网络,将 USB 设备连接到网络上的远端 USB 主机,也即 USB 主机能够访问网络上的远端 USB 设备,相当于通过网络将 USB 连接延长了,USBIP 的作用就是充当长距离 USB 延长线。USBIP 连接示意图如下:

2. USB 驱动框架
在 Linux 内核中,USB 驱动分为两个角色:主机侧驱动和设备侧驱动。当运行 Linux 系统的设备是作 USB 主机时,它加载的驱动就是 USB 主机侧驱动;当运行 Linux 系统的设备是作 USB 设备时,它加载的驱动就是 USB 设备侧驱动,内核中设备侧驱动又叫 USB gadget 驱动。
Linux 内核中 USB 驱动架构如下所示:

USB 主机侧驱动控制的是本机 USB Host 口与它所连接的 USB 设备间的通信。主机侧驱动有三层:最底层是 USB 主机控制器驱动,用于控制 USB 主机控制器硬件,称作 HCI(Host Controller Interface, 主机控制器接口)驱动;中间层是 USB 核心层,实现 USB 驱动中通用与核心的功能;最上层是外接的各类设备的驱动,如键盘、鼠标、摄像头、U 盘的驱动。
USB 设备侧驱动控制的是本机 USB Device 口与它所连接的 USB 主机间的通信。设备侧驱动也有三层:最底层是 USB 设备控制器驱动,用于控制 USB 设备控制器硬件,称作 UDC 驱动;中间层是 Gadget Function API;最上层是各类设备的 Gadget Function 驱动,如键盘、鼠标、摄像头、U 盘的驱动。例如,当本机加载 UMASS Gadget Function 驱动时,那么本机就是一个 U 盘设备,将本机连接到一台 USB 主机时,本机将被 USB 主机识别为 U 盘。
3. USBIP 原理
USBIP 是 client-server 结构,有两个角色:USBIP server 和 USBIP client,将本机真实连接的 USB 设备分享到网络上供其他主机访问的机器是 USBIP server,server 提供 USB 设备分享服务;通过网络访问远程主机上连接的 USB 设备的机器是 USBIP client,USBIP client 连接到 USBIP server 来实现远程 USB 设备通信。
USBIP 架构示意图:

需将此图结合图 1 来看。
图 1 中设备 1 是 USBIP server 角色。一旦启用 USBIP 功能,图 1 中设备 1 左侧 Host 口所连的 USB 设备,它们将属于 USBIP 类设备,使用 USBIP 的 stub driver 驱动(位于图 3 中的最上层驱动),而不再使用原本的 HID 类设备驱动和 Camera 类设备驱动(位于图 3 中的最上层驱动)。
图 1 中最右侧计算机(暂称为远程主机)是 USBIP client 角色,启用 USBIP 功能后,相当于在远程主机网口上实现了一个网口转 USB 的虚拟 USB 主机控制器,这个虚拟 USB 主机控制器由 USBIP 的 VHCI driver 来驱动,当 USBIP client 成功连接到 USBIP server 后,server 上的真实 USB 设备将出现在 USBIP client 上,此时远程主机上看到了设备 1 上的真实 USB 设备,这些设备就像是远程主机的本地设备一样,它们连接在远程主机的虚拟 USB 主机控制器上,当远程主机要和其中一个虚拟 USB 设备通信时,其通信内容将直接通过 VHCI driver 转发到网络上,再由设备 1 上的 stub driver 通过 USB 驱动框架来实现和真实 USB 设备的通信。
在 Linux 内核中,USBIP 驱动代码位于 drivers/usb/usbip 目录,这些源代码文件中,以 stub 开头的都是 USBIP server 端代码,以 vhci 开头的是 USBIP client 端代码。内核还提供了一份用户空间代码,来展示 USBIP 的用法,源码位于 tools/usb/usbip 目录。 可阅读源码了解细节。不详述。
4. 参数资料
[1] Takahiro Hirofuchi, USB/IP: A Transparent Device Sharing Technology over IP Network
[2] 宋宝华,Linux设备驱动开发详解:第 16 章,USB 主机、设备与 Gadget 驱动
[3] USB 中文网,USBIP 整体架构
5. 修改记录
2025-06-16 V1.0 初稿
USB over IP技术简介的更多相关文章
- InfiniBand技术简介
InfiniBand技术简介 转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese 介绍 随着CPU和通讯处理速度的 ...
- Windows NT 技术简介
Windows NT 技术简介 NT:New Technoly(新技术,因比DOS.WIN9X采用了很多新技术而得名) Windows NT基本介绍 WindowsNT是Microsoft推出的面向工 ...
- FC总线技术简介
FC是由美国标准化委员会(ANSI)的X3T11小组于1988年提出的高速串行传输总线,解决了并行总线SCSI遇到的技术瓶颈,并在同一大的协议平台框架下可以映射更多FC-4上层协议.FC具备通道和网络 ...
- P2P技术简介
P2P技术简介 NAT( Network Address Translation)穿越(俗称打洞)技术 前言: p2p已经存在于我们生活的方方面面:我们通过下载在工具(比如迅雷,bitorent,各种 ...
- 常见爬虫/BOT 对抗技术简介(二)
上一篇文章分别从网络协议,Robots文件,JS渲染,行为分析等多方面讲了些“反爬虫”,“反-反爬虫”技术. 点击查看:<常见爬虫/BOT 对抗技术简介(一)> 本文将主要介绍各种IP地址 ...
- Linux usb 5. usbip (USB Over IP) 使用实例
文章目录 0. 简介 1. Server 配置 2. Client 配置 参考资料 0. 简介 USB Over IP 是一种应用很多的场景,目前已经有现成的解决方案 usbip.linux 和 wi ...
- 单片机联网需求攀升 WIZnet全硬件TCP/IP技术崛起
--新华龙电子为韩国WIZnet公司网络芯片授权代理商,具有20多年的专业团队IC应用开发实力-- 如今不管是在企业还是小区.街道,甚至是居民室内,以太网接口无处不在.有鉴于此,电子设备必将向更加智能 ...
- Java Servlet 技术简介
Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...
- 【转】Android 防破解技术简介
http://www.cnblogs.com/likeandroid/p/4888808.html Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是 ...
- CSS border三角、圆角图形生成技术简介
http://www.zhangxinxu.com/wordpress/?p=794 一.前言 利用CSS的border属性可以生成一些图形,例如三角或是圆角.纯粹的CSS2的内容,没有兼容性的问题, ...
随机推荐
- 动态规划--最长公共子序列( LCS 问题)
博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- # 最长公共子序列的长度 def lcs_length(x, y): m ...
- 裸金属架构之服务器安装VMWare ESXI虚拟化平台详细流程
目录1. 裸金属架构(Vcent)2. Vcent安装流程2.1 远程控制端(个人电脑)安装VMware-viclien2.2 服务器部署安装VMWare ESXI2.3 VMware-viclien ...
- 泛型(Generics)
Java中的泛型(Generics)是JDK 5引入的一种特性,它使得类.接口和方法能够以一种类型参数化的方式进行定义和使用.泛型的主要目的是增强代码的类型安全性和可读性,同时减少类型转换(cast) ...
- FastAPI中实现动态条件必填字段的实践
title: FastAPI中实现动态条件必填字段的实践 date: 2025/04/03 00:06:20 updated: 2025/04/03 00:06:20 author: cmdragon ...
- Codeforces Round 954 (Div. 3)
A. X Axis 1.既然要求每个点到a到距离之和最小,不妨让点a为3个点中的中间点,也就是先对三个数从小到大排序,然后输出首尾数减中间值的绝对值之和即可 #include <bits/std ...
- selenium IDE简单使用
selenium IDE可理解为录制操作浏览器的过程,然后回放实现UI级的自动化 一,首先安装,本案例主要在谷歌浏览器上使用,所以用的是支持谷歌的IDE文件 下载,打开https://www.crx4 ...
- 基于CNN(卷积神经网络)的车牌号识别【结尾附完整项目下载地址】
基于卷积神经网络(CNN)的车牌识别技术是一种深度学习方法,用于自动检测并识别车辆的车牌号码.以下是经过优化后的处理步骤: 图像预处理:首先对获取的车牌图像进行处理,包括将其转换为灰度图.二值化处理以 ...
- Selenium中解决输入法导致sendKeys输入内容与预期不一致的问题
有时候由于系统输入法处于中文状态或英文状态输入内容与预期不一致的问题,我们采用文本内容拷贝的方式传递给相关元素,从而解决该问题,具体代码如下: /*** * 通过拷贝的方式输入文字内容,防止输入法中英 ...
- JS 构造函数与类
严格来说, JS 并不是一个面向对象的语言, 类似 Java, Python, C++ 这样的. JS 的独特精妙的设计其实是 原型 prototype 因此这里讲一嘴面向对象其实是为了后面引出原型的 ...
- LR_GD_MSE (公式补充)
上篇是先撸了一把梯度下降的代码, 用来优先 LR 中的 MSE. 核心代码是在求解梯度这一步. # y = wx + b def step_gradient(b_current, w_current, ...