Cum putem partaja dispozitive USB între două plăci Raspberry Pi?

Avantajele partajării de dispozitive USB între mai multe dispozitive sunt evidente: accesul la distanță la un element de scanare, la elemente ale interfațării cu utilizatorul (tastatură, mouse) sau chiar accesul la sisteme de stocare (USB drives). Partajarea dispozitivelor USB se realizează prin intermediul rețelei și poartă denumirea de USB over Ethernet, USB over Network sau USB over IP. Există numeroase produse comerciale (software, hardware sau combinație software și hardware) ce oferă posibilitatea de a partaja dispozitive USB între mai multe sisteme de calcul dar, în general, aceste produse au un cost destul de mare. Câteva exemple:

Industrial USB 2.0 Over IP Network 4-Port Hub – TCP/IP Network

https://www.coolgear.com/product/industrial-usb-2-0-ip-network-4-port-hub-share-usb-device-tcpip-network

USB IP Extender

http://www.digivision.it/prodotti/NTI/usb-ip-extender.html

USB over Network – USB for Remote Desktop

http://www.usb-over-network.com/

USB over Network – Share and access your USB devices over local network or Internet

http://www.usb-over-network.com/usb-over-network.html

Grație proiectului open-source USB/IP putem implementa (fără nici un cost de licențiere) o partajare de dispozitive USB între sisteme ce rulează Linux (există și portări ale proiectului pentru Windows și MacOS dar nu sunt foarte stabile). În cadrul proiectului de față vom ilustra instalarea și utilizarea acestui proiect software pe două plăci de dezvoltare Raspberry PI.

2

http://usbip.sourceforge.net/

Componentele software USB/IP permit partjarea de dispozitive USB de diverse tipuri:

  • Dispozitive de stocare USB;
  • Dispozitive de intrare (tastatură, mouse);
  • Camere video sau sisteme audio USB;
  • Imprimante, scanere și chiar interfețe de rețea.

Utilizarea dispozitivelor partajate se face utilizând driverele originale ale acestora dar se introduce un nivel suplimentar de retransmitere a mesajelor I/O specifice comunicației USB: VHCI Driver – Virtual Host Controller Interface <-> Stub Driver. Sistemul care găzduiește fizic dispozitivul USB și îl partajează în rețea joacă rolul de Server iar sistemul care instalează virtual la distanță dispozitivul USB joacă rolul de Client.

 3

 

 Instalarea și configurarea USB/IP pe o placă Raspberry PI (server)

Pentru instalarea pachetului software USB/IP se va utiliza comanda (pachetul este inclus în distribuția Raspbian 7 și 8):

sudo apt-get install usbip

Pentru a vedea toate dispozitivele USB din sistem se va utiliza comanda lsusb:

4

Vom încărca componentele driver pentru server cu ajutorul comenzii:

sudo modprobe usbip-host

după care vom putea vizualiza care din dispozitivele USB sunt vizibile pentru partajare:

sudo usbip list -l

5

Pentru pornirea componentei server vom utiliza comanda:

sudo usbipd -D

iar pentru a partaja un dispozitiv vom utiliza comanda:

sudo usbip bind -b x-x.x

unde x-x.x este indicativul dispozitivului USB dorit.

În exemplul nostru dacă dorim să partajăm dispozitivul 1-1.2 care nu este altceva decât un stick USB vom da comanda:

sudo usbip bind -b 1-1.2

și vom putea verifica disponibilitatea lui cu ajutorul comenzii:

sudo usbip list -r xxx.xxx.xxx.xxx

unde xxx.xxx.xxx.xxx este adresa de rețea IP a sistemului.

6

 

Instalarea și configurarea USB/IP pe o placă Raspberry Pi (client)

La fel ca și în cazul sistemului server se va instala pachetul software USB/IP:

sudo apt-get install usbip

Pentru a vedea dispozitivele partajate de sistemul server se folosește comanda:

sudo usbip list -r xxx.xxx.xxx.xxx

unde xxx.xxx.xxx.xxx este adresa IP a sistemului server.

”Conectarea” dispozitivului USB presupune încărcarea driverului VHCI:

sudo modeprobe vhci-hcd

și atașarea propriu-zisă a dispozitivului:

sudo usbip attach –host xxx.xxx.xxx.xxx –busid x-x.x

Dacă atașarea s-a realizat cu succes dispozitivul USB se va putea vizualiza cu ajutorul comenzii lsusb.

7

În cadrul exemplului nostru, fiind vorba de un dispozitiv de stocare USB, dispozitivul se va putea utiliza ca și cum ar fi conectat local. Se va verifica identificarea ca și dispozitiv de stocare cu ajutorul comenzii:

ls -l /dev/disk/by-uuid/

8

și se va putea monta în cadrul sistemului local de fișiere:

sudo mkdir /mnt/usb

sudo mount /dev/sda /mnt/usb

Testarea configurației prezentate s-a făcut pe două plăci Raspberry Pi rulând Raspbian GNU/Linux 8 (jessie), kernel 4.4.45-v7+, și usbip 2.0+3.16.7-ckt20-1.

O alternativă comercială la proiectul USB/IP este VirtualHere USB Server. Acest produs comercial are componentă binară server specială pentru placa Raspberry Pi, client pentru mai multe sisteme de operare (inclusiv Windows) și poate fi utilizat și în variantă trial (se poate partaja un singur dispozitiv USB și se va afișa o fereastră de avertizare la fiecare utilizare).

9

https://virtualhere.com/

Pentru instalarea acestui produs comercial se poate vedea tutorialul:

VirtualHere with Raspberry Pi as USB server

http://vmwarebits.com/content/virtualhere-raspberry-pi-usb-server