Kudhibiti USB/IP

Kazi ya kuunganisha kifaa cha USB kwenye PC ya mbali kupitia mtandao wa ndani hutokea mara kwa mara. Chini ya kukata, historia ya utaftaji wangu katika mwelekeo huu imewekwa, na njia ya suluhisho iliyotengenezwa tayari kulingana na mradi wa chanzo-wazi. USB/IP na maelezo ya vizuizi vilivyowekwa kwa uangalifu na watu mbalimbali kwenye njia hii, na pia njia za kuvipita.

Sehemu ya kwanza, ya kihistoria

Ikiwa mashine ni ya kawaida - yote haya ni rahisi. Utendaji wa usambazaji wa USB kutoka kwa seva pangishi hadi kwa mashine pepe ulionekana katika VMWare 4.1. Lakini katika kesi yangu, ufunguo wa usalama, unaotambulika kama WIBU-KEY, ulipaswa kuunganishwa kwa nyakati tofauti kwa mashine tofauti, na sio tu za kawaida.
Mzunguko wa kwanza wa utafutaji katika mwaka wa 2009 wa mbali ulinipeleka kwenye kipande cha chuma kinachoitwa TrendNet TU2-NU4
Faida:

  • wakati mwingine hata inafanya kazi

Minus:

  • haifanyi kazi kila wakati. Tuseme ufunguo wa ulinzi wa Guardant Stealth II hauanzi kupitia, ukiapa kwa hitilafu "kifaa hakiwezi kuwashwa".
  • Programu ya usimamizi (kusoma - kuweka na kuteremsha vifaa vya USB) ni ya kusikitisha sana. Swichi za mstari wa amri, otomatiki - hapana, hazijasikia. Kila kitu ni kwa mkono tu. Jinamizi.
  • programu ya udhibiti hutafuta kipande cha chuma chenyewe kwenye mtandao kwa utangazaji, kwa hivyo hii inafanya kazi tu ndani ya sehemu moja ya mtandao wa utangazaji. Huwezi kutaja anwani ya IP ya kipande cha chuma kwa mkono. Kipande cha chuma kwenye subnet nyingine? Kisha una tatizo.
  • watengenezaji walifunga kwenye kifaa, haina maana kutuma ripoti za hitilafu.

Mzunguko wa pili ulifanyika kwa nyakati sio mbali sana, na ulinipeleka kwenye mada ya kifungu hicho - Mradi wa USB/IP. Huvutia kwa uwazi, haswa tangu wavulana kutoka ReactOS walitia saini dereva kwa Windows, kwa hivyo sasa kila kitu hufanya kazi hata kwenye x64 bila mikongojo kama hali ya majaribio. Ambayo shukrani nyingi kwa timu ya ReactOS! Kila kitu kinasikika nzuri, hebu jaribu kuhisi, ni kweli? Kwa bahati mbaya, mradi wenyewe pia umeachwa, na huwezi kutegemea msaada - lakini ambapo yetu haikutoweka, chanzo kipo, tutaigundua!

Sehemu ya pili, server-linux

Seva ya USB/IP inayoshiriki vifaa vya USB kwenye mtandao inaweza tu kusanidiwa kwenye Mfumo wa Uendeshaji wa Linux. Kweli, Linux ni Linux, tunasakinisha Debian 8 kwenye mashine ya kawaida katika usanidi wa chini, harakati za kawaida za mkono:

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

Tulia. Zaidi ya hayo, Mtandao unapendekeza kwamba utahitaji kupakua moduli ya usbip, lakini - hello, reki ya kwanza. Hakuna moduli kama hiyo. Na yote kwa sababu miongozo mingi kwenye mtandao inarejelea tawi la zamani 0.1.x, na katika 0.2.0 ya hivi karibuni moduli za usbip zina majina tofauti.

Kwa hivyo:

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

Kweli, wacha tuongeze mistari ifuatayo kwa /etc/modules ili kuzipakia kiatomati wakati wa kuanza kwa mfumo:

usbip-core
usbip-host
vhci-hcd

Wacha tuanze seva ya usbip:

sudo usbipd -D

Zaidi ya hayo, akili ya ulimwengu wote inatuambia kuwa usbip inakuja na hati zinazoturuhusu kudhibiti seva - onyesha ni kifaa gani itashiriki kwenye mtandao, angalia hali, na kadhalika. Hapa chombo kingine cha bustani kinatungoja - hati hizi katika tawi la 0.2.x, tena, zimebadilishwa jina. Unaweza kupata orodha ya amri na

sudo usbip

Baada ya kusoma maelezo ya amri, inakuwa wazi kwamba ili kushiriki kifaa cha USB kinachohitajika, usbip inataka kujua Kitambulisho chake cha Basi. Wapenzi watazamaji, reki namba tatu iko uwanjani: Kitambulisho cha Basi kitakachotupa lsusb (inaweza kuonekana kuwa njia iliyo wazi zaidi) - haifai kwake! Ukweli ni kwamba usbip hupuuza vifaa kama vibanda vya USB. Kwa hivyo, tutatumia amri iliyojengwa:

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

Kumbuka: hapa kwenye orodha nitaelezea kila kitu kwa kutumia mfano wa ufunguo wangu maalum wa USB. Jina la maunzi yako na jozi ya VID:PID inaweza na itatofautiana. Yangu inaitwa Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

Sasa tunaweza kushiriki kifaa chetu:

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

Hurrah, wandugu!

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)

Hongera tatu, wandugu! Seva ilishiriki kipande cha chuma kwenye mtandao, na tunaweza kuiunganisha! Inabakia tu kuongeza kianzio otomatiki cha daemon ya usbip kwa /etc/rc.local

usbipd -D

Sehemu ya tatu, upande wa mteja na utata

Nilijaribu kuunganisha kifaa kilichoshirikiwa kwenye mtandao kwa mashine ya Debian mara moja kwenye seva hiyo hiyo, na kila kitu kiliunganishwa vizuri:

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

Wacha tuendelee kwenye Windows. Kwa upande wangu ilikuwa Toleo la Kawaida la Windows Server 2008R2. Mwongozo rasmi unakuuliza usakinishe dereva kwanza. Utaratibu umeelezewa kikamilifu kwenye usomaji uliowekwa kwa mteja wa windows, tunafanya kila kitu kama ilivyoandikwa, kila kitu hufanya kazi. Kwenye XP pia inafanya kazi bila matatizo yoyote.

Baada ya kufungua mteja, tunajaribu kuweka ufunguo wetu:

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. Hitilafu fulani imetokea. Tunatumia ujuzi wa Google. Kuna maelezo mafupi kwamba kuna kitu kibaya na viboreshaji; katika sehemu ya seva, watengenezaji walibadilisha toleo la itifaki wakati wa kubadilisha toleo la 0.2.0, lakini walisahau kufanya hivi kwenye mteja wa Win. Suluhisho lililopendekezwa ni kubadilisha mara kwa mara katika msimbo wa chanzo na kujenga upya mteja.

Lakini sitaki kabisa kupakua Visual Studio kwa ajili ya utaratibu huu. Lakini nina Hiew nzuri ya zamani. Katika msimbo wa chanzo, mara kwa mara hutangazwa kama neno mbili. Wacha tuangalie faili 0x00000106, tukibadilisha na 0x00000111. Kumbuka, agizo la byte limebadilishwa. Matokeo ni mechi mbili, kiraka:

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

Eeeee... ndio!

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

Hii inaweza kumaliza uwasilishaji, lakini muziki haukucheza kwa muda mrefu. Baada ya kuwasha tena seva, niligundua kuwa kifaa kwenye mteja hakijawekwa!

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

Na ndivyo hivyo. Hata Google inayojua yote haikuweza kunijibu hili. Na wakati huo huo, amri ya kuonyesha vifaa vinavyopatikana kwenye seva inaonyesha kwa usahihi - hapa ni, ufunguo, unaweza kuiweka. Ninajaribu kuweka kutoka chini ya Linux - inafanya kazi! Na ikiwa sasa jaribu kutoka chini ya Windows? Oh shit - inafanya kazi!

Reki ya mwisho: kitu hakijaongezwa kwenye nambari ya seva. Wakati wa kushiriki kifaa, haisomi idadi ya maelezo ya USB kutoka kwayo. Na wakati wa kuweka kifaa kutoka chini ya Linux, uwanja huu umejaa. Kwa bahati mbaya, ninajua maendeleo chini ya Linux katika kiwango cha "tengeneza && sakinisha". Kwa hivyo, shida hutatuliwa kwa utapeli chafu - kuongeza kwa /etc/rc.local

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

Sehemu ya mwisho

Baada ya kugombana kidogo, inafanya kazi. Matokeo yaliyohitajika yamepatikana, sasa ufunguo unaweza kuwekwa kwenye PC yoyote (na haijapunguzwa, bila shaka, pia), ikiwa ni pamoja na nje ya sehemu ya mtandao wa utangazaji. Ikiwa unataka, unaweza kuifanya kwa kutumia hati ya ganda. Nini ni nzuri - furaha ni bure kabisa.
Ninatumai kuwa uzoefu wangu utasaidia habrazhiteli kuzunguka tafuta ambayo ilichapishwa kwenye paji la uso wangu. Asante kwa umakini wako!

Chanzo: mapenzi.com

Kuongeza maoni