USB/IP реттеу

Жергілікті желі арқылы қашықтағы компьютерге USB құрылғысын қосу міндеті үнемі туындайды. Кесектің астында осы бағыттағы іздеулерімнің тарихы және ашық бастапқы жобаға негізделген дайын шешімге жол берілген. USB/IP әр түрлі адамдар осы жолда мұқият қойған кедергілерді, сондай-ақ оларды айналып өту жолдарын сипаттаумен.

Бірінші бөлім, тарихи

Егер машина виртуалды болса - мұның бәрі оңай. Хосттан виртуалды машинаға USB бағыттау функционалдығы VMWare 4.1-де пайда болды. Бірақ менің жағдайда, WIBU-KEY ретінде танылатын қауіпсіздік кілті виртуалды ғана емес, әртүрлі машиналарға әртүрлі уақытта қосылуы керек болды.
Алыстағы 2009 жылғы іздеудің бірінші раунды мені темірдің бір бөлігіне апарды TrendNet TU2-NU4
Артықшылықтары:

  • кейде тіпті жұмыс істейді

Кемшіліктері:

  • әрқашан жұмыс істемейді. Guardant Stealth II қорғау кілті ол арқылы іске қосылмады делік, «құрылғыны іске қосу мүмкін емес» қатесі бар.
  • Басқару бағдарламалық құралы (оқу - USB құрылғыларын орнату және ажырату) өте аянышты. Командалық жол қосқыштары, автоматтандыру - жоқ, естіген жоқпын. Барлығы тек қолмен. Қорқыныш.
  • басқару бағдарламалық құралы хабар тарату арқылы желідегі темір бөлігін іздейді, сондықтан бұл тек бір хабар тарату желісі сегментінде жұмыс істейді. Сіз темір бөлігінің IP мекенжайын қолмен көрсете алмайсыз. Басқа ішкі желідегі темір бөлігі ме? Сонда сізде проблема бар.
  • әзірлеушілер құрылғыда ұпай жинады, қате туралы есептерді жіберу пайдасыз.

Екінші раунд соншалықты алыс емес уақытта болды және мені мақаланың тақырыбына әкелді - USB/IP жобасы. Ашықтығымен тартады, әсіресе жігіттерден бастап ReactOS олар Windows үшін драйверге қол қойды, сондықтан қазір бәрі тіпті x64-де сынақ режимі сияқты ешқандай балдақсыз жұмыс істейді. Бұл үшін ReactOS командасына үлкен рахмет! Бәрі әдемі естіледі, оны сезінуге тырысайық, шынымен солай ма? Өкінішке орай, жобаның өзі де бас тартылды және сіз қолдауға сене алмайсыз - бірақ біздікі жоғалмаған жерде, дерек көзі сонда, біз оны анықтаймыз!

Екінші бөлім, сервер-linux

USB құрылғыларын желі арқылы ортақ пайдаланатын USB/IP серверін тек Linux негізіндегі ОЖ орнатуға болады. Linux - бұл Linux, сондықтан Debian 8 виртуалды машинасына минималды конфигурацияда, стандартты қол қозғалысын орнатыңыз:

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

Орнықты. Әрі қарай, Интернет сізге usbip модулін жүктеп алу керек екенін айтады, бірақ - сәлем, бірінші рейк. Мұндай модуль жоқ. Желідегі нұсқаулықтардың көпшілігі ескі 0.1.x тармағына сілтеме жасайтындықтан және соңғы 0.2.0-де usbip модульдерінің әртүрлі атаулары бар.

Сондықтан:

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

Жүйені іске қосқан кезде оларды автоматты түрде жүктеу үшін /etc/modules ішіне келесі жолдарды қосамыз:

usbip-core
usbip-host
vhci-hcd

usbip серверін бастайық:

sudo usbipd -D

Әрі қарай, әмбебап ақыл бізге usbip серверді басқаруға мүмкіндік беретін сценарийлермен бірге келетінін айтады - ол желі арқылы қандай құрылғыны бөлісетінін көрсету, күйді көру және т.б. Мұнда бізді тағы бір бақша құралы күтіп тұр - 0.2.x тармағындағы бұл сценарийлер қайтадан аталды. көмегімен пәрмендер тізімін алуға болады

sudo usbip

Пәрмендердің сипаттамасын оқығаннан кейін, қажет USB құрылғысын ортақ пайдалану үшін usbip өзінің автобус идентификаторын білгісі келетіні белгілі болады. Құрметті көрермендер, №XNUMX рейк аренада: автобустың идентификаторы бізге береді lsusb (бұл ең айқын әдіс болып көрінетін) - бұл оған сәйкес келмейді! Факт мынада, usbip USB хабтары сияқты аппараттық құралдарды елемейді. Сондықтан біз кірістірілген пәрменді қолданамыз:

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

Ескертпе: бұдан әрі тізімдерде мен өзімнің арнайы USB кілтімнің мысалын қолдана отырып, барлығын сипаттайтын боламын. Аппараттық құрал атауы мен VID:PID жұбы әртүрлі болуы мүмкін және болады. Шахта Wibu-Systems AG деп аталады: BOX/U, VID 064F, PID 0BD7.

Енді біз құрылғымызды бөлісе аламыз:

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

Ура, жолдастар!

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)

Үш сәлем, жолдастар! Сервер желі арқылы темір бөлігін бөлісті, біз оны қоса аламыз! /etc/rc.local ішіне usbip демонының автоқосуын қосу ғана қалады

usbipd -D

Үшінші бөлім, клиенттік және түсініксіз

Мен ортақ құрылғыны желі арқылы бірдей сервердегі Debian машинасына қосуға тырыстым және бәрі жақсы қосылды:

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

Windows жүйесіне көшейік. Менің жағдайда бұл Windows Server 2008R2 Standard Edition болды. Ресми нұсқаулық алдымен драйверді орнатуды сұрайды. Процедура windows клиентіне тіркелген readme файлында тамаша сипатталған, біз барлығын жазылғандай жасаймыз, бәрі ойдағыдай болады. XP жүйесінде ол еш қиындықсыз жұмыс істейді.

Клиентті орауыштан шығарғаннан кейін біз кілтті орнатуға тырысамыз:

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

Ой ой. Бірдеңе дұрыс болмады. Біз Google шеберлігін пайдаланамыз. Тұрақтыларда бірдеңе дұрыс емес екендігі туралы фрагментті ескертулер бар, сервер бөлігінде әзірлеушілер 0.2.0 нұсқасына ауысқан кезде протокол нұсқасын өзгертті, бірақ олар Win клиентінде мұны ұмытып кетті. Ұсынылған шешім бастапқы кодтағы тұрақтыны өзгерту және клиентті қайта құру болып табылады.

Бірақ мен бұл процедура үшін Visual Studio бағдарламасын жүктеп алғым келмейді. Бірақ менде жақсы ескі Хиу бар. Бастапқы кодта тұрақты қос сөз ретінде жарияланған. 0x00000106 файлын 0x00000111 деп ауыстырып көрейік. Есіңізде болсын, байт реті кері болады. Нәтиже екі сәйкестік, патч:

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

Еееее... иә!

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

Бұл презентацияны аяқтауы мүмкін еді, бірақ музыка ұзақ ойнамады. Серверді қайта жүктегеннен кейін мен клиенттегі құрылғының орнатылмағанын білдім!

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

Болды. Тіпті бәрін білетін Google мен үшін бұл жауап бере алмады. Сонымен қатар, серверде қол жетімді құрылғыларды көрсету пәрмені өте дұрыс көрсетіледі - міне, кілт, оны орнатуға болады. Мен Linux жүйесінен орнатуға тырысамын - ол жұмыс істейді! Ал енді Windows жүйесінен әрекет етсеңіз? Ой, бұл жұмыс істейді!

Соңғы рейк: сервер кодында бірдеңе қосылмаған. Құрылғыны ортақ пайдалану кезінде ол одан USB дескрипторларының санын оқымайды. Құрылғыны Linux астынан орнату кезінде бұл өріс толтырылады. Өкінішке орай, мен Linux жүйесінде «жасау және орнату» деңгейіндегі әзірлеумен таныспын. Сондықтан, мәселе /etc/rc.local файлына қосу арқылы өте лас хакпен шешіледі

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

Финал бөлім

Біраз скрипкадан кейін ол жұмыс істейді. Қажетті нәтиже алынды, енді кілтті кез келген компьютерге орнатуға болады (және, әрине, ажыратылған), соның ішінде таратылатын желі сегментінен тыс. Қаласаңыз, оны қабық сценарийі арқылы жасауға болады. Қандай жақсы - ләззат мүлдем тегін.
Менің тәжірибем хабразителиге маңдайыма жазылған тырманы айналып өтуге көмектеседі деп үміттенемін. Назарларыңызға рахмет!

Ақпарат көзі: www.habr.com

пікір қалдыру