Skip to content

Latest commit

 

History

History
65 lines (45 loc) · 1.82 KB

README.md

File metadata and controls

65 lines (45 loc) · 1.82 KB

usairb

⚠️ Note that usairb is currently a learning project, and that the features described here do not yet work. I keep a development log on my blog.

The goal of usairb (Universal Serial Air-Bus) is to transform any embedded Linux device with access to the Internet into a multiplexing transmitter for USB hubs: connect gadgets to it and use them remotely from your desktop.

To achieve this, usairb uses USB/IP. USB/IP follows a server-client architecture where the server or host is the device broadcasting its USB gadgets, and the client can connect to them. USB/IP is available as a native Kernel module on Linux for the host, and has multi-platform client programs.

While all planned features of usairb are achievable using just USB/IP, usairb aims to provide a no-frills experience, potentially offering both a client graphical user interface as well as very simple interface for the host device.

Development

To build the project, run make.

Dependencies:

  • make, gcc, probably other base utilities,
  • usbip

To run the USB/IP server, you'll need:

sudo modprobe usbip_host
sudo systemctl start usbipd.service

To run usairb:

sudo ./target/usairb

To see exported devices:

sudo usbip list -r localhost

To generate compile_commands.json for clangd:

make compile_commands.json

Recommended utilities

  • usbutils provides lsusb, which will be useful to debug usairb.
  • bear will allow you to run make compile_commands.json, which makes the Clang LSP recognize items in your project.