USB sa IP sa bahay

Minsan gusto mong magtrabaho sa isang device na nakakonekta sa pamamagitan ng USB nang hindi ito inilalagay sa mesa sa tabi ng iyong laptop. Ang aking device ay isang Chinese engraver na may 500 mW laser, na medyo hindi kasiya-siya kapag malapit na makipag-ugnayan. Bilang karagdagan sa agarang panganib sa mga mata, ang mga nakakalason na produkto ng pagkasunog ay inilabas sa panahon ng operasyon ng laser, kaya ang aparato ay dapat na matatagpuan sa isang mahusay na maaliwalas na lugar, at mas mabuti na nakahiwalay sa mga tao. Paano mo makokontrol ang gayong aparato? Hindi ko sinasadyang natagpuan ang sagot sa tanong na ito habang nagba-browse sa OpenWRT repository sa pag-asa na makahanap ng isang karapat-dapat na paggamit para sa lumang D-Link DIR-320 A2 router. Upang kumonekta, nagpasya akong gamitin ang inilarawan sa HabrΓ© kanina. USB sa ibabaw ng IP tunnel, gayunpaman, ang lahat ng mga tagubilin para sa pag-install nito ay nawala ang kanilang kaugnayan, kaya nagsusulat ako ng sarili ko.

OpenWRT β€” опСрационная систСма, Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‰Π°ΡΡΡ Π² прСдставлСнии, поэтому Π΅Ρ‘ установку Ρ€Π°ΡΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Ρƒ. Для своСго Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π° взял послСдний ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· OpenWrt 19.07.3, ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ» Π΅Π³ΠΎ ΠΊ основной Ρ‚ΠΎΡ‡ΠΊΠ΅ доступа ΠΏΠΎ Wi-Fi Π² качСствС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π²Ρ‹Π±Ρ€Π°Π² Ρ€Π΅ΠΆΠΈΠΌ lan, upang hindi pahirapan ang firewall.

Bahagi ng server

Kami ay kumilos ayon sa opisyal na mga tagubilin. Pagkatapos kumonekta sa pamamagitan ng ssh, i-install ang mga kinakailangang pakete.

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

Susunod, ikinonekta namin ang aming device sa USB port ng router (sa aking kaso, mga device: isang USB hub, isang flash drive kung saan naka-mount ang file system ng router (dahil sa kakulangan ng espasyo sa internal storage), at, direkta, ang mang-uukit).

Subukan nating magpakita ng listahan ng mga nakakonektang device:

root@OpenWrt:~# usbip list -l

Walang laman.

Sa pamamagitan ng pag-googling natagpuan ang salarin, ito pala ay isang silid-aklatan libudev-fbsd.
Kinukuha namin ang pinakabagong gumaganang bersyon mula sa repository sa pamamagitan ng kamay libudev_3.2-1 mula sa OpenWRT 17.01.7 release para sa iyong arkitektura, sa aking kaso ito ay libudev_3.2-1_mipsel_mips32.ipk. Gamit ang wget/scp, i-download ito sa memorya ng router at muling i-install ito

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

Namin suriin:

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)

Nakatanggap ng bsuid ang isang lalaking Chinese na konektado sa USB hub 1-1.4. Tandaan.

Ngayon simulan natin ang daemon:

root@OpenWrt:~# usbipd -D

at bindim ang mga Intsik

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

Suriin natin kung gumagana ang lahat:

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

Upang higit pang i-bind ang device, i-edit natin /etc/rc.localsa pamamagitan ng pagdaragdag ng dati labasan 0 ang mga sumusunod:

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

panig ng kliyente

Subukan nating ikonekta ang device sa Windows 10 gamit ang mga tagubilin sa itaas mula sa openwrt.org. Sasabihin ko kaagad: ang ideya ay tiyak na mabibigo. Una, ang Windows 7 x64 lamang ang isinasaalang-alang. Pangalawa, ang isang link ay ibinibigay sa isang thread sa sourceforge.net, na nagmumungkahi ng pag-download ng driver na na-patch noong 2014 mula sa Dropbox. Kapag sinubukan naming patakbuhin ito sa ilalim ng Windows 10 at kumonekta sa aming device, nakukuha namin ang sumusunod na error:

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

*** ERROR: cannot find device

Ito ay dahil sa ang katunayan na ang kliyente ay hindi gumagana sa isang server na binuo para sa isang kernel na mas luma kaysa sa bersyon 3.14.
Ang usbip server para sa OpenWRT 19.07.3 ay binuo sa kernel 4.14.180.

Sa pagpapatuloy ng aking paghahanap, nakita ko ang kasalukuyang pagbuo ng isang Windows client para sa github. Ok, ang suporta para sa Windows 10 x64 ay nakasaad, ngunit ang kliyente ay isang pagsubok na kliyente lamang, kaya mayroong ilang mga limitasyon.

Kaya, hinihiling muna nilang i-install ang sertipiko, at dalawang beses. Ok, ilagay natin ito sa Trusted Root Certification Authority at Trusted Publishers.

Susunod, kailangan mong ilagay ang operating system sa test mode. Ginagawa ito ng isang pangkat

bcdedit.exe /set TESTSIGNING ON

Hindi ako nagtagumpay sa unang pagkakataon, nakaharang ako ligtas na boot. Upang hindi paganahin ito, kailangan mong i-reboot sa UEFI at itakda ang secure na boot upang huwag paganahin. Ang ilang mga modelo ng laptop ay maaaring mangailangan ng pagtatakda ng supervisor password.

Pagkatapos nito, mag-boot sa Windows at gawin bcdedit.exe /set TESTSIGNING ON
Sabi ni Vinda ok na ang lahat. Nag-reboot kami muli, at nakikita namin sa kanang sulok sa ibaba ang mga salitang Test Mode, bersyon at OS build number.

Para saan ang lahat ng manipulasyong ito? Upang mag-install ng hindi nakapirmang driver USB/IP VHCI. Iminumungkahi na gawin ito sa pamamagitan ng pag-download ng mga file na usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat, at pagpapatakbo gamit ang mga karapatan ng administrator

usbip.exe install

o ang pangalawang paraan, manu-manong pag-install ng Legacy Hardware. Pinili ko ang pangalawang opsyon, nakatanggap ng babala tungkol sa pag-install ng hindi naka-sign na driver at sumang-ayon dito.

Susunod, tinitingnan namin na mayroon kaming kakayahang kumonekta sa isang malayuang USB device sa pamamagitan ng pagpapatakbo ng command:

usbip.exe list -r <ip вашСго Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π°>

nakakakuha kami ng listahan ng mga device:

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)

para sa isang pagkakamali usbip: error: nabigong buksan ang database ng usb id Hindi namin pinapansin, hindi nakakaapekto sa trabaho.

Ngayon itali namin ang device:

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

Iyon lang, may na-detect na bagong device ang Windows, ngayon ay maaari mo na itong gamitin na parang pisikal na nakakonekta sa laptop.

Kinailangan kong magdusa ng kaunti sa Chinese engraver, dahil noong sinubukan kong i-install ang CH341SER driver nito sa pamamagitan ng installer na kasama ng engraver (oo, isang Arduino engraver), ibinagsak ng USB/IP VHCI ang Windows sa BSOD. Gayunpaman, ang pag-install ng driver ng CH341SER sa Ang pagkonekta sa device sa pamamagitan ng usbip.exe ay nalutas ang problema.

Bottom line: ang ukit ay gumagawa ng ingay at naninigarilyo sa kusina na nakabukas ang bintana at nakasara ang pinto, pinapanood ko ang proseso ng pagsunog mula sa isa pang silid sa pamamagitan ng sarili kong software, na hindi nakakaramdam ng catch.

Mga ginamit na mapagkukunan:

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

Pinagmulan: www.habr.com

Magdagdag ng komento