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技术简介的更多相关文章

  1. InfiniBand技术简介

    InfiniBand技术简介   转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese 介绍         随着CPU和通讯处理速度的 ...

  2. Windows NT 技术简介

    Windows NT 技术简介 NT:New Technoly(新技术,因比DOS.WIN9X采用了很多新技术而得名) Windows NT基本介绍 WindowsNT是Microsoft推出的面向工 ...

  3. FC总线技术简介

    FC是由美国标准化委员会(ANSI)的X3T11小组于1988年提出的高速串行传输总线,解决了并行总线SCSI遇到的技术瓶颈,并在同一大的协议平台框架下可以映射更多FC-4上层协议.FC具备通道和网络 ...

  4. P2P技术简介

    P2P技术简介 NAT( Network Address Translation)穿越(俗称打洞)技术 前言: p2p已经存在于我们生活的方方面面:我们通过下载在工具(比如迅雷,bitorent,各种 ...

  5. 常见爬虫/BOT 对抗技术简介(二)

    上一篇文章分别从网络协议,Robots文件,JS渲染,行为分析等多方面讲了些“反爬虫”,“反-反爬虫”技术. 点击查看:<常见爬虫/BOT 对抗技术简介(一)> 本文将主要介绍各种IP地址 ...

  6. Linux usb 5. usbip (USB Over IP) 使用实例

    文章目录 0. 简介 1. Server 配置 2. Client 配置 参考资料 0. 简介 USB Over IP 是一种应用很多的场景,目前已经有现成的解决方案 usbip.linux 和 wi ...

  7. 单片机联网需求攀升 WIZnet全硬件TCP/IP技术崛起

    --新华龙电子为韩国WIZnet公司网络芯片授权代理商,具有20多年的专业团队IC应用开发实力-- 如今不管是在企业还是小区.街道,甚至是居民室内,以太网接口无处不在.有鉴于此,电子设备必将向更加智能 ...

  8. Java Servlet 技术简介

    Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...

  9. 【转】Android 防破解技术简介

    http://www.cnblogs.com/likeandroid/p/4888808.html Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是 ...

  10. CSS border三角、圆角图形生成技术简介

    http://www.zhangxinxu.com/wordpress/?p=794 一.前言 利用CSS的border属性可以生成一些图形,例如三角或是圆角.纯粹的CSS2的内容,没有兼容性的问题, ...

随机推荐

  1. 手把手教你安装TrueNas(基础篇)

            玩过蜗牛星际,体验过黑群晖系统崩掉导致里面珍藏12t大姐姐全没了(此处有哭声),我技术又菜,自己恢复是不可能恢复的,装的盗版系统,又不可能联系群晖官方售后恢复.于是乎就想要一个稳定.开 ...

  2. 剖析 Docker Swarm 操作对容器端口影响

    剖析 Docker Swarm 操作对容器端口影响 一.背景阐述 在使用 Docker Swarm 构建集群环境过程中,于 ts3 节点出现了原有的容器端口全部失效,手动重启后才恢复的情况.期间涉及 ...

  3. MySQL 中 InnoDB 存储引擎与 MyISAM 存储引擎的区别是什么?

    MySQL 中 InnoDB 存储引擎与 MyISAM 存储引擎是两种常见的存储引擎,它们在性能.事务支持.锁机制.数据完整性等方面存在一些显著的区别.以下是它们的主要区别: 1. 事务支持 Inno ...

  4. FastAPI与Tortoise-ORM实现关系型数据库关联

    title: FastAPI与Tortoise-ORM实现关系型数据库关联 date: 2025/04/21 10:51:41 updated: 2025/04/21 10:51:41 author: ...

  5. 2025西安交大集训Day11:排列组合,扩展欧几里得,素数筛,欧拉函数,容斥原理逆元,BSGS,莫比乌斯反演,LUCAS定理

    快速幂 快速幂是我们解决中数论问题的基石让我们能以 \(O(logn)\) 的复杂度计算 \(a^n\) 快速幂的思想简单而言就是将 \(n\) 的二进制中所有的 \(1\) 代表的次幂乘起来比如计算 ...

  6. ArcGIS拼接、镶嵌同一空间位置的不同遥感影像

      本文介绍在ArcGIS下属的ArcMap软件中,对处于同一空间位置的多幅栅格图像加以拼接.融合与叠加等操作的方法.   假如现在我们分别有以下三幅栅格图像,三者分别是独立的三个图层.第一个图层如下 ...

  7. Ubuntu修改密码及密码复杂度策略设置方法

    版本查看 cat /etc/issue cat /proc/version 内核查看 uname -a Ubuntu修改密码及密码复杂度策略设置方法 一.修改密码 1.修改普通用户密码 passwd ...

  8. RandomWalk随机游走

    RandomWalk随机游走: 在自然界,物理学,生物学,化学,经济学等众多领域,随机游走都有实际的用途,例如,其可以描述一个漂浮在水滴上的花粒因受到水分子的作用力而在水滴表面随机移动.诸如此类的不规 ...

  9. 设计即合规: 开放AI生态中的用户数据治理实践

    Hugging Face Hub 已成为 AI 协作的核心平台,托管了数万个模型.数据集以及交互式应用程序 (Space). 在开放生态系统中,用户知情同意的管理方式与那些更 "数据饥渴&q ...

  10. rollup.js:下一代 JS模块打包工具解析器

    引言 在互联网技术领域,不断涌现的新技术和新理念为开发者提供了无限的可能.本文将深入探讨一系列技术话题,旨在帮助读者更好地理解这些技术,并应用于实际开发中.接下来,我们将逐步展开各个主题的讨论. 2. ...