USB/IP tənzimləmə

Bir USB cihazını yerli şəbəkə vasitəsilə uzaq bir kompüterə qoşmaq vəzifəsi müntəzəm olaraq ortaya çıxır. Kəsmə altında, bu istiqamətdə axtarışlarımın tarixi və açıq mənbəli bir layihə əsasında hazır həll yolu müəyyən edilmişdir. USB/IP müxtəlif insanların bu yolda diqqətlə qoyduğu maneələrin təsviri, eləcə də onları keçməyin yolları.

Birinci hissə, tarixi

Maşın virtualdırsa - bütün bunlar asandır. USB-nin hostdan virtual maşına yönləndirilməsi funksionallığı VMWare 4.1-də ortaya çıxdı. Ancaq mənim vəziyyətimdə WIBU-KEY kimi tanınan təhlükəsizlik açarı müxtəlif vaxtlarda təkcə virtual deyil, müxtəlif maşınlara qoşulmalı idi.
Uzaq 2009-cu ildə axtarışın ilk turu məni bir dəmir parçasına apardı TrendNet TU2-NU4
Pros:

  • bəzən hətta işləyir

Eksiler:

  • həmişə işləmir. Tutaq ki, Guardant Stealth II qoruma açarı onun vasitəsilə başlamaz, “cihaz işə salına bilməz” xətası ilə söyüş söyür.
  • İdarəetmə proqramı (oxu - USB cihazlarının quraşdırılması və sökülməsi) həddindən artıq dərəcədə acınacaqlıdır. Komanda xətti açarları, avtomatlaşdırma - yox, eşitməmişəm. Hər şey yalnız əllədir. kabus.
  • nəzarət proqramı yayımla şəbəkədə dəmir parçasının özünü axtarır, ona görə də bu, yalnız bir yayım şəbəkəsi seqmentində işləyir. Dəmir parçasının IP ünvanını əl ilə təyin edə bilməzsiniz. Digər alt şəbəkədə dəmir parçası? Onda probleminiz var.
  • developers cihazda qol vurdu, səhv hesabatları göndərmək faydasızdır.

İkinci tur o qədər də uzaq olmayan vaxtlarda baş verdi və məni məqalənin mövzusuna apardı - USB/IP layihəsi. Xüsusilə uşaqlardan bəri açıqlığı ilə cəlb edir ReactOS Windows üçün bir sürücü imzaladılar, buna görə də indi hər şey hətta x64-də sınaq rejimi kimi heç bir qoltuqağacı olmadan işləyir. Buna görə ReactOS komandasına çoxlu təşəkkürlər! Hər şey gözəl səslənir, gəlin bunu hiss etməyə çalışaq, doğrudanmı belədir? Təəssüf ki, layihənin özü də tərk edildi və dəstəyə arxalana bilməzsiniz - amma bizimkilər itmədiyi yerdə mənbə oradadır, biz bunu anlayacağıq!

İkinci hissə, server-linux

Şəbəkə üzərindən USB cihazlarını paylaşan USB/IP serveri yalnız Linux əsaslı ƏS-də quraşdırıla bilər. Yaxşı, Linux Linux-dur, ona görə də minimum konfiqurasiyada, standart əl hərəkətində Debian 8 virtual maşınına quraşdırın:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install usbip

Məskunlaşdı. Bundan əlavə, İnternet usbip modulunu yükləməli olduğunuzu təklif edir, lakin - salam, ilk rake. Belə modul yoxdur. Və hamısı ona görə ki, şəbəkədəki təlimatların əksəriyyəti köhnə filial 0.1.x-ə istinad edir və ən son 0.2.0-da usbip modullarının fərqli adları var.

Buna görə:

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo lsmod | grep usbip

Yaxşı, sistem işə salındıqda onları avtomatik yükləmək üçün aşağıdakı sətirləri /etc/modules-a əlavə edək:

usbip-core
usbip-host
vhci-hcd

usbip serverinə başlayaq:

sudo usbipd -D

Bundan əlavə, universal ağıl bizə deyir ki, usbip bizə serveri idarə etməyə imkan verən skriptlərlə gəlir - şəbəkə üzərində hansı cihazı paylaşacağını göstərin, statusa baxın və s. Burada bizi başqa bir bağ aləti gözləyir - 0.2.x filialındakı bu skriptlərin adı yenidən dəyişdirildi. ilə əmrlərin siyahısını əldə edə bilərsiniz

sudo usbip

Əmrlərin təsvirini oxuduqdan sonra aydın olur ki, tələb olunan USB cihazını paylaşmaq üçün usbip onun Bus ID-sini bilmək istəyir. Hörmətli izləyicilər, XNUMX nömrəli rake arenadadır: bizə verəcək Avtobus ID lsusb (ən açıq şəkildə görünür) - bu ona uyğun deyil! Məsələ burasındadır ki, usbip USB hubları kimi aparatlara məhəl qoymur. Buna görə daxili əmrdən istifadə edəcəyik:

user@usb-server:~$ sudo usbip list -l
 - busid 1-1 (064f:0bd7)
   WIBU-Systems AG : BOX/U (064f:0bd7)

