USBIP技术简介

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 整体架构](https://www.usbzh.com/article/detail-320.html) ## 5. 修改记录 2025-06-16 V1.0 初稿

相关推荐
叶余2 天前
USB工程应用基础概念简介
usb
zgyrelax_zgykill16 天前
USB子系统和type-c接口快速理解
usb·typec
读书札记20221 个月前
Windows 查看电脑是否插拔过U盘
windows·电脑·usb
无聊到发博客的菜鸟2 个月前
STM32实现SPI转USB虚拟串口输出(实测40M时钟不丢包)
stm32·嵌入式·usb·spi·虚拟串口
ansondroider2 个月前
Android RK356X TVSettings USB调试开关
android·adb·usb·otg·rk356x
正点原子2 个月前
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB测试 #USB HOST #USB 鼠标
linux·功能测试·stm32·嵌入式硬件·计算机外设·usb
打工人你好2 个月前
USB(通用串行总线)数据传输机制和包结构简介
usb
Ronin-Lotus3 个月前
嵌入式硬件篇---USB&UART串口
嵌入式硬件·c·uart·usb
lindorx3 个月前
记一次误禁用USB导致键盘鼠标失灵的修复过程
windows·计算机外设·注册表·usb·hotpe