RegulÄri rodas uzdevums savienot USB ierÄ«ci ar attÄlo datoru, izmantojot vietÄjo tÄ«klu. Zem griezuma ir izklÄstÄ«ta manu meklÄjumu vÄsture Å”ajÄ virzienÄ un ceļŔ uz gatavu risinÄjumu, kura pamatÄ ir atvÄrtÄ pirmkoda projekts.
PirmÄ daļa, vÄsturiska
Ja maŔīna ir virtuÄla - tas viss ir vienkÄrÅ”i. VMWare 4.1 parÄdÄ«jÄs USB pÄrsÅ«tÄ«Å”anas no resursdatora uz virtuÄlo maŔīnu funkcionalitÄte. Bet manÄ gadÄ«jumÄ droŔības atslÄga, kas atpazÄ«stama kÄ WIBU-KEY, bija jÄpievieno dažÄdos laikos dažÄdÄm maŔīnÄm, un ne tikai virtuÄlajÄm.
PirmÄ meklÄÅ”anas kÄrta tÄlajÄ 2009. gadÄ noveda mani pie dzelzs gabala, ko sauca
Plusi:
- dažreiz tas pat darbojas
MÄ«nusi:
- ne vienmÄr darbojas. PieÅemsim, ka Guardant Stealth II aizsardzÄ«bas atslÄga netiek palaista caur to, zvÄrÄjot ar kļūdu āierÄ«ci nevar palaistā.
- PÄrvaldÄ«bas programmatÅ«ra (lasi - USB ierÄ«Äu uzstÄdÄ«Å”ana un atvienoÅ”ana) ir nožÄlojama lÄ«dz galÄjÄ«bai. Komandrindas slÄdži, automatizÄcija - nÄ, nav dzirdÄts. Viss ir tikai ar rokÄm. Murgs.
- vadÄ«bas programmatÅ«ra tÄ«klÄ ar apraidi meklÄ paÅ”u dzelzs gabalu, tÄpÄc tas darbojas tikai vienÄ apraides tÄ«kla segmentÄ. Ar roku nevar norÄdÄ«t dzelzs gabala IP adresi. Dzelzs gabals citÄ apakÅ”tÄ«klÄ? Tad jums ir problÄma.
- izstrÄdÄtÄji ieguva punktus ierÄ«cÄ, ir bezjÄdzÄ«gi sÅ«tÄ«t kļūdu ziÅojumus.
OtrÄ kÄrta notika ne tik tÄlajos laikos, un noveda mani pie raksta tÄmas -
OtrÄ daļa, serveris-linux
USB/IP serveri, kas tÄ«klÄ koplieto USB ierÄ«ces, var iestatÄ«t tikai operÄtÄjsistÄmÄ, kuras pamatÄ ir Linux. Nu, Linux ir Linux, tÄpÄc instalÄjiet Debian 8 virtuÄlajÄ maŔīnÄ minimÄlajÄ konfigurÄcijÄ, standarta rokas kustÄ«bÄ:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install usbip
ApmetÄs. TÄlÄk internets liek domÄt, ka bÅ«tu jÄielÄdÄ usbip modulis, bet - sveiks, pirmais grÄbeklis. TÄda moduļa nav. Un viss tÄpÄc, ka lielÄkÄ daļa tÄ«kla rokasgrÄmatu attiecas uz vecÄku filiÄli 0.1.x, un jaunÄkajÄ versijÄ 0.2.0 usbip moduļiem ir dažÄdi nosaukumi.
TÄpÄc:
sudo modprobe usbip-core
sudo modprobe usbip-host
sudo lsmod | grep usbip
Nu, pievienosim Å”Ädas rindas /etc/modules, lai tÄs automÄtiski ielÄdÄtu sistÄmas startÄÅ”anas laikÄ:
usbip-core
usbip-host
vhci-hcd
SÄksim usbip serveri:
sudo usbipd -D
TurklÄt universÄlais prÄts mums saka, ka usbip ir aprÄ«kots ar skriptiem, kas ļauj mums pÄrvaldÄ«t serveri - parÄdÄ«t, kuru ierÄ«ci tas kopÄ«gos tÄ«klÄ, redzÄt statusu utt. Å eit mÅ«s sagaida vÄl viens dÄrza rÄ«ks - Å”ie skripti 0.2.x filiÄlÄ atkal ir pÄrdÄvÄti. JÅ«s varat iegÅ«t komandu sarakstu ar
sudo usbip
Izlasot komandu aprakstu, kļūst skaidrs, ka, lai koplietotu nepiecieÅ”amo USB ierÄ«ci, usbip vÄlas uzzinÄt savu Bus ID. CienÄ«jamie skatÄ«tÄji, arÄnÄ ir treÅ”ais grÄbeklis: autobusa ID, kas mums dos lsusb (tas varÄtu Ŕķist visredzamÄkais veids) - tas viÅai neder! Fakts ir tÄds, ka usbip ignorÄ aparatÅ«ru, piemÄram, USB centrmezglus. TÄpÄc mÄs izmantosim iebÅ«vÄto komandu:
user@usb-server:~$ sudo usbip list -l
- busid 1-1 (064f:0bd7)
WIBU-Systems AG : BOX/U (064f:0bd7)
PiezÄ«me: turpmÄk sarakstos es visu aprakstÄ«Å”u, izmantojot manas konkrÄtÄs USB atslÄgas piemÄru. JÅ«su aparatÅ«ras nosaukums un VID:PID pÄris var atŔķirties un atŔķirties. ManÄjais saucas Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.
Tagad mÄs varam koplietot mÅ«su ierÄ«ci:
user@usb-server:~$ sudo usbip bind --busid=1-1
usbip: info: bind device on busid 1-1: complete
UrÄ, biedri!
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)
TrÄ«s gaviles, biedri! Serveris dalÄ«ja dzelzs gabalu tÄ«klÄ, un mÄs varam to savienot! Atliek tikai pievienot usbip dÄmona automÄtisko palaiÅ”anu mapÄ /etc/rc.local
usbipd -D
TreÅ”Ä daļa, no klienta puses un mulsinoÅ”a
Es mÄÄ£inÄju tÄ«klÄ savienot koplietoto ierÄ«ci ar Debian maŔīnu uzreiz tajÄ paÅ”Ä serverÄ«, un viss tika izveidots labi:
sudo usbip attach --remote=localhost --busid=1-1
PÄriesim pie Windows. ManÄ gadÄ«jumÄ tas bija Windows Server 2008R2 Standard Edition. OficiÄlajÄ rokasgrÄmatÄ vispirms ir jÄinstalÄ draiveris. ProcedÅ«ra ir lieliski aprakstÄ«ta windows klientam pievienotajÄ readme, darÄm visu kÄ rakstÄ«ts, viss izdodas. Uz XP tas arÄ« darbojas bez problÄmÄm.
PÄc klienta izpakoÅ”anas mÄs cenÅ”amies uzstÄdÄ«t mÅ«su atslÄgu:
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
Ak, ak. Kaut kas nogÄja greizi. MÄs izmantojam Google prasmes. Ir fragmentÄri pieminÄti, ka kaut kas nav kÄrtÄ«bÄ ar konstantÄm, servera daÄ¼Ä izstrÄdÄtÄji mainÄ«ja protokola versiju, pÄrejot uz versiju 0.2.0, bet viÅi aizmirsa to izdarÄ«t Win klientÄ. PiedÄvÄtais risinÄjums ir mainÄ«t konstanti avota kodÄ un atjaunot klientu.
Bet es patieÅ”Äm nevÄlos lejupielÄdÄt Visual Studio Ŕīs procedÅ«ras dÄļ. Bet man ir vecs labais Hiew. Avota kodÄ konstante tiek deklarÄta kÄ dubultvÄrds. ApskatÄ«sim failÄ 0x00000106, aizstÄjot to ar 0x00000111. Atcerieties, ka baitu secÄ«ba ir apgriezta. RezultÄts ir divi maÄi, ielÄps:
[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
Ar to prezentÄcija varÄja beigties, taÄu mÅ«zika ilgi neatskanÄja. PÄc servera pÄrstartÄÅ”anas es atklÄju, ka klienta ierÄ«ce nav uzstÄdÄ«ta!
C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_windows.c: 829 (attach_device) cannot find device
Un tas arÄ« viss. Pat visu zinoÅ”ais Google nevarÄja man uz to atbildÄt. Un tajÄ paÅ”Ä laikÄ komanda parÄdÄ«t serverÄ« pieejamÄs ierÄ«ces diezgan pareizi parÄda - Å”eit tas ir, atslÄga, jÅ«s varat to uzstÄdÄ«t. MÄÄ£inu montÄt no Linux - darbojas! Un ja tagad mÄÄ£inÄtu no Windows? Ak sÅ«ds - tas darbojas!
PÄdÄjais grÄbeklis: kaut kas nav pievienots servera kodÄ. KopÄ«gojot ierÄ«ci, tÄ nenolasa no tÄs USB deskriptoru skaitu. Un, uzstÄdot ierÄ«ci no Linux, Å”is lauks tiek aizpildÄ«ts. DiemžÄl esmu iepazinies ar Linux izstrÄdi āmake && make installā lÄ«menÄ«. TÄpÄc problÄma tiek atrisinÄta ar diezgan netÄ«ru uzlauÅ”anu - pievienoÅ”anu /etc/rc.local
usbip attach --remote=localhost --busid=1-1
usbip port
usbip detach --port=00
Daļas finÄls
PÄc nelielas pamoÅ”anÄs tas darbojas. VÄlamais rezultÄts ir iegÅ«ts, tagad atslÄgu var piestiprinÄt pie jebkura datora (un, protams, arÄ« atmontÄt), arÄ« tiem, kas atrodas Ärpus apraides tÄ«kla segmenta. Ja vÄlaties, varat to izdarÄ«t, izmantojot Äaulas skriptu. Kas ir jauki - prieks ir pilnÄ«gi bez maksas.
Ceru, ka mana pieredze palÄ«dzÄs habrazhiteli apiet grÄbekli, kas iespiedÄs man uz pieres. Paldies par jÅ«su uzmanÄ«bu!
Avots: www.habr.com