Qeyd: bundan sonra siyahılarda xüsusi USB açarım nümunəsindən istifadə edərək hər şeyi təsvir edəcəyəm. Avadanlıq adınız və VID:PID cütünüz fərqli ola bilər və fərqli olacaq. Mina Wibu-Systems AG adlanır: BOX/U, VID 064F, PID 0BD7.

İndi cihazımızı paylaşa bilərik:

user@usb-server:~$ sudo usbip bind --busid=1-1
usbip: info: bind device on busid 1-1: complete

Ura, yoldaşlar!

user@usb-server:~$ sudo usbip list -r localhost
Exportable USB devices
======================
 - localhost
        1-1: WIBU-Systems AG : BOX/U (064f:0bd7)
           : /sys/devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-1
           : Vendor Specific Class / unknown subclass / unknown protocol (ff/00/ff)

Üç salam, yoldaşlar! Server dəmir parçasını şəbəkə üzərindən paylaşdı və biz onu birləşdirə bilərik! Yalnız usbip demonunun autostartını /etc/rc.local-a əlavə etmək qalır

usbipd -D

Üçüncü hissə, müştəri tərəfi və çaşdırıcı

Paylaşılan cihazı şəbəkə üzərindən dərhal eyni serverdə Debian maşınına qoşmağa çalışdım və hər şey yaxşı bağlandı:

sudo usbip attach --remote=localhost --busid=1-1

Windows-a keçək. Mənim vəziyyətimdə bu, Windows Server 2008R2 Standard Edition idi. Rəsmi bələdçi əvvəlcə sürücünü quraşdırmağı xahiş edir. Prosedur, windows müştərisinə əlavə edilmiş readme-də mükəmməl təsvir edilmişdir, biz hər şeyi yazıldığı kimi edirik, hər şey işləyir. XP-də də heç bir problem olmadan işləyir.

Müştərini qablaşdırmadan çıxardıqdan sonra açarımızı quraşdırmağa çalışırıq:

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip_windows.c: 756 (query_interface0) recv op_common
usbip err: usbip_windows.c: 829 (attach_device) cannot find device

oh oh. Nəsə xəta baş verdi. Google-un bacarığından istifadə edirik. Sabitlərdə nəyinsə səhv olduğu barədə fraqmentli qeydlər var, server hissəsində tərtibatçılar 0.2.0 versiyasına keçərkən protokol versiyasını dəyişdilər, lakin Win müştərisində bunu etməyi unutdular. Təklif olunan həll mənbə kodundakı sabiti dəyişdirmək və müştərini yenidən qurmaqdır.

Ancaq bu prosedur üçün Visual Studio-nu yükləmək istəmirəm. Amma mənim yaxşı köhnə Hieum var. Mənbə kodunda sabit ikiqat söz kimi elan edilir. 0x00000106 ilə əvəz edərək 0x00000111 üçün fayla baxaq. Unutmayın ki, bayt sırası əksinədir. Nəticə iki matçdır, yamaq:

[usbip.exe]
00000CBC: 06 11
00000E0A: 06 11

Eeeee... bəli!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
new usb device attached to usbvbus port 1

Bu təqdimatı bitirə bilərdi, amma musiqi uzun müddət səslənmədi. Serveri yenidən işə saldıqdan sonra müştəridəki cihazın quraşdırılmadığını gördüm!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_windows.c: 829 (attach_device) cannot find device

Və bu qədər. Hətta hər şeyi bilən Google mənim üçün buna cavab verə bilməz. Və eyni zamanda, serverdə mövcud olan cihazları göstərmək əmri olduqca düzgün şəkildə göstərilir - budur, açar, onu quraşdıra bilərsiniz. Mən Linux altından montaj etməyə çalışıram - işləyir! İndi Windows altında cəhd etsəniz? Oh bok - işləyir!

Sonuncu dırmıq: server koduna bir şey əlavə edilməyib. Cihazı paylaşarkən, ondan USB deskriptorlarının sayını oxumur. Cihazı Linux altından quraşdırarkən bu sahə doldurulur. Təəssüf ki, mən Linux altında “make && make install” səviyyəsində inkişafla tanışam. Buna görə də, problem olduqca çirkli bir hack ilə həll olunur - /etc/rc.local-a əlavə olunur

usbip attach --remote=localhost --busid=1-1
usbip port
usbip detach --port=00

Final hissəsi

Bir az skripkadan sonra işləyir. İstədiyiniz nəticə əldə edildi, indi açarı yayım şəbəkəsi seqmentindən kənarda olanlar da daxil olmaqla istənilən kompüterə (və əlbəttə ki, sökülməmiş) quraşdırmaq olar. İstəyirsinizsə, shell skriptindən istifadə edərək bunu edə bilərsiniz. Nə gözəl - zövq tamamilə pulsuzdur.
Ümid edirəm ki, mənim təcrübəm habrazhiteli alnıma həkk olunmuş dırmıqdan keçməyə kömək edəcək. Diqqətinizə görə təşəkkürlər!

Mənbə: www.habr.com

Добавить комментарий