Někdy vzniká touha pracovat s zařízením připojeným přes USB, aniž bychom ho měli na stole vedle notebooku. Mým takovým zařízením je čínský gravírovací stroj s laserem o výkonu 500 mW, což je poměrně nepříjemné při blízkém kontaktu. Kromě přímého nebezpečí pro oči se při práci s laserem uvolňují toxické produkty hoření, a proto by mělo zařízení být umístěno v dobře větraném prostoru, ideálně izolovaně od lidí. A jak takovým zařízením ovládat? Odpověď na tuto otázku jsem náhodou našel při procházení repozitáře OpenWRT v naději najít důstojné využití pro starý router D-Link DIR-320 A2. Pro připojení jsem se rozhodl použít to, co bylo dříve popsáno na Habr. USB over IP tunel, ale všechny návody k jeho instalaci již ztratily aktuálnost, a proto píšu svůj vlastní.
OpenWRT je operační systém, který nepotřebuje představení, takže jeho instalaci nebudu podrobně popisovat. Pro svůj router jsem vzal poslední stabilní verzi OpenWrt 19.07.3 a připojil ho k hlavnímu přístupovému bodu přes Wi-Fi jako klient, vybral jsem režim lan, abych nemusel mučit firewall.
Serverová část
Postupujeme podle . Po připojení přes ssh nainstalujeme potřebné balíčky.
root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install kmod-usb-ohci usbip-server usbip-clientDále připojujeme k USB portu routeru naše zařízení (v mém případě zařízení: USB hub, flash disk, na který je připojena souborová struktura routeru (vzhledem k nedostatku místa na interním úložišti) a přímo gravírovací stroj).
Zkusíme vypsat seznam připojených zařízení:
root@OpenWrt:~# usbip list -lPrázdno.
Cestou guglání jsem objevil viníka, kterým byla knihovna libudev-fbsd.
Ručně vytáhneme z repozitáře poslední funkční verzi libudev_3.2-1 z vydání OpenWRT 17.01.7 pro svou architekturu, v mém případě je to libudev_3.2-1_mipsel_mips32.ipk. Pomocí wget/scp ji nahrajeme do paměti routeru a přeinstalujeme
root@OpenWrt:~# opkg remove --force-depends libudev-fbsd
root@OpenWrt:~# opkg install libudev_3.2-1_mipsel_mips32.ipk
Kontrolujeme:
root@OpenWrt:~# usbip list -l
- busid 1-1.1 (090c:1000)
Silicon Motion, Inc. - Taiwan (dříve Feiya Technology Corp.) : Flash Drive (090c:1000)
- busid 1-1.4 (1a86:7523)
QinHeng Electronics : HL-340 USB-Serial adapter (1a86:7523)Číňan, připojený do USB hubu, dostal bsuid 1-1.4. Zapamatovali jsme si to.
Nyní spouštíme démon:
root@OpenWrt:~# usbipd -Da bindujeme Číňana
root@OpenWrt:~# usbip bind -b 1-1.4
usbip: info: bind device on busid 1-1.4: completeOvěřujeme, že vše funguje:
root@OpenWrt:/home# netstat -alpt
Aktivní internetová připojení (servery a připojení)
Proto Recv-Q Send-Q Lokální adresa Cizí adresa Stav PID/Název programu
tcp 0 0 0.0.0.0:3240 0.0.0.0:* NASLOUŠÍ 1884/usbipdAbychom mohli produkt dále automaticky připojit, upravíme /etc/rc.local, přidáním před exit 0 následující:
usbipd -D &
sleep 1
usbip bind -b 1-1.4Klientská část
Zkusíme připojit zařízení k Windows 10 podle výše uvedeného návodu z openwrt.org. Hned říkám: pokus je odsouzen k neúspěchu. Za prvé se zvažuje pouze Windows 7 x64. Za druhé, je uveden odkaz na vlákno na sourceforge.net, kde je navrženo stáhnout z dropboxu opravený ovladač z roku 2014. Při pokusu o jeho spuštění pod Windows 10 a připojení k našemu zařízení dostáváme chybu:
c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip pro Windows ($Id$)
*** CHYBA: nelze najít zařízení To souvisí s tím, že klient nefunguje se serverem sestaveným pod jádrem starším než verze 3.14.
Server usbip na OpenWRT 19.07.3 je sestaven na jádru 4.14.180.
Pokračuji v hledání a narazím na aktuální vývoj klienta pro Windows na . Dobrá, byla uvedena podpora pro Windows 10 x64, ale klient je výhradně testovací, takže má řadu omezení.
Nejprve je požadováno, abyste nainstalovali certifikát, a to dvakrát. Dobrá, umístíme ho do Důvěryhodných certifikačních autorit a Důvěryhodných vydavatelů.
Dále je třeba přepnout operační systém do testovacího režimu. To se provádí příkazem
bcdedit.exe /set TESTSIGNING ONNapoprvé se mi to nepovedlo, překáželo mi secure boot. Abychom jej deaktivovali, je třeba se restartovat do UEFI a nastavit secure boot — zakázat. Na některých modelích notebooků může být nutné nastavit supervizní heslo.
Poté se spustíme do Windows a provedeme bcdedit.exe /set TESTSIGNING ON
Windows říká, že vše je v pořádku. Znovu se restartujeme a v pravém dolním rohu vidíme nápis Test Mode, verzi a číslo sestavení operačního systému.
Proč všechny tyto manipulace? Pro instalaci nepodepsaného ovladače USB/IP VHCI. To lze provést stažením souborů usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat a spuštěním s administrátorskými právy
usbip.exe installnebo druhý způsob, instalace Legacy Hardware v ručním režimu. Zvolil jsem druhou možnost, dostal jsem upozornění na instalaci nepodepsaného ovladače a souhlasil s ním.
Dále ověřujeme, že máme možnost připojit se k vzdálenému USB zařízení pomocí příkazu:
usbip.exe list -rdostáváme seznam zařízení:
c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: chyba: selhalo otevření usb id databáze
Exportovatelné USB zařízení
======================
- 192.168.31.203
1-1.4: neznámý výrobce : neznámý produkt (1a86:7523)
: /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
: neznámá třída / neznámá podtřída / neznámý protokol (ff/00/00)omlouvám se za chybu usbip: chyba: selhalo otevření usb id databáze nevěnujeme pozornost, na práci to nemá vliv.
Teď připojujeme zařízení:
c:Utilsusbip>usbip.exe attach -r 192.168.31.203 -b 1-1.4Hotovo, Windows objevila nové zařízení, teď s ním můžeme pracovat, jako by bylo fyzicky připojeno k notebooku.
S čínským gravírováním jsem si dal trochu práce, protože při pokusu o instalaci jeho ovladače CH341SER přes přiložený instalátor (ano, gravírovač na Arduinu) se USB/IP VHCI zhroutilo do BSOD. Nicméně instalace ovladače CH341SER do připojení zařízení skrze usbip.exe problém vyřešila.
Výsledek: gravírovací stroj hučí a kouří v kuchyni při otevřeném okně a zavřených dveřích, já sleduji proces pálení z vedlejší místnosti přes původní software, který necítí žádné podezření.
Použité zdroje:
Zdroj: habr.com
