Іноді виникає бажання працювати з пристроєм, підключеним USB, не тримаючи його на столі поруч із ноутбуком. У мене таким пристроєм є китайський гравер із лазером на 500 мВт, штука досить неприємна при близькому контакті. Крім безпосередньої небезпеки для очей, в процесі роботи лазера виділяються токсичні продукти горіння, тому пристрій повинен знаходитися в приміщенні, що добре провітрюється, і бажано ізольовано від людей. А як же таким пристроєм керувати? Відповідь на це запитання я випадково знайшов, переглядаючи репозиторій OpenWRT в надії знайти гідне застосування старому роутеру D-Link DIR-320 A2. Для підключення вирішив використовувати описуваний на Хабре раніше USB over IP tunnelПроте всі інструкції з його встановлення встигли втратити актуальність, тому пишу свою.
OpenWRT - операційна система, яка не потребує представлення, тому її установку розписувати не буду. Для свого роутера взяв останній стабільний реліз OpenWrt 19.07.3 і підключив його до основної точки доступу по Wi-Fi як клієнта, вибравши режим ЛВС, щоб не мучити файрвол
Серверна частина
Діємо згідно
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 (formerly Feiya Technology Corp.) : Flash Drive (090c:1000)
- busid 1-1.4 (1a86:7523)
QinHeng Electronics : HL-340 USB-Serial adapter (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
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
Щоб далі биндити девайс автоматично, підредагуємо /etc/rc.local, додавши перед вихід 0 наступне:
usbipd -D &
sleep 1
usbip bind -b 1-1.4
Клієнтська частина
Спробуємо підключити пристрій до Windows 10, використовуючи вищезгадану інструкцію з openwrt.org. Відразу скажу: витівка приречена на провал. По-перше, розглядається лише Windows 7 x64. По-друге, дане посилання на тред на sourceforge.net, в якому пропонується завантажити з дропбоксу патчений у 2014 році драйвер. При спробі запустити його під Windows 10 і підключитися до нашого пристрою отримуємо помилку:
c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip for windows ($Id$)
*** ERROR: cannot find device
Пов'язано це з тим, що клієнт не працює з сервером, зібраним під ядро старше за версію 3.14.
Сервер usbip під OpenWRT 19.07.3 зібраний на ядрі 4.14.180.
Продовжуючи пошуки, натикаюсь на актуальну розробку віндового клієнта на
Отже, спочатку просять встановити сертифікат, до того ж двічі. Ок, поміщаємо його в Trusted Root Certification Authority та Trusted Publishers.
Далі необхідно перевести операційну систему у тестовий режим. Робиться це командою
bcdedit.exe /set TESTSIGNING ON
З першого разу у мене не вийшло, завадив безпечного завантаження. Для його відключення необхідно перезавантажитись у UEFI, і виставити secure boot — disable. На деяких моделях ноутбуків може знадобитися встановлення supervisor password.
Після цього завантажуємось у Windows і робимо bcdedit.exe /set TESTSIGNING ON
Вінда каже, що все прибл. Знову перезавантажуємося, і бачимо у правому нижньому кутку напис 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 <ip вашего роутера>
отримуємо список пристроїв:
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)
на помилку usbip: error: failed to Open usb id database не звертаємо уваги, на роботу не впливає.
Тепер біндім пристрій:
c:Utilsusbip>usbip.exe attach -r 192.168.31.203 -b 1-1.4
Все, вінда виявила новий пристрій, тепер з ним можна працювати так, ніби він фізично підключений до ноутбука.
З китайським гравером довелося трохи помучитися, так як при спробі встановити його драйвер CH341SER через інсталятор, що додався до гравера (так, гравер на Ардуїно), USB/IP VHCI роняв вінду в BSOD. Однак встановлення драйвера CH341SER до Підключення пристрою через usbip.exe вирішувало проблему.
Підсумок: гравер шумить і димить на кухні при відкритому вікні та зачинених дверях, я спостерігаю за процесом випалювання з іншої кімнати через рідну софтину, яка не відчуває каверзи.
Використані джерела:
Джерело: habr.com