Taming USB/IP

Reglulega kemur upp það verkefni að tengja USB tæki við ytri tölvu í gegnum staðarnet. Undir skurðinum er saga leitar minnar í þessa átt sett fram og leiðin að tilbúinni lausn byggða á opnu verkefni USB/IP með lýsingu á þeim hindrunum sem ýmsir hafa vandlega sett á þessa braut, auk leiða til að komast framhjá þeim.

Fyrsti hluti, sögulegur

Ef vélin er sýndarvél - allt er þetta auðvelt. Virkni USB-framsendingar frá hýsil í sýndarvél birtist í VMWare 4.1. En í mínu tilviki þurfti öryggislykillinn, auðþekkjanlegur sem WIBU-KEY, að vera tengdur á mismunandi tímum við mismunandi vélar, en ekki aðeins sýndarvélar.
Fyrsta leitarlotan í fjarlægri 2009 leiddi mig að járnstykki sem heitir TrendNet TU2-NU4
Kostir:

  • stundum virkar það jafnvel

Gallar:

  • virkar ekki alltaf. Segjum sem svo að Guardant Stealth II verndarlykillinn byrji ekki í gegnum hann og blóti með villunni „Ekki er hægt að ræsa tækið“.
  • Stjórnunarhugbúnaður (lesa - upp og taka USB tæki upp) er ömurlegur til hins ýtrasta. Skipanalínurofar, sjálfvirkni - nei, hef ekki heyrt. Allt er bara í höndunum. Martröð.
  • stýrihugbúnaðurinn leitar að járnstykkinu sjálfu í netinu með því að senda út, þannig að þetta virkar aðeins innan eins útvarpsnetshluta. Þú getur ekki tilgreint IP tölu járnstykkisins með höndunum. Járnstykki í öðru undirneti? Þá ertu í vandræðum.
  • þróunaraðilar skoruðu á tækinu, það er gagnslaust að senda villutilkynningar.

Önnur umferð gerðist á tímum ekki svo fjarlægum og leiddi mig að efni greinarinnar - USB/IP verkefni. Laðar að með hreinskilni, sérstaklega þar sem krakkar frá ReactOS þeir skrifuðu undir driver fyrir Windows, svo nú virkar allt jafnvel á x64 án hækja eins og prófunarham. Fyrir það þakka ég ReactOS teyminu! Allt hljómar fallega, við skulum reyna að finna það, er það virkilega svo? Því miður er verkefnið sjálft líka yfirgefið og þú getur ekki treyst á stuðning - en þar sem okkar hvarf ekki, þá er uppspretta þess, við munum finna það út!

Hluti tvö, server-linux

USB/IP miðlara sem deilir USB tækjum yfir net er aðeins hægt að setja upp á Linux-undirstaða stýrikerfi. Jæja, Linux er Linux, svo settu upp á Debian 8 sýndarvélinni í lágmarksstillingu, venjulegri handhreyfingu:

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

Settist. Ennfremur bendir internetið til þess að þú þyrftir að hlaða niður usbip-einingunni, en - halló, fyrsta hrífan. Það er engin slík eining. Og allt vegna þess að flestar handbækur á netinu vísa til eldri útibúsins 0.1.x og í nýjustu 0.2.0 heita usbip einingarnar mismunandi nöfn.

Því:

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

Jæja, við skulum bæta eftirfarandi línum við /etc/modules til að hlaða þeim sjálfkrafa við ræsingu kerfisins:

usbip-core
usbip-host
vhci-hcd

Byrjum usbip þjóninn:

sudo usbipd -D

Ennfremur segir alheimshugurinn okkur að usbip kemur með forskriftum sem gera okkur kleift að stjórna þjóninum - sýna hvaða tæki það mun deila yfir netið, sjá stöðuna, og svo framvegis. Hér bíður okkar annað garðverkfæri - þessi forskrift í 0.2.x greininni, aftur, hefur verið endurnefna. Þú getur fengið lista yfir skipanir með

sudo usbip

Eftir að hafa lesið lýsinguna á skipunum verður ljóst að til að deila nauðsynlegu USB tæki, vill usbip vita Bus ID þess. Kæru áhorfendur, hrífa númer þrjú er á vettvangi: Bus ID sem mun gefa okkur lsusb (það virðist vera augljósasta leiðin) - það hentar henni ekki! Staðreyndin er sú að usbip hunsar vélbúnað eins og USB hubbar. Þess vegna munum við nota innbyggðu skipunina:

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

Athugið: Hér á eftir í skráningunum mun ég lýsa öllu með því að nota dæmið um sérstaka USB lykilinn minn. Vélbúnaðarnafnið þitt og VID:PID parið getur verið mismunandi. Mitt heitir Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

Nú getum við deilt tækinu okkar:

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

Húrra, félagar!

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)

Þrjú skál, félagar! Miðlarinn deildi járnstykkinu yfir netið og við getum tengt það! Það er aðeins eftir að bæta sjálfvirkri ræsingu usbip púkans við /etc/rc.local

usbipd -D

Þriðji hluti, viðskiptavinur og ruglingslegur

Ég reyndi að tengja samnýtta tækið yfir netið við Debian vél strax á sama netþjóni og allt tengdist vel:

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

Við skulum halda áfram í Windows. Í mínu tilviki var það Windows Server 2008R2 Standard Edition. Opinberi handbókin biður þig um að setja upp ökumanninn fyrst. Aðferðinni er fullkomlega lýst í readme sem fylgir Windows viðskiptavinnum, við gerum allt eins og það er skrifað, allt gengur upp. Á XP virkar það líka án vandræða.

Eftir að viðskiptavinurinn hefur verið pakkaður upp reynum við að setja lykilinn okkar upp:

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

Ó ó. Eitthvað fór úrskeiðis. Við notum hæfileika Google. Það eru brotakennd minnst á að eitthvað sé athugavert við fastana; í miðlarahlutanum breyttu þróunaraðilar samskiptareglur þegar þeir skiptu yfir í útgáfu 0.2.0, en þeir gleymdu að gera þetta í Win biðlaranum. Fyrirhuguð lausn er að breyta fastanum í frumkóðanum og endurbyggja biðlarann.

En ég vil virkilega ekki hlaða niður Visual Studio vegna þessarar aðferðar. En ég á gamla góða Hiew. Í frumkóðanum er fastinn lýst yfir sem tvöfalt orð. Við skulum leita í skránni fyrir 0x00000106 og skipta því út fyrir 0x00000111. Mundu að bæta röð er snúið við. Niðurstaðan er tvær viðureignir, plástur:

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

Eeeee... já!

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

Þetta hefði getað bundið enda á kynninguna en tónlistin lék ekki lengi. Eftir að hafa endurræst þjóninn fann ég að tækið á biðlaranum er ekki tengt!

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

Og þannig er það. Jafnvel alvitur Google gat ekki svarað þessu fyrir mig. Og á sama tíma sýnir skipunin til að sýna tæki sem eru tiltæk á þjóninum alveg rétt - hér er það, lykillinn, þú getur sett hann upp. Ég reyni að tengja undir Linux - það virkar! Og ef nú reyna frá undir Windows? Ó shit - það virkar!

Síðasta hrífan: eitthvað er ekki bætt við netþjónskóðann. Þegar tæki er deilt les það ekki fjölda USB-lýsingar frá því. Og þegar tækið er sett upp undir Linux er þetta reit fyllt út. Því miður kannast ég við þróun undir Linux á „gera && gera upp“ stigi. Þess vegna er vandamálið leyst með frekar óhreinum hakki - bæta við /etc/rc.local

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

Úrslitahluti

Eftir smá pæling þá virkar þetta. Æskileg niðurstaða hefur náðst, nú er hægt að festa lykilinn á hvaða tölvu sem er (og aftengja hann auðvitað líka), þar með talið þær sem eru utan útsendingarkerfisins. Ef þú vilt geturðu gert það með skeljaforskrift. Það sem er gott - ánægjan er algjörlega ókeypis.
Ég vona að reynsla mín muni hjálpa habrazhiteli að komast í kringum hrífuna sem prentaði á ennið á mér. Takk fyrir athyglina!

Heimild: www.habr.com

Bæta við athugasemd