USB/IP Protocol

Docs inside Linux kernel source tree

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

Git tracked (GitHub mirror):

https://github.com/torvalds/linux/blob/master/Documentation/usb/usbip_protocol.rst

Implementations

根据协议,USB/IP 有两种角色:

USB/IP 服务器: 提供 USB 设备,通常执行 USB 设备控制器(UDC)和设备功能
USB/IP 客户端: 使用 USB 设备,通常实现 USB 主机控制器接口 (HCI)
According to the protocol, USB/IP has two roles:

  • USB/IP Server: Providing USB Devices, usually implementing USB Device Controller (UDC) and device functions
  • USB/IP Client: Using USB Devices, usually implementing USB Host Controller Interface (HCI)

USB/IP Server

There are quite a few USB/IP Server implementations, with different layers of abstraction implemented.

  • usbip-windows: https://github.com/cezanne/usbip-win
  • usbip-host.ko: Linux Kernel USB device driver, not implementing UDC or device function
  • usbip-vudc.ko: Linux Kernel virtual UDC device driver, implementing UDC, device function attached using Linux USB Gadget
  • usbip_windows: Windows USB device driver, ten years ago from USB/IP homepage, signed driver (signed by ReactOS)
  • dorssel/usbipd-win: Windows USB device driver, not implementing UDC and device function, driver from VBox, signed driver
  • cezanne/usbip-win (usbip_stub): Windows USB driver, driver self written and self signed
  • jiegec/usbip: written in Rust
    • libusb backend: as if it is a USB driver in libusb compatible platform (e.g. MacOS, BSD, Android, Haiku, Solaris)
    • device: hid keyboard
    • device: cdc acm serial
  • Sawchord/usbip-device: written in Rust
    • device: serial echo
    • device: twitching mouse
  • ellerh/softfido: written in Rust
    • device: FIDO2/U2F authenticator
  • MarkOstis/USBIP-Virtual-USB-Device: wrriten in Python
    • device: keyboard
    • device: mouse
  • Gnuk: using Chopstx, which can emulate a whole MCU
    • device: OpenPGP Card V2.0
  • canokeys/canokey-usbip: written in C
    • device: U2F / FIDO2 with ed25519 and HMAC-secret
    • device: OpenPGP Card V3.4, Supported Algorithm List
    • device: PIV (NIST SP 800-73-4)
    • device: HOTP / TOTP
  • chegewara/esp32-usbip-poc: written in C++
    • usbip client can access it via a Wifi named “esp32”
    • device: simple usb device (like serial) attached to the ESP32S2/S3 SoC (acting as a USB host)
  • Sawchord/usbip-device, trussed-dev/pc-usbip-runner and Nitrokey/nitrokey-3-firmware: written in Rust
    • device: FIDO
    • device: CCID

USB/IP Client

User space tools