Kjo Ă«shtĂ« njĂ« problem i zakonshĂ«m: lidhja e njĂ« pajisje USB me njĂ« PC tĂ« largĂ«t pĂ«rmes njĂ« rrjeti lokal. NĂ« kĂ«tĂ« artikull, do tĂ« ndaj histori tĂ« kĂ«rkimeve tĂ« mia nĂ« kĂ«tĂ« drejtim dhe rrugĂ«n drejt njĂ« zgjidhjeje tĂ« gatshme bazuar nĂ« njĂ« projekt open-source. me pĂ«rshkrimin e pengesave qĂ« janĂ« vendosur me kujdes nga individĂ« tĂ« ndryshĂ«m gjatĂ« kĂ«tij procesi, si dhe mĂ«nyrave pĂ«r tâi kapĂ«rcyer ato.
Pjesa e parë, historike
Nëse kompjuteri është virtual, kjo nuk është e komplikuar. Funksionaliteti i kalimit të USB nga hosti në virtual machine është prezantuar që në VMware 4.1. Por për rastin tim, çelësi i mbrojtjes, i njohur si WIBU-KEY, duhej të lidhej në momente të ndryshme me makina të ndryshme, jo vetëm virtuale.
Gjetja e parë në vitin 2009 më çoi te një pajisje të quajtur
Avantazhet:
- ndonjëherë funksionon
Disavantazhet:
- nuk funksionon gjithmonë. Për shembull, çelësi i mbrojtjes Guardant Stealth II nuk aktivizohet përmes saj dhe jep një gabim "pajisja nuk mund të iniciohet".
- Programi pĂ«r menaxhimin (lexo â montimin dhe çmontimin e pajisjeve USB) Ă«shtĂ« ekstremisht i varfĂ«r. ĂelĂ«sat e komandave, automatizimi â jo, nuk kanĂ« dĂ«gjuar pĂ«r to. Ădo gjĂ« bĂ«het vetĂ«m me duar. NjĂ« tmerr.
- software-i menaxhon që kërkon harduerin në rrjet përmes transmetimit, prandaj funksionon vetëm brenda një segmenti të vetëm transmetimi. Nuk është e mundur të specifikoni adresën IP të harduerit manualisht. Hardueri në një subnet tjetër? Atëherë keni problem.
- zhvilluesit e lanë pajisjen, dërgimi i raportimeve të defekteve është i kotë.
Rruga e dytĂ« ndodhi nĂ« kohĂ« qĂ« nuk ishin aq tĂ« largĂ«ta, dhe mĂ« çoi nĂ« temĂ«n e artikullit â . TĂ«rheq me hapjen e saj, sidomos qĂ« ekipi nga firmosi njĂ« drejtues pĂ«r Windows, kĂ«shtu qĂ« tani madje edhe nĂ« x64 gjithçka funksionon pa asnjĂ« ndihmĂ« siç Ă«shtĂ« mode eksperimental. Faleminderit shumĂ« ekipit tĂ« ReactOS! DĂ«gjohet bukur, le tĂ« provojmĂ« ta prekim, a Ă«shtĂ« ashtu nĂ« tĂ« vĂ«rtetĂ«? FatkeqĂ«sisht, edhe projekti Ă«shtĂ« paksa i braktisur, dhe nuk mund tĂ« llogaritni nĂ« mbĂ«shtetje â por ku tĂ« çojmĂ«, burimi ka dalĂ«, do e zgjidhim!
Pjesa e dytë, serveri-linux
Serveri USB/IP që ndan pajisjet USB përmes rrjetit mund të ngrihet vetëm në sistemet operative të bazuara në Linux. Atëherë, Linux është Linux, do ta instalojmë në një makinë virtuale Debian 8 në konfigurim minimal, lëvizja standarde me dorë:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install usbipKemi instaluar. MĂ« pas interneti na tregon se duhet tĂ« ngarkohet moduli usbip, por â pĂ«rshĂ«ndetje, duham tĂ« pĂ«rballim pengesat e para. Nuk ka njĂ« modul tĂ« tillĂ«. Dhe kjo ndodh sepse shumica e udhĂ«zimeve nĂ« internet i pĂ«rkasin njĂ« dege mĂ« tĂ« vjetĂ«ruar 0.1.x, ndĂ«rsa nĂ« degen mĂ« tĂ« fundit 0.2.0, modulat usbip kanĂ« emra tĂ« ndryshĂ«m.
Prandaj:
sudo modprobe usbip-core
sudo modprobe usbip-host
sudo lsmod | grep usbipPo ashtu, do të shtojmë këto rreshta në /etc/modules për t'i ngarkuar automatikisht gjatë fillimit të sistemit:
usbip-core
usbip-host
vhci-hcdTĂ« nisim serverin usbip:
sudo usbipd -DMĂ« pas, mendja globale na sugjeron se me usbip vijnĂ« skriptet qĂ« na lejojnĂ« tĂ« menaxhojmĂ« serverin â tĂ« tregojmĂ« cilin pajisje do tĂ« ndajnĂ« nĂ« rrjet, tĂ« shohim statusin, dhe kĂ«shtu me radhĂ«. KĂ«tu na pret njĂ« tjetĂ«r vegĂ«l kopshtarie â kĂ«to skripte nĂ« degĂ«n 0.2.x, gjithashtu, janĂ« ribĂ«rĂ«. TĂ« marrim njĂ« listĂ« komandash mund tĂ« bĂ«het pĂ«rmes
sudo usbipPas leximit të përshkrimit të komandave, bëhet e qartë se për të ndarë pajisjen USB të nevojshme, usbip dëshiron të dijë Bus ID-në e saj. Të nderuar shikues, në arenë është pengesa e tretë: ai Bus ID që do të na japë lsusb (duhet të duket të jetë rruga më e dukshme) - ajo nuk i përshtatet! Problemi është se pajisjet si hapat USB, usbip, i injoron. Prandaj, do të përdorim komandën e integruar:
user@usb-server:~$ sudo usbip list -l
- busid 1-1 (064f:0bd7)
WIBU-Systems AG : BOX/U (064f:0bd7)Shënim: këtu dhe më tej në listime do ta përshkruaj gjithçka me shembullin e çelësit tim specifik USB. Emrat e pajisjeve tuaja dhe disa VID:PID mund të ndryshojnë. E imja quhet Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.
Tani mund të ndahet pajisja jonë:
user@usb-server:~$ sudo usbip bind --busid=1-1
usbip: info: bind device on busid 1-1: completeUrra, shokë!
user@usb-server:~$ sudo usbip list -r localhost
Pajisjet USB të eksportueshme
======================
- 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
: Klasë Specifike të Prodhuesit / nënspecifik i panjohur / protokolli i panjohur (ff/00/ff)Urra tri herë, shokë! Serveri ka ndarë pajisjen përmes rrjetit dhe tani mund ta lidhim atë! Tani na mbetet vetëm të shkruajmë autostart-in e demonit usbip në /etc/rc.local
usbipd -DPjesa e tretë, klienti dhe e ndërlikuar
Kam provuar të lidhem me pajisjen e ndarë në rrjet në makinë duke përdorur Debian, dhe gjithçka u lidh shumë mirë:
sudo usbip attach --remote=localhost --busid=1-1Kalim një hap drejt Windows. Në rastin tim, ishte Windows Server 2008R2 Standard Edition. Udhëzimi zyrtar kërkon që së pari të instalohet drajveri. Procedura përshkruhet për mrekulli në readme të bashkangjitur me klientin windows, bëjmë gjithçka siç është shkruar, gjithçka funksionon. Po ashtu funksionon pa asnjë vështirësi edhe në XP.
Pas shpërndarjes së klientit, provoni të montoni çelësin tonë:
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) nuk mund të gjendet pajisjaOj-oj. Diçka nuk shkoi siç duhet. Po përdorim aftësinë tonë për të gjetur në Google. Gjejmë përmendje të shpërndara që diçka nuk është në rregull me konstantat, në anën e serverit, zhvilluesit gjatë kalimit në versionin 0.2.0 e kanë ndryshuar versionin e protokollit, por në klientin nën Win këtë e kanë harruar. Zgjidhja e propozuar është të ndryshoni konstantën në burim dhe të rindërtoni klientin.
VetĂ«m se nuk dĂ«shiroj aspak tĂ« shkarkoj Visual Studio pĂ«r kĂ«tĂ« procedurĂ«. Por kam Hiew-in e vjetĂ«r e tĂ« mirĂ«s. NĂ« burim, konstanta Ă«shtĂ« shpallur si njĂ« fjalĂ« e dyfishtĂ«. Do tĂ« kĂ«rkojmĂ« nĂ« skedarin 0x00000106, duke e zĂ«vendĂ«suar me 0x00000111. Mos harro, rendi i bajtĂ«ve Ă«shtĂ« mbrapsht. Nga pĂ«rfundimi â dy pĂ«rputhje, po e patch-up:
[usbip.exe]
00000CBC: 06 11
00000E0A: 06 11Eeeee⊠po!
C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
dispozitiv i ri USB u lidhur me portin usbvbus 1Këtu mund të përfundoja përshkrimin, por muzika nuk zgjati shumë. Pas rinisjes së serverit, zbulova se pajisja në klient nuk po montonte!
C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_windows.c: 829 (attach_device) nuk mund tĂ« gjejĂ« pajisjenDhe kaq. As even google i ditur nuk mund tĂ« mĂ« pĂ«rgjigjet pĂ«r kĂ«tĂ«. Dhe megjithatĂ«, komanda pĂ«r tĂ« treguar pajisjet e disponueshme nĂ« server Ă«shtĂ« plotĂ«sisht korrekte â ja, çelĂ«si, mund ta montoni. Provoj ta montoja nga Linux â funksionon! Por çfarĂ« ndodh nĂ«se provoj nga Windows? O tmerr â funksionon!
Pengesat e fundit: ndonjĂ« gjĂ« nĂ« kodin e serverit nuk Ă«shtĂ« shkruar plotĂ«sisht. Kur ndan pajisjen, ai nuk lexon numrin e USB-descriptorĂ«ve prej saj. NdĂ«rsa kur montohet pajisja nga Linux, ky fushĂ« mbushet. FatkeqĂ«sisht, njohuritĂ« e mia pĂ«r zhvillimin nĂ«n Linux janĂ« nĂ« nivelin e «make && make install». Prandaj, problemi u zgjidh me njĂ« hack mjaft tĂ« ndyrĂ« â duke shtuar nĂ« /etc/rc.local
usbip attach --remote=localhost --busid=1-1
usbip port
usbip detach --port=00Pjesa përfundimtare
Pas disa peripecish, kjo funksionon. ĂelĂ«si i dĂ«shiruar Ă«shtĂ« tani i mundur pĂ«r t'u lidhur me çdo PC (dhe sigurisht edhe pĂ«r t'u çmontuar), pĂ«rfshirĂ« â jashtĂ« segmentit tĂ« transmetimit tĂ« rrjetit. NĂ«se dĂ«shiron â mund ta bĂ«sh kĂ«tĂ« me njĂ« skript tĂ« komandĂ«s. E mira Ă«shtĂ« â kĂ«naqĂ«sia Ă«shtĂ« krejtĂ«sisht falas.
Shpresoj që përvoja ime do t'i ndihmojë përdoruesit e Habr të kalojnë këto pengesa që më kanë lënë shenjë në ballë. Faleminderit për vëmendjen!
Burimi: habr.com
