Pag-ampo sa USB/IP

Ang tahas sa pagkonektar sa usa ka USB device sa usa ka hilit nga PC pinaagi sa usa ka lokal nga network kanunay nga mitungha. Ubos sa pagputol, ang kasaysayan sa akong mga pagpangita niini nga direksyon gitakda, ug ang dalan sa usa ka andam nga solusyon nga gibase sa usa ka open-source nga proyekto USB/IP nga adunay usa ka paghulagway sa mga babag nga maampingong gipahimutang sa lainlaing mga tawo sa kini nga agianan, ingon man mga paagi aron malaktawan kini.

Unang bahin, makasaysayanon

Kung ang makina virtual - kining tanan sayon. Ang pagpaandar sa USB forwarding gikan sa usa ka host ngadto sa usa ka virtual machine nagpakita sa VMWare 4.1. Apan sa akong kaso, ang yawe sa seguridad, nga mailhan nga WIBU-KEY, kinahanglan nga konektado sa lainlaing mga oras sa lainlaing mga makina, ug dili lamang mga virtual.
Ang unang hugna sa pagpangita sa layo nga 2009 nagdala kanako ngadto sa usa ka piraso sa puthaw nga gitawag TrendNet TU2-NU4
Mga Pro:

  • usahay mutrabaho pa gani

Kahinumduman:

  • dili sa kanunay molihok. Ibutang ta nga ang Guardant Stealth II nga yawe sa pagpanalipod dili magsugod pinaagi niini, nga nanumpa nga adunay sayup nga "ang aparato dili masugdan".
  • Ang software sa pagdumala (pagbasa - pag-mount ug pag-unmount sa mga USB device) makalolooy sa hilabihan. Ang mga switch sa command line, automation - wala, wala makadungog. Ang tanan pinaagi lang sa kamot. Nightmare.
  • ang control software nangita sa piraso sa puthaw mismo sa network pinaagi sa pagsibya, mao nga kini molihok lamang sulod sa usa ka bahin sa broadcast network. Dili nimo matino ang IP address sa piraso sa puthaw pinaagi sa kamot. Usa ka piraso sa puthaw sa ubang subnet? Unya naa kay problema.
  • ang mga nag-develop nakapuntos sa aparato, wala’y kapuslanan ang pagpadala mga taho sa bug.

Ang ikaduhang hugna nahitabo sa mga panahon nga dili kaayo layo, ug nagdala kanako sa hilisgutan sa artikulo - USB/IP nga proyekto. Nakadani sa pagkabukas, labi na kay ang mga lalaki gikan ReactOS nagpirma sila usa ka drayber alang sa Windows, mao nga karon ang tanan nagtrabaho bisan sa x64 nga wala’y mga saklay sama sa usa ka mode sa pagsulay. Alang niini daghang salamat sa ReactOS team! Nindot tan-awon ang tanan, sulayan nato kini nga mabati, tinuod ba kini? Ikasubo, ang proyekto mismo gibiyaan usab, ug dili ka makasalig sa suporta - apan kung wala mawala ang amon, naa ang gigikanan, mahibal-an namon kini!

Ikaduha nga bahin, server-linux

Ang USB/IP server nga nag-ambit sa mga USB device sa usa ka network mahimo lang i-set up sa Linux-based OS. Aw, Linux ang Linux, busa i-install sa Debian 8 virtual machine sa minimum nga pagsumpo, standard nga paglihok sa kamot:

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

Nahusay. Dugang pa, ang Internet nagsugyot nga kinahanglan nimo nga i-download ang usbip module, apan - hello, ang una nga rake. Walay ingon nga module. Ug ang tanan tungod kay kadaghanan sa mga manwal sa network nagtumong sa mas karaan nga sanga nga 0.1.x, ug sa pinakabag-o nga 0.2.0 ang usbip modules adunay lain-laing mga ngalan.

Busa:

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

Aw, atong idugang ang mosunod nga mga linya sa /etc/modules aron awtomatik nga ma-load kini sa pagsugod sa sistema:

usbip-core
usbip-host
vhci-hcd

Atong sugdan ang usbip server:

sudo usbipd -D

Dugang pa, ang unibersal nga hunahuna nagsulti kanamo nga ang usbip adunay mga script nga nagtugot kanamo sa pagdumala sa server - ipakita kung unsang aparato ang ipaambit niini sa network, tan-awa ang kahimtang, ug uban pa. Dinhi ang laing himan sa tanaman nagpaabot kanamo - kini nga mga script sa 0.2.x nga sanga, pag-usab, giilisan ang ngalan. Makuha nimo ang usa ka lista sa mga mando nga adunay

sudo usbip

Human mabasa ang paghulagway sa mga sugo, kini nahimong tin-aw nga aron sa pagpakigbahin sa gikinahanglan nga USB device, usbip gusto nga masayud sa iyang Bus ID. Minahal nga mga tumatan-aw, ang rake number three naa sa arena: ang Bus ID nga maghatag kanamo lsusb (Kini daw ang labing klaro nga paagi) - dili kini angay kaniya! Ang kamatuoran mao nga ang usbip wala magtagad sa hardware sama sa USB hubs. Busa, atong gamiton ang built-in nga sugo:

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

Hinumdomi: pagkahuman niini sa mga lista akong ihulagway ang tanan gamit ang pananglitan sa akong piho nga USB key. Ang imong ngalan sa hardware ug VID:PID nga pares mahimo ug magkalainlain. Ang akoa gitawag og Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

Karon mahimo na namon ipaambit ang among aparato:

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

Hurrah, mga kauban!

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)

Tulo ka kalipay, mga kauban! Gipaambit sa server ang piraso sa puthaw sa network, ug makonektar namo kini! Nagpabilin lamang nga idugang ang autostart sa usbip daemon sa /etc/rc.local

usbipd -D

Ikatulo nga bahin, bahin sa kliyente ug makalibog

Gisulayan nako ang pagkonekta sa gipaambit nga aparato sa network sa usa ka makina nga Debian dayon sa parehas nga server, ug maayo ang tanan nga konektado:

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

Mopadayon kita sa Windows. Sa akong kaso kini Windows Server 2008R2 Standard Edition. Gihangyo ka sa opisyal nga giya nga i-install una ang drayber. Ang pamaagi hingpit nga gihulagway sa readme nga gilakip sa windows client, gibuhat namo ang tanan sumala sa nahisulat, ang tanan nagtrabaho. Sa XP nagtrabaho usab kini nga wala’y mga problema.

Pagkahuman sa pag-unpack sa kliyente, gisulayan namon nga i-mount ang among yawe:

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

Oh oh. Naay nahitabo. Gigamit namo ang kahanas sa Google. Adunay mga tipik nga naghisgot nga adunay usa ka butang nga sayup sa mga makanunayon; sa bahin sa server, gibag-o sa mga developer ang bersyon sa protocol kung nagbalhin sa bersyon 0.2.0, apan nakalimot sila nga buhaton kini sa kliyente nga Win. Ang gisugyot nga solusyon mao ang pagbag-o sa kanunay sa source code ug pagtukod pag-usab sa kliyente.

Apan dili gyud ko gusto nga i-download ang Visual Studio alang sa kini nga pamaagi. Apan ako adunay usa ka maayo nga tigulang nga Hiew. Sa source code, ang makanunayon gideklarar nga doble nga pulong. Atong tan-awon ang file alang sa 0x00000106, ilisan kini sa 0x00000111. Hinumdomi, ang byte order gibali. Ang resulta mao ang duha ka posporo, patch:

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

Eeeee... oo nga!

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

Mahimong tapuson niini ang presentasyon, apan ang musika wala magdugay. Human sa pag-reboot sa server, akong nakita nga ang device sa kliyente wala ma-mount!

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

Ug mao na. Bisan ang tanan nga nahibal-an sa Google dili makatubag niini alang kanako. Ug sa parehas nga oras, ang mando nga ipakita ang mga aparato nga magamit sa server nga husto nga gipakita - ania kini, ang yawe, mahimo nimo kini i-mount. Gisulayan nako ang pag-mount gikan sa ilawom sa Linux - kini molihok! Ug kung karon sulayan gikan sa ilawom sa Windows? Oh shit - kini molihok!

Ang katapusan nga rake: adunay wala gidugang sa code sa server. Kung nagpaambit sa usa ka aparato, wala kini mabasa ang gidaghanon sa mga USB descriptor gikan niini. Ug kung gi-mount ang aparato gikan sa ilawom sa Linux, kini nga uma napuno. Ikasubo, pamilyar ako sa pag-uswag ubos sa Linux sa lebel sa "make && make install". Busa, ang problema masulbad sa usa ka medyo hugaw nga hack - pagdugang sa /etc/rc.local

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

Katapusan nga bahin

Human sa pipila ka paglitok, kini molihok. Nakuha na ang gitinguha nga resulta, karon ang yawe mahimong ma-mount sa bisan unsang PC (ug dili ma-mount, siyempre, usab), lakip ang gawas sa bahin sa broadcast network. Kung gusto nimo, mahimo nimo kini gamit ang script sa shell. Unsa ang nindot - ang kalipay hingpit nga libre.
Nanghinaut ko nga ang akong kasinatian makatabang sa habrazhiteli sa paglibot sa rake nga gipatik sa akong agtang. Salamat sa imong pagtagad!

Source: www.habr.com

Idugang sa usa ka comment