Maak USB/IP teem

Die taak om 'n USB-toestel aan 'n afgeleë rekenaar via 'n plaaslike netwerk te koppel, ontstaan ​​gereeld. Onder die snit word die geskiedenis van my soektogte in hierdie rigting uiteengesit, en die pad na 'n klaargemaakte oplossing gebaseer op 'n oopbronprojek USB/IP met 'n beskrywing van die struikelblokke wat noukeurig deur verskeie mense op hierdie pad gestel is, asook maniere om dit te omseil.

Deel een, histories

As die masjien virtueel is - dit is alles maklik. Die funksionaliteit van USB-aanstuur van 'n gasheer na 'n virtuele masjien het in VMWare 4.1 verskyn. Maar in my geval moes die sekuriteitsleutel, herkenbaar as WIBU-KEY, op verskillende tye aan verskillende masjiene gekoppel word, en nie net virtuele masjiene nie.
Die eerste rondte soek in die verre 2009 het my gelei na 'n stuk yster genaamd TrendNet TU2-NU4
Pros:

  • soms werk dit selfs

Nadele:

  • werk nie altyd nie. Gestel die Guardant Stealth II-beskermingsleutel begin nie daardeur nie, en sweer met die fout “toestel kan nie begin word nie”.
  • Bestuursagteware (lees - monteer en ontkoppel USB-toestelle) is pateties tot die uiterste. Command line skakelaars, outomatisering - nee, het nie gehoor nie. Alles is net met die hand. Nagmerrie.
  • die beheersagteware soek die stuk yster self in die netwerk deur uit te saai, so dit werk net binne een uitsaainetwerksegment. Jy kan nie die IP-adres van die stuk yster met die hand spesifiseer nie. 'n Stuk yster in ander subnet? Dan het jy 'n probleem.
  • ontwikkelaars op die toestel behaal het, is dit nutteloos om foutverslae te stuur.

Die tweede rondte het gebeur in tye wat nie so ver nie, en het my na die onderwerp van die artikel gelei - USB/IP-projek. Lok met openheid, veral aangesien die ouens van ReactOS hulle het 'n drywer vir Windows onderteken, so nou werk alles selfs op x64 sonder enige krukke soos 'n toetsmodus. Waarvoor baie dankie aan die ReactOS-span! Alles klink pragtig, kom ons probeer dit voel, is dit regtig so? Ongelukkig is die projek self ook laat vaar, en jy kan nie op ondersteuning staatmaak nie - maar waar ons s'n nie verdwyn het nie, is die bron daar, ons sal dit uitvind!

Deel twee, bediener-linux

'n USB/IP-bediener wat USB-toestelle oor 'n netwerk deel, kan slegs op 'n Linux-gebaseerde bedryfstelsel opgestel word. Wel, Linux is Linux, so installeer op die Debian 8 virtuele masjien in die minimum konfigurasie, standaard handbeweging:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install usbip

Gevestig. Verder stel die internet voor dat u die usbip-module moet aflaai, maar - hallo, die eerste hark. Daar is nie so 'n module nie. En dit alles omdat die meeste van die handleidings op die netwerk na die ouer tak 0.1.x verwys, en in die jongste 0.2.0 het die usbip-modules verskillende name.

daarom:

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo lsmod | grep usbip

Wel, kom ons voeg die volgende reëls by /etc/modules om dit outomaties te laai wanneer die stelsel begin:

usbip-core
usbip-host
vhci-hcd

Kom ons begin die usbip-bediener:

sudo usbipd -D

Verder vertel die universele verstand vir ons dat usbip met skrifte kom wat ons toelaat om die bediener te bestuur - wys watter toestel dit oor die netwerk sal deel, sien die status, ensovoorts. Hier wag nog 'n tuingereedskap op ons - hierdie skrifte in die 0.2.x-tak is weer hernoem. Jy kan 'n lys van opdragte kry met

sudo usbip

Nadat u die beskrywing van die opdragte gelees het, word dit duidelik dat usbip sy Bus-ID wil weet om die vereiste USB-toestel te deel. Beste kykers, hark nommer drie is in die arena: die Bus ID wat ons sal gee lsusb (dit lyk die mees voor die hand liggende manier) - dit pas haar nie! Die feit is dat usbip hardeware soos USB-hubs ignoreer. Daarom sal ons die ingeboude opdrag gebruik:

user@usb-server:~$ sudo usbip list -l
 - busid 1-1 (064f:0bd7)
   WIBU-Systems AG : BOX/U (064f:0bd7)

Let wel: hierna in die lyste sal ek alles beskryf deur die voorbeeld van my spesifieke USB-sleutel te gebruik. Jou hardewarenaam en VID:PID-paar kan en sal verskil. Myne word Wibu-Systems AG genoem: BOX/U, VID 064F, PID 0BD7.

Nou kan ons ons toestel deel:

user@usb-server:~$ sudo usbip bind --busid=1-1
usbip: info: bind device on busid 1-1: complete

Hoera, kamerade!

user@usb-server:~$ sudo usbip list -r localhost
Exportable USB devices
======================
 - localhost
        1-1: WIBU-Systems AG : BOX/U (064f:0bd7)
           : /sys/devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-1
           : Vendor Specific Class / unknown subclass / unknown protocol (ff/00/ff)

Drie hoera, kamerade! Die bediener het die stuk yster oor die netwerk gedeel, en ons kan dit koppel! Dit bly net om die outostart van die usbip-demoon by /etc/rc.local te voeg

usbipd -D

Deel drie, kliënt-kant en verwarrend

Ek het probeer om die gedeelde toestel oor die netwerk dadelik aan 'n Debian-masjien op dieselfde bediener te koppel, en alles het goed gekoppel:

sudo usbip attach --remote=localhost --busid=1-1

Kom ons gaan aan na Windows. In my geval was dit Windows Server 2008R2 Standard Edition. Die amptelike gids vra jou om eers die bestuurder te installeer. Die prosedure word perfek beskryf in die readme wat aan die Windows-kliënt geheg is, ons doen alles soos dit geskryf is, alles werk uit. Op XP werk dit ook sonder enige probleme.

Nadat ons die kliënt uitgepak het, probeer ons om ons sleutel te monteer:

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip_windows.c: 756 (query_interface0) recv op_common
usbip err: usbip_windows.c: 829 (attach_device) cannot find device

O, o. Iets het verkeerd geloop. Ons gebruik die vaardigheid van Google. Daar is fragmentariese meldings dat iets fout is met die konstantes; in die bedienergedeelte het die ontwikkelaars die protokolweergawe verander toe hulle na weergawe 0.2.0 oorgeskakel het, maar hulle het vergeet om dit in die Win-kliënt te doen. Die voorgestelde oplossing is om die konstante in die bronkode te verander en die kliënt te herbou.

Maar ek wil regtig nie Visual Studio aflaai ter wille van hierdie prosedure nie. Maar ek het 'n goeie ou Hiew. In die bronkode word die konstante as 'n dubbelwoord verklaar. Kom ons kyk in die lêer vir 0x00000106, en vervang dit met 0x00000111. Onthou, greepvolgorde is omgekeer. Die resultaat is twee wedstryde, pleister:

[usbip.exe]
00000CBC: 06 11
00000E0A: 06 11

Eeeee... ja!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
new usb device attached to usbvbus port 1

Dit kon die aanbieding beëindig het, maar die musiek het nie lank gespeel nie. Nadat ek die bediener herlaai het, het ek gevind dat die toestel op die kliënt nie gemonteer is nie!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_windows.c: 829 (attach_device) cannot find device

En dit is dit. Selfs alwetende Google kon dit nie vir my beantwoord nie. En terselfdertyd wys die opdrag om toestelle beskikbaar op die bediener te vertoon heeltemal korrek - hier is dit, die sleutel, jy kan dit monteer. Ek probeer om van onder Linux af te monteer - dit werk! En as jy nou van onder Windows probeer? O shit - dit werk!

Die laaste hark: iets word nie in die bedienerkode bygevoeg nie. Wanneer 'n toestel gedeel word, lees dit nie die aantal USB-beskrywings daaruit nie. En wanneer die toestel vanaf Linux gemonteer word, word hierdie veld gevul. Ongelukkig is ek vertroud met ontwikkeling onder Linux op die "maak && maak installeer" vlak. Daarom word die probleem opgelos met 'n taamlik vuil hack - voeg by /etc/rc.local

usbip attach --remote=localhost --busid=1-1
usbip port
usbip detach --port=00

Deel finaal

Na 'n bietjie gevroetel werk dit. Die gewenste resultaat is verkry, nou kan die sleutel op enige rekenaar gemonteer word (en natuurlik ook ontkoppel), insluitend dié buite die uitsaainetwerksegment. As jy wil, kan jy dit doen met behulp van 'n dopskrif. Wat lekker is - die plesier is absoluut gratis.
Ek hoop dat my ervaring habrazhiteli sal help om die hark wat op my voorkop ingeprent het, te omseil. Dankie vir jou aandag!

Bron: will.com

Voeg 'n opmerking