Понякога се появява желанието да работите с устройство, свързано чрез USB, без да го държите на масата до лаптопа. В моем случай такова устройство е китайският гравюр с лазер от 500 мВт, нещо доста неприятно при близък контакт. Освен непосредствената опасност за очите, по време на работа с лазера се отделят токсични продукти от горене, затова устройството трябва да бъде в добре проветривано помещение и за предпочитане изолирано от хора. А как да управляваме такова устройство? Отговорът на този въпрос случайно открих, преглеждайки репозитория OpenWRT в надежда да намеря достойно приложение за стария маршрутизатор D-Link DIR-320 A2. За свързване реших да използвам описваното по-рано на Хабра USB over IP тунел, но всички инструкции за неговото инсталиране вече бяха загубили актуалност, затова пиша своя.
OpenWRT — операционна система, която не се нуждае от представяне, затова няма да описвам инсталацията ѝ. За моя маршрутизатор взех последната стабилна версия OpenWrt 19.07.3 и я свързах с основната точка за достъп по Wi-Fi като клиент, избирайки режим lan, за да не мъча защитната стена.
Серверна част
Действаме според . След свързване по ssh инсталираме необходимите пакети.
root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install kmod-usb-ohci usbip-server usbip-clientСлед това свързваме нашето устройство към USB порта на маршрутизатора (в моя случай устройствата са: USB хъб, флашка, на която е монтирана файловата система на маршрутизатора (поради недостатъчно пространство на вътрешното хранилище), и самият гравюр).
Опитваме да изведем списък на свързаните устройства:
root@OpenWrt:~# usbip list -lПразно.
Чрез гуглене намерих виновника, а именно библиотеката libudev-fbsd.
Изтегляме ръчно последната работеща версия от репозитория libudev_3.2-1 от версията OpenWRT 17.01.7 за моята архитектура, в моя случай това е libudev_3.2-1_mipsel_mips32.ipk. С помощта на wget/scp я зареждаме в паметта на маршрутизатора и преинсталираме
root@OpenWrt:~# opkg remove --force-depends libudev-fbsd
root@OpenWrt:~# opkg install libudev_3.2-1_mipsel_mips32.ipk
Проверяваме:
root@OpenWrt:~# usbip list -l
- busid 1-1.1 (090c:1000)
Silicon Motion, Inc. - Taiwan (преди Feiya Technology Corp.) : Флаш устройство (090c:1000)
- busid 1-1.4 (1a86:7523)
QinHeng Electronics : HL-340 USB-сериален адаптер (1a86:7523)Китаецът, свързан в USB хъба, получи bsuid 1-1.4. Запомнихме.
Сега стартираме демона:
root@OpenWrt:~# usbipd -Dи биндим китайца
root@OpenWrt:~# usbip bind -b 1-1.4
usbip: info: bind device on busid 1-1.4: completeПроверяваме дали всичко работи:
root@OpenWrt: /home# netstat -alpt
Активни интернет връзки (сервиз и установени)
Протокол Ресив-Q Изпрати-Q Локален адрес Чужд адрес Състояние PID/Име на програмата
tcp 0 0 0.0.0.0:3240 0.0.0.0:* СЛУШАМ 1884/usbipdЗа да свържем устройството автоматично, ще редактираме /etc/rc.local, добавяйки преди exit 0 следното:
usbipd -D &
sleep 1
usbip bind -b 1-1.4Клиентска част
Ще опитаме да свържем устройството с Windows 10, използвайки гореспоменатата инструкция от openwrt.org. Веднага казвам: начинанието е обречено на провал. Първо, разглежда се само Windows 7 x64. На второ място, дадена е връзка към тема на sourceforge.net, в която се предлага да се изтегли патчнат драйвер от Dropbox от 2014 година. При опит за стартиране под Windows 10 и свързване с нашето устройство получаваме грешка:
c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip за windows ($Id$)
*** ГРЕШКА: не може да се намери устройството Свързано е с факта, че клиентът не работи със сървър, събран под ядро по-старо от версия 3.14.
Сървърът usbip под OpenWRT 19.07.3 е събран на ядро 4.14.180.
Като продължавам търсенето, попадам на актуално разработен Windows клиент на . Ок, заявена е поддръжка на Windows 10 x64, но клиентът е само тестов и затова има редица ограничения.
Така първо искат да инсталирате сертификат, освен това два пъти. Ок, поставяме го в Trusted Root Certification Authority и Trusted Publishers.
След това е необходимо да се преведе операционната система в тестов режим. Това става с командата
bcdedit.exe /set TESTSIGNING ONОт първия път не успях, пречеше ми secure boot. За да го деактивирате, е необходимо да се рестартира в UEFI и да се зададе secure boot — disable. На някои модели лаптопи може да се изисква да се зададе парола на супервайзера.
След това влизаме в Windows и правим bcdedit.exe /set TESTSIGNING ON
Windows казва, че всичко е наред. Отново се рестартираме и виждаме в долния десен ъгъл надпис Test Mode, версията и номера на билд-а на ОС.
Каква е целта на всички тези манипулации? За инсталиране на неподписан драйвер USB/IP VHCI. Предлага се да се направи това, като се изтеглят файловете usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat, и се изпълняват с права на администратор
usbip.exe installили вторият начин, инсталиране на Legacy Hardware в ръчен режим. Избрах втория вариант, получих предупреждение за инсталиране на неподписан драйвер и се съгласих с него.
След това проверяваме дали можем да се свържем с отдалеченото USB-устройство, изпълнявайки командата:
usbip.exe list -rполучаваме списък с устройства:
c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: грешка: не успя да отвори базата данни за usb идентификатори
Износими USB устройства
======================
- 192.168.31.203
1-1.4: неизвестен производител : неизвестен продукт (1a86:7523)
: /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
: неизвестен клас / неизвестен подтип / неизвестен протокол (ff/00/00)за грешка usbip: грешка: не успя да отвори базата данни за usb идентификатори не му обръщаме внимание, не влияе на работата.
Сега биндим устройството:
c:Utilsusbip>usbip.exe attach -r 192.168.31.203 -b 1-1.4Всичко, Windows откри ново устройство, сега можем да работим с него така, сякаш е физически свързано към лаптопа.
С китайския гравьор трябваше малко да се измъча, тъй като при опит за инсталиране на драйвера CH341SER чрез предоставения с гравьора инсталатор (да, гравьорът е на Arduino), USB/IP VHCI сряга Windows до BSOD. Въпреки това, инсталацията на драйвера CH341SER до при свързване на устройството чрез usbip.exe решава проблема.
Резултат: гравьорът шумни и дими на кухнята при отворен прозорец и затворена врата, наблюдавам процеса на изгаряне от друга стая чрез собствения софтуер, който не разпознава измамата.
Използвани източници:
Източник: habr.com
