Close
0%
0%

USB/IP EZ

Create a usbipd server and nice gui client interface

Public Chat
Similar projects worth following
This project has two parts with three goals

The server side:
The first part of the server software is to create a sort of usbipd like server but with automatic binding or client side controlled binding, the intent is make it easy for users to install on embedded linux devices such as the orange pi zero or rpi zero w that can be on hand.
The second server goal is to create an open hardware (but sold ready to go) device without linux that is specialized in automatically binding usb devices plugged into it and exposing them over its server.

And a client side:
The client is a GUI application that when run automatically makes sure that the linux kernel modules are added, and then uses multicast to find server devices, it then attaches those server usb devices automatically or with gui client control.

This project is opened to all to assist, just make merge requests to the relevant github projects.

I have a Qt WebEngine app with react gui and a js bridge that runs as a usbip client, on the server side is also a qt app just a server to add all the network control parts that I found I wanted (such as multicast discovery). 

qusbip.deb

binary-package - 605.06 kB - 03/20/2021 at 21:21

Download

qusbipserver_amd64.deb

binary-package - 31.43 kB - 03/20/2021 at 21:19

Download

qusbipserver_armel.deb

binary-package - 31.46 kB - 03/20/2021 at 21:19

Download

qusbipserver_armhf.deb

binary-package - 30.95 kB - 03/20/2021 at 21:19

Download

qusbipserver_arm64.deb

binary-package - 29.12 kB - 03/20/2021 at 21:19

Download

  • ubuntu and debian diverged packages

    Dice Wasser03/20/2021 at 21:25 0 comments

    Found out that Ubuntu and Debian have diverged in base packages, updated the debian control and added the armel based docker for cross compiling.

  • Hardware discovery

    Dice Wasser02/03/2020 at 08:56 0 comments

    Started looking into my dream hardware for this project,
    it would probably be an AllWinner A13 based sbc with an embedded rtl8192cu on one of the usb bus and just a host connector on the other.  The reason I went with the RTL8192CU so far is because not many people like the allwinner network stack on the orange pi zero, also I like the low profile quad flat pack because I can solder it myself.
    I was looking into STM32F7 and it only has 1 USB HS bus (and 1 FS bus) wile the A13 has 2 HS buses.
    Also I wanted a USB based wifi stack because SDIO bus based stacks does not reach wifi speeds.
    The other option being rocketchip with usb 3 as a future iteration

View all 2 project logs

  • 1
    How to build

    So you need a host (one that you physically plug the usb device in) and a client (where you share the device to)

    on the host you install the server software
    Go to The github page and download the correct package for your hardware

    sudo apt install qusbipserver_<arch>.deb

    where arch is the architecture of your host (raspberry pi 2 is armhf, rpi 1 is armel, raspberry pi 3 & 4 is usually arm64, and a desktop computer is generally amd64

    and on the client (which I only built for intel/amd 64 bit) go to https://github.com/dicetrash/qusbip/releases and load either the debian package if you have debian based distro (like ubuntu) or arch.  You should generally be familiar with your package manager
    so

    sudo pacman -U qusbip.pkg.tar.gz
    on arch based and
    sudo apt install ./qusbip.deb
    on debian based distros

    for debian based I start the service for you
    for arch then run sudo systemctl start qusbipserver

View all instructions

Enjoy this project?

Share

Discussions

NightSpirit2099 wrote 10/07/2022 at 13:12 point

Have you thought about making a second Pi zero to act like a client, forwarding the usb/ip atach to a physical usb port on the client?

  Are you sure? yes | no

Open Source Ecology wrote 11/02/2020 at 00:02 point

I hope this project revives the USB/IP Project. I'd like to use this for remote control of cameras for live stream and time lapse in an Open Source Film Studio - https://docs.google.com/presentation/d/1-Kwsd3S_4gD2LdPW7G7RkY3GpBdTN23PTxGbvYSk5VM/edit#slide=id.ga6a0c4e6d6_0_0

  Are you sure? yes | no

Rogan Dawes wrote 07/13/2020 at 15:31 point

I like this project, I'm actually looking to do something related, so I thought bouncing ideas around could be useful.

From my understanding, the standard Linux usbip server is actually sufficient, if you add some udev rules to bind and unbind devices as they are plugged and removed. A simple match on the bus/port intended to be relayed should be enough, from what I can tell. The only complexity is handling the different USB standards, as USB 1 and USB 2 present as different busses. Not a big deal, of course. Advertising can probably be achieved with simple Avahi/Bonjour multicast DNS-Service Discovery advertisements.

The more interesting/difficult side is the client, I think. My requirement is for a Windows client, but the idea's should be cross platform.

I'm less concerned about a GUI and autodiscovery, and more interested in the automatic binding of devices as they are added to the server. It seems to me that once the usbip client is connected to the server, it could simply poll periodically for new or removed devices (`usbip list -r serverip -p`) and update its bindings. Is this essentially what you implemented in your client? 

  Are you sure? yes | no

Dice Wasser wrote 08/30/2020 at 05:47 point

When a usb device is attached a udev rule gets run, here the example of where I setup a udev monitor on the server side and the server would then go and send attached clients the message
https://github.com/dicetrash/qusbipserver/blob/master/udevmonitor.cpp#L14
There are a couple windows clients with usbip but for windows they require signed drivers so thats generally something nobody wants to sink giving microsoft their money into.
The standard usbip message protocol contains info about what standard is attached.
also yes I too chose multicast, no need for dns just general broadcast and discovery
https://github.com/dicetrash/qusbipserver/blob/master/grouplistener.cpp#L80

  Are you sure? yes | no

Rogan Dawes wrote 08/30/2020 at 08:22 point

Thanks for the response. There are a couple of Windows clients that have got their builds signed, I think. So submitting a feature request there seems like the best approach.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates