Reizēm rodas vēlme strādāt ar ierīci, kas pieslēgta pa USB, to neturēt uz galda blakus klēpjdatoram. Man šādas ierīces ir ķīniešu gravieris ar 500 mW lāzeri, kas ir diezgan nepatīkama, ja ar to kontaktējas tuvu. Bez tiešas bīstamības acīm, strādājot ar lāzeru izdalās toksiskas degošo vielu paliekas, tādēļ ierīcei jāatrodas labi vēdināmā telpā un vēlams, izolētā no cilvēkiem. Bet kā tad vadīt šādu ierīci? Atbilde uz šo jautājumu es nejauši atradu, apskatot OpenWRT repozitoriju, cerot atrast cienījamu pielietojumu vecajam D-Link DIR-320 A2 maršrutētājam. Savienojumam nolēmu izmantot to, kas iepriekš tika aprakstīts Habrā. USB pār IP tunelis, tomēr visas instrukcijas tās uzstādīšanai bija zaudējušas aktuālumu, tāpēc rakstu savas.
OpenWRT ir operētājsistēma, kurai nav nepieciešams ievads, tāpēc tās uzstādīšanu neizklāstīšu. Savejamā maršrutētājam es paņēmu pēdējo stabilo OpenWrt 19.07.3 versiju un savienoju to ar galveno piekļuves punktu pa Wi-Fi kā klientu, izvēloties režīmu lan, lai nepiespiestu ugunsmūri.
Servera daļa
Rīkojamies saskaņā ar . Pēc savienojuma pa ssh uzstādām nepieciešamās paketes.
root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install kmod-usb-ohci usbip-server usbip-clientPēc tam pieslēdzam mūsu ierīci USB portam, (manā gadījumā ierīces: USB hub, zibatmiņa, kurā ir maršrutētāja failu sistēma (dēļ trūkstošā vietas iekšējā atmiņā), un tieši gravieris).
Mēģinām izvadīt pieslēgto ierīču sarakstu:
root@OpenWrt:~# usbip list -lTukšs.
Gūstot Google, tika atrasts vainīgais – tā bija bibliotēka libudev-fbsd.
Izvilkām roku darbs no repozitorija pēdējo darboties spējīgo versiju libudev_3.2-1 no OpenWRT 17.01.7 izlaiduma savai arhitektūrai, manā gadījumā tā ir libudev_3.2-1_mipsel_mips32.ipk. Ar wget/scp palīdzību lejuplādējam to maršrutētāja atmiņā un pārinstalējam
root@OpenWrt:~# opkg remove --force-depends libudev-fbsd
root@OpenWrt:~# opkg install libudev_3.2-1_mipsel_mips32.ipk
Pārbaudām:
root@OpenWrt:~# usbip list -l
- busid 1-1.1 (090c:1000)
Silicon Motion, Inc. - Taivāna (iepriekš Feiya Technology Corp.) : Flash Drive (090c:1000)
- busid 1-1.4 (1a86:7523)
QinHeng Electronics : HL-340 USB-Serial adapter (1a86:7523)Ķīniešu ierīce, kas pieslēgta USB hub, ir saņēmusi busid 1-1.4. Atcerējāmies.
Tagad palaižam demonus:
root@OpenWrt:~# usbipd -Dun piesaistām ķīniešu ierīci
root@OpenWrt:~# usbip bind -b 1-1.4
usbip: info: bind device on busid 1-1.4: completePārbaudām, vai viss darbojas:
root@OpenWrt:/home# netstat -alpt
Aktīvās interneta savienojumi (serveri un izveidotie)
Proto Recv-Q Send-Q Vietējā adrese Sveša adrese Stāvoklis PID/Programmas nosaukums
tcp 0 0 0.0.0.0:3240 0.0.0.0:* LISTEN 1884/usbipdLai turpmāk automātiski piesaistītu ierīci, rediģēsim /etc/rc.local, pievienojot pirms exit 0 nākamo:
usbipd -D &
sleep 1
usbip bind -b 1-1.4Klienta daļa
Mēģināsim pieslēgt ierīci pie Windows 10, izmantojot iepriekš minēto instrukciju no openwrt.org. Uzreiz saku: šī iecere ir lemta neveiksmei. Pirmkārt, tiek apskatīta tikai Windows 7 x64. Otrkārt, ir sniegtas saite uz tēmu sourceforge.net, kurā ieteikts lejupielādēt no Dropbox labotu 2014. gadā draiveri. Mēģinot to palaist zem Windows 10 un pieslēgties mūsu ierīcei, saņemam kļūdu:
c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip for windows ($Id$)
*** KĻŪDA: nevar atrast ierīci Tas saistīts ar to, ka klients nestrādā ar serveri, kas veidots uz kodola, kas ir vecāks par versiju 3.14.
usbip serveris uz OpenWRT 19.07.3 ir veidots uz kodola 4.14.180.
Turpinot meklējumus, saskaros ar aktuālo Windows klienta izstrādi uz . Ok, deklarēta atbalsts Windows 10 x64, bet klients ir tikai testēšanas variants, tāpēc ir vairāki ierobežojumi.
Tātad vispirms prasa instalēt sertifikātu, turklāt divas reizes. Ok, ievietojam to Trusted Root Certification Authority un Trusted Publishers.
Tālāk ir jāizdara operētājsistēmas pāreja uz testēšanas režīmu. To var izdarīt ar komandu
bcdedit.exe /set TESTSIGNING ONPirmajā reizē man neizdevās, traucēja secure boot.Lai to izslēgtu, nepieciešams restartēt UEFI un iestatīt secure boot — disable. Dažiem klēpjdatoru modeļiem var būt nepieciešama administratora parole.
Pēc tam ieejam Windows un veicam bcdedit.exe /set TESTSIGNING ON
Windows saka, ka viss ir kārtībā. Atkal restartējam, un redzam labajā apakšējā stūrī uzrakstu Test Mode, versiju un operētājsistēmas būvnumuru.
Kāpēc tad visas šīs manipulācijas? Lai instalētu neparakstītu draiveri USB/IP VHCI.Tā darīšana tiek piedāvāta, lejupielādējot failus usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat, un izpildot ar administratora tiesībām
usbip.exe installvai otrais veids, izmantojot Legacy Hardware manuāli. Es izvēlējos otro variantu, saņēmu brīdinājumu par neparakstīta draivera instalēšanu un piekritu tam.
Tālāk pārbaudām, vai mums ir iespēja pieslēgties attālinātam USB ierīcei, izpildot komandu:
usbip.exe list -rsaņemam ierīču sarakstu:
c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: kļūda: neizdevās atvērt usb id datu bāzi
Eksportējami USB ierīces
======================
- 192.168.31.203
1-1.4: nezināms piegādātājs : nezināms produkts (1a86:7523)
: /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
: nezināma klase / nezināma apakšklase / nezināma protokols (ff/00/00)par kļūdu usbip: kļūda: neizdevās atvērt usb id datu bāzi nerūpējamies, tas neietekmē darbu.
Tagad piesaistām ierīci:
c:Utilsusbip>usbip.exe attach -r 192.168.31.203 -b 1-1.4Viss, Windows atklāja jaunu ierīci, tagad ar to var strādāt tā, it kā tas fiziski būtu pieslēgts pie klēpjdatora.
Ar ķīniešu gravētāju nācās nedaudz pacīnīties, jo mēģinot instalēt tā draiveri CH341SER, izmantojot pievienoto gravētāja instalētāju (jā, gravētājs uz Arduino), USB/IP VHCI izsita Windows BSOD. Tomēr CH341SER draivera instalēšana līdz ierīces pieslēgšana, izmantojot usbip.exe, atrisināja problēmu.
Rezultāts: gravētājs trokšņo un dūmo virtuvē ar atvērtu logu un aizvērtām durvīm, es vēroju izdedzināšanas procesu no otras istabas, izmantojot dzimto programmatūru, kas nejūt viltību.
Izmantotie avoti:
Avots: habr.com
