USB/IP pieradināŔana

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. USB/IP ar aprakstu par ŔķērŔļiem, ko Å”ajā ceļā rÅ«pÄ«gi uzstādÄ«juÅ”i dažādi cilvēki, kā arÄ« par veidiem, kā tos apiet.

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 TrendNet TU2-NU4
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 - USB/IP projekts. Piesaista ar atklātÄ«bu, jo Ä«paÅ”i tāpēc, ka puiÅ”i no ReactOS viņi parakstÄ«ja draiveri priekÅ” Windows, tāpēc tagad viss darbojas pat uz x64 bez kruÄ·iem, piemēram, testa režīmā. Par ko liels paldies ReactOS komandai! Viss skan skaisti, mēģināsim to sajust, vai tieŔām tā ir? Diemžēl arÄ« pats projekts ir pamests, un jÅ«s nevarat paļauties uz atbalstu - bet kur mÅ«sējais nepazuda, tur ir avots, mēs to izdomāsim!

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

Pievieno komentāru