Понякога възниква желание да работя с устройство, свързано чрез 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Празно.
Чрез търсене в Google открих проблемния елемент - библиотеката 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-Serial адаптер (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
Активни интернет връзки (сървъри и установени)
Протокол Recv-Q Send-Q Локален адрес Отдалечен адрес Състояние PID/Име на програмата
tcp 0 0 0.0.0.0:3240 0.0.0.0:* LISTEN 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. На някои модели лаптопи може да е необходимо задаване на supervisor password.
След това се зареждаме в 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 id база данни
Изнесливи 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 id база данни не му обръщайте внимание, не влияе на работата.
Сега свързваме устройството:
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
