USB per IP namuose

Kartais norisi dirbti su įrenginiu, prijungtu per USB, nelaikant jo ant stalo šalia nešiojamojo kompiuterio. Mano aparatas – kiniškas graviruotojas su 500 mW galios lazeriu, kuris yra gana nemalonus artimai kontaktuojant. Be tiesioginio pavojaus akims, lazerio veikimo metu išsiskiria nuodingi degimo produktai, todėl prietaisas turi būti gerai vėdinamoje vietoje ir geriau izoliuotas nuo žmonių. Kaip valdyti tokį įrenginį? Netyčia radau atsakymą į šį klausimą naršydamas OpenWRT saugykloje, tikėdamasis rasti tinkamą senojo maršrutizatoriaus D-Link DIR-320 A2 panaudojimą. Norėdami prisijungti, nusprendžiau naudoti anksčiau aprašytą Habré. USB per IP tunelį, tačiau visos jo įdiegimo instrukcijos prarado savo aktualumą, todėl rašau savo.

OpenWRT yra operacinė sistema, kurios nereikia pristatyti, todėl jos diegimo neaprašysiu. Savo maršrutizatoriui paėmiau naujausią stabilų OpenWrt 19.07.3 leidimą ir prijungiau jį prie pagrindinio Wi-Fi prieigos taško kaip klientą, pasirinkdamas režimą LAN, kad nekankintų ugniasienė.

Serverio dalis

Mes elgiamės pagal oficialių nurodymų. Prisijungę per ssh, įdiekite reikiamus paketus.

root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install kmod-usb-ohci usbip-server usbip-client

Tada mes prijungiame savo įrenginį prie maršrutizatoriaus USB prievado (mano atveju įrenginiai: USB šakotuvas, „flash drive“, kuriame yra prijungta maršrutizatoriaus failų sistema (dėl vietos trūkumo vidinėje atmintyje) ir tiesiogiai gravierius).

Pabandykime parodyti prijungtų įrenginių sąrašą:

root@OpenWrt:~# usbip list -l

Tuščia.

Googlinant kaltininkas rastas, paaiškėjo, kad tai biblioteka libudev-fbsd.
Ranka ištraukiame iš saugyklos naujausią veikiančią versiją libudev_3.2-1 iš OpenWRT 17.01.7 leidimo jūsų architektūrai, mano atveju tai yra libudev_3.2-1_mipsel_mips32.ipk. Naudodami wget/scp atsisiųskite jį į maršrutizatoriaus atmintį ir iš naujo įdiekite

root@OpenWrt:~# opkg remove --force-depends libudev-fbsd
root@OpenWrt:~# opkg install libudev_3.2-1_mipsel_mips32.ipk

Mes patikriname:

root@OpenWrt:~# usbip list -l
 - busid 1-1.1 (090c:1000)
   Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) : Flash Drive (090c:1000)

 - busid 1-1.4 (1a86:7523)
   QinHeng Electronics : HL-340 USB-Serial adapter (1a86:7523)

Kinas, prijungtas prie USB šakotuvo, gavo bsuudą 1-1.4. Prisiminti.

Dabar pradėkime demoną:

root@OpenWrt:~# usbipd -D

ir bindim kinus

root@OpenWrt:~# usbip bind -b 1-1.4
usbip: info: bind device on busid 1-1.4: complete

Patikrinkite, ar viskas veikia:

root@OpenWrt:/home# netstat -alpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

Norėdami toliau automatiškai susieti įrenginį, redaguokite /etc/rc.localpridedant prieš tai 0 išėjimas taip:

usbipd -D &
sleep 1
usbip bind -b 1-1.4

Kliento pusė

Pabandykime prijungti įrenginį prie „Windows 10“ naudodami aukščiau pateiktas openwrt.org instrukcijas. Iš karto pasakysiu: idėja pasmerkta žlugti. Pirma, atsižvelgiama tik į „Windows 7 x64“. Antra, pateikiama nuoroda į giją, esančią sourceforge.net, kuri siūlo iš „Dropbox“ atsisiųsti tvarkyklę, pataisytą 2014 m. Kai bandome jį paleisti naudodami „Windows 10“ ir prisijungti prie savo įrenginio, gauname šią klaidą:

c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip for windows ($Id$)

*** ERROR: cannot find device

Taip yra dėl to, kad klientas neveikia su serveriu, sukurtu senesniam nei 3.14 versijos branduoliui.
„OpenWRT 19.07.3“ usbip serveris sukurtas 4.14.180 branduolyje.

Tęsdamas paieškas aptikau dabartinį „Windows“ kliento kūrimą GitHub. Gerai, Windows 10 x64 palaikymas nurodytas, tačiau klientas yra tik bandomasis klientas, todėl yra keletas apribojimų.

Taigi, pirmiausia jie prašo įdiegti sertifikatą ir du kartus. Gerai, patalpinkime jį į patikimų šakninių sertifikavimo tarnybą ir patikimus leidėjus.

Tada turite įjungti operacinę sistemą į bandomąjį režimą. Tai atlieka komanda

bcdedit.exe /set TESTSIGNING ON

Iš pirmo karto nepasisekė, užkliuvau užtikrinti boot. Norėdami jį išjungti, turite iš naujo paleisti UEFI ir nustatyti saugų įkrovimą, kad jis būtų išjungtas. Kai kuriems nešiojamųjų kompiuterių modeliams gali reikėti nustatyti prižiūrėtojo slaptažodį.

Po to paleiskite „Windows“ ir atlikite bcdedit.exe /set TESTSIGNING ON
Vinda sako, kad viskas gerai. Dar kartą paleidžiame iš naujo, o apatiniame dešiniajame kampe matome žodžius Test Mode, version ir OS versijos numeris.

Kam skirtos visos šios manipuliacijos? Norėdami įdiegti nepasirašytą tvarkyklę USB/IP VHCI. Siūloma tai padaryti atsisiunčiant failus usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat ir paleidžiant administratoriaus teisėmis

usbip.exe install

arba antrasis būdas, rankiniu būdu įdiegiant senąją aparatinę įrangą. Pasirinkau antrą variantą, gavau įspėjimą dėl nepasirašytos tvarkyklės įdiegimo ir sutikau.

Tada patikriname, ar turime galimybę prisijungti prie nuotolinio USB įrenginio, vykdydami komandą:

usbip.exe list -r <ip вашего роутера>

gauname įrenginių sąrašą:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: error: failed to open usb id database
Exportable USB devices
======================
 - 192.168.31.203
      1-1.4: unknown vendor : unknown product (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : unknown class / unknown subclass / unknown protocol (ff/00/00)

už klaidą usbip: klaida: nepavyko atidaryti usb id duomenų bazės Mes nekreipiame dėmesio, tai neturi įtakos darbui.

Dabar surišame įrenginį:

c:Utilsusbip>usbip.exe attach -r 192.168.31.203 -b 1-1.4

Tai viskas, „Windows“ aptiko naują įrenginį, dabar galite dirbti su juo taip, lyg jis būtų fiziškai prijungtas prie nešiojamojo kompiuterio.

Teko šiek tiek pakentėti su kinišku graveriu, nes kai bandžiau įdiegti jos CH341SER tvarkyklę per su graveriu gautą instaliatorių (taip, Arduino graverį), USB/IP VHCI išmetė Windows į BSOD. Tačiau diegiant CH341SER tvarkyklę į prijungus įrenginį per usbip.exe problema išspręsta.

Apatinė eilutė: graviruotojas triukšmauja ir rūko virtuvėje atidarytas langas ir uždarytos durys, degimo procesą stebiu iš kito kambario per savo programinę įrangą, kuri nejaučia gaudymo.

Naudoti šaltiniai:

https://openwrt.org/docs/guide-user/services/usb.iptunnel
https://github.com/cezanne/usbip-win

Šaltinis: www.habr.com

Добавить комментарий