USB/IP domatzea

Sare lokal baten bidez USB gailu bat urruneko PC batera konektatzeko zeregina aldizka sortzen da. Mozketaren azpian, norabide horretan egindako nire bilaketen historia azaltzen da, eta kode irekiko proiektu batean oinarritutako prest egindako irtenbide baterako bidea. USB/IP bide honetan hainbat pertsonek arreta handiz jarritako oztopoen deskribapenarekin, baita horiek saihesteko moduekin ere.

Lehen zatia, historikoa

Makina birtuala bada - hau guztia erraza da. Ostalari batetik makina birtual batera USB birbidaltzearen funtzionaltasuna VMWare 4.1-en agertu zen. Baina nire kasuan, segurtasun-giltza, WIBU-KEY gisa ezagutzen dena, une ezberdinetan konektatu behar izan zen makina ezberdinetara, eta ez birtualei bakarrik.
2009 urruneko lehen bilaketa txandak izeneko burdin zati batera eraman ninduen TrendNet TU2-NU4
Pros:

  • batzuetan ere funtzionatzen du

Cons:

  • ez du beti funtzionatzen. Demagun Guardant Stealth II babesteko gakoa ez dela bertatik hasten, "gailua ezin da abiarazi" errorearekin zin eginez.
  • Kudeaketa softwarea (irakurri - USB gailuak muntatzea eta desmuntatzea) muturreraino penagarria da. Komando-lerroko etengailuak, automatizazioa - ez, ez dut entzun. Dena eskuz besterik ez da. Amesgaiztoa.
  • kontrol-softwareak burdin zatia bera bilatzen du sarean emitituz, beraz, honek difusio-sareko segmentu batean bakarrik funtzionatzen du. Ezin duzu eskuz burdina zatiaren IP helbidea zehaztu. Burdin zati bat beste azpisare batean? Orduan arazo bat duzu.
  • garatzaileek gailuan puntuazioa lortu dute, alferrikakoa da akatsen txostenak bidaltzea.

Bigarren txanda hain urrun ez den garaietan gertatu zen eta artikuluaren gaira eraman ninduen - USB/IP proiektua. Irekitasunarekin erakartzen du, batez ere etorritako mutilek ReactOS Windows-erako kontrolatzaile bat sinatu zuten, beraz, orain dena x64-n ere funtzionatzen du proba moduan bezalako makulurik gabe. Horregatik eskerrik asko ReactOS taldeari! Denak ederra dirudi, saia gaitezen sentitzen, benetan hala al da? Zoritxarrez, proiektua bera ere abandonatuta dago, eta ezin duzu laguntzarik izan, baina gurea desagertu ez zen tokian, iturria hor dago, asmatuko dugu!

Bigarren zatia, zerbitzari-linux

USB gailuak sare batean partekatzen dituen USB/IP zerbitzari bat Linux-en oinarritutako sistema eragile batean soilik konfigura daiteke. Beno, Linux Linux da, Debian 8 makina birtualean instalatzen dugu gutxieneko konfigurazioan, esku-mugimendu estandarrean:

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

Finkatuta. Gainera, Internetek usbip modulua deskargatu beharko zenukeela iradokitzen du, baina - kaixo, lehen rakea. Ez dago horrelako modulurik. Eta hori guztia sareko eskuliburu gehienek 0.1.x adar zaharragoari egiten diotelako erreferentzia, eta azken 0.2.0an usbip moduluek izen desberdinak dituzte.

Beraz:

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

Beno, gehitu ditzagun lerro hauek /etc/modules-en sistema abiaraztean automatikoki kargatzeko:

usbip-core
usbip-host
vhci-hcd

Hasi dezagun usbip zerbitzaria:

sudo usbipd -D

Gainera, adimen unibertsalak esaten digu usbip-ek zerbitzaria kudeatzeko aukera ematen diguten scriptekin datorrela: erakutsi zein gailu partekatuko duen sarean, ikusi egoera, etab. Hemen beste lorategi-tresna bat gure zain dago - 0.2.x adarreko script hauei, berriro ere, izena aldatu zaie. Komando zerrenda bat lor dezakezu honekin

sudo usbip

Komandoen deskribapena irakurri ondoren, argi geratzen da beharrezkoa den USB gailua partekatzeko, usbipek bere Bus IDa jakin nahi duela. Ikusle agurgarriok, hiru zenbakiko rakea arean dago: emango digun Bus IDa lsusb (biderik agerikoena irudituko litzateke) - ez zaio egokitzen! Kontua da usbip-ek USB hubak bezalako hardwarea alde batera uzten duela. Hori dela eta, integratutako komandoa erabiliko dugu:

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

Oharra: aurrerago zerrendetan dena deskribatuko dut nire USB giltza espezifikoaren adibidea erabiliz. Zure hardwarearen izena eta VID:PID bikotea desberdinak izan daitezke eta izango dira. Nirea Wibu-Systems AG deitzen da: BOX/U, VID 064F, PID 0BD7.

Orain gure gailua parteka dezakegu:

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

Hurra, kamaradak!

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)

Hiru animo, kamaradak! Zerbitzariak sarean partekatu zuen burdina zatia, eta konektatu dezakegu! /etc/rc.local usbip deabruaren abiarazte automatikoa gehitzea besterik ez da geratzen

usbipd -D

Hirugarren zatia, bezeroaren aldetik eta nahasia

Partekatutako gailua sarearen bidez Debian makina batera konektatzen saiatu nintzen berehala zerbitzari berean, eta dena ondo konektatu zen:

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

Goazen Windows-era. Nire kasuan Windows Server 2008R2 Standard Edition izan zen. Gida ofizialak kontrolatzailea lehenik instalatzeko eskatzen dizu. Prozedura ezin hobeto deskribatzen da windows bezeroari erantsitako readme-n, dena idazten den bezala egiten dugu, dena ondo ateratzen da. XPn ere arazorik gabe funtzionatzen du.

Bezeroa deskonprimitu ondoren, gure giltza muntatzen saiatzen gara:

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. Zerbait gaizki joan da. Google-ren trebetasuna erabiltzen dugu. Konstanteetan zerbait gaizki dagoela esaten da zatikako aipamenak; zerbitzariaren zatian, garatzaileek protokoloaren bertsioa aldatu zuten 0.2.0 bertsiora aldatzean, baina Win bezeroan hori egitea ahaztu zitzaien. Proposatutako irtenbidea iturri-kodeko konstantea aldatzea eta bezeroa berreraikitzea da.

Baina benetan ez dut Visual Studio deskargatu nahi prozedura honen mesedetan. Baina Hiew zahar ona dut. Iturburu-kodean, konstantea hitz bikoitz gisa deklaratzen da. Ikus dezagun 0x00000106 fitxategian, 0x00000111-rekin ordezkatuz. Gogoratu byteen ordena alderantzikatu egiten dela. Emaitza bi partida dira, adabakia:

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

Eeeee... bai!

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

Honek aurkezpena amaitu zezakeen, baina musikak ez zuen luzaroan jo. Zerbitzaria berrabiarazi ondoren, ikusi dut bezeroaren gailua ez dagoela muntatuta!

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

Eta kitto. Google-k ere ezin izan zidan honi erantzun. Eta, aldi berean, zerbitzarian eskuragarri dauden gailuak bistaratzeko komandoak nahiko ondo erakusten du - hemen dago, gakoa, munta dezakezu. Linux azpitik muntatzen saiatzen naiz - funtzionatzen du! Eta orain Windows azpitik saiatuz gero? Ai kaka - funtzionatzen du!

Azken rakea: zerbitzariaren kodean ez da zerbait gehitzen. Gailu bat partekatzean, ez du haren USB deskribatzaileen kopurua irakurtzen. Eta gailua Linux-etik muntatzean, eremu hau betetzen da. Zoritxarrez, ezagutzen dut Linux-en garapena "make && make install" mailan. Hori dela eta, arazoa hack nahiko zikin batekin konpontzen da - /etc/rc.local gehituz

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

Final zatia

Pixka bat ibili ondoren, funtzionatzen du. Nahi den emaitza lortu da, orain gakoa edozein PCtan munta daiteke (eta desmuntatu, noski, gainera), difusio sareko segmentutik kanpo barne. Nahi baduzu, egin dezakezu shell script bat erabiliz. Zer da polita - plazerra erabat doakoa da.
Espero dut nire esperientziak habrazhiteli nire kopetan inprimatutako arrastelari inguratzen lagunduko diola. Eskerrik asko zure arretagatik!

Iturria: www.habr.com

Gehitu iruzkin berria