USB/IP හීලෑ කිරීම

දේශීය ජාලයක් හරහා USB උපාංගයක් දුරස්ථ පරිගණකයකට සම්බන්ධ කිරීමේ කාර්යය නිතිපතා පැන නගී. කප්පාදුව යටතේ, මෙම දිශාවට මගේ සෙවුම් ඉතිහාසය දක්වා ඇති අතර, විවෘත මූලාශ්‍ර ව්‍යාපෘතියක් මත පදනම්ව සූදානම් කළ විසඳුමකට මාර්ගය USB/IP මෙම මාවතේ විවිධ පුද්ගලයින් විසින් ප්‍රවේශමෙන් ඇති කරන බාධක මෙන්ම ඒවා මඟ හැරිය හැකි ක්‍රම පිළිබඳ විස්තරයක් සමඟ.

පළමු කොටස, ඓතිහාසික

යන්ත්රය අථත්ය නම් - මේ සියල්ල පහසුය. ධාරකයක සිට අතථ්‍ය යන්ත්‍රයකට USB යොමු කිරීමේ ක්‍රියාකාරීත්වය VMWare 4.1 හි දර්ශනය විය. නමුත් මගේ නඩුවේදී, WIBU-KEY ලෙස හඳුනාගත හැකි ආරක්ෂක යතුර විවිධ යන්ත්‍රවලට විවිධ කාලවලදී සම්බන්ධ කළ යුතු අතර අතථ්‍ය ඒවා පමණක් නොවේ.
ඈත 2009 පළමු වටයේ සෙවීම් මා ගෙන ගියේ යකඩ කැබැල්ලක් වෙතටයි TrendNet TU2-NU4
වාසි:

  • සමහර විට එය පවා ක්රියා කරයි

එය:

  • සෑම විටම ක්රියා නොකරයි. "උපාංගය ආරම්භ කළ නොහැක" යන දෝෂය සමඟ දිවුරමින් Guardant Stealth II ආරක්ෂණ යතුර එය හරහා ආරම්භ නොවේ යැයි සිතමු.
  • කළමනාකරණ මෘදුකාංග (කියවීම - සවිකිරීම සහ ඉවත් කිරීම USB උපාංග) අන්තයටම කණගාටුදායකය. විධාන රේඛා ස්විච, ස්වයංක්රීයකරණය - නැත, අසා නැත. සෑම දෙයක්ම අතින් පමණි. නපුරු සිහිනය.
  • පාලක මෘදුකාංගය විකාශනය කිරීමෙන් ජාලය තුළම යකඩ කැබැල්ලක් සොයයි, එබැවින් මෙය ක්‍රියාත්මක වන්නේ එක් විකාශන ජාල අංශයක් තුළ පමණි. ඔබට අතින් යකඩ කැබැල්ලේ IP ලිපිනය සඳහන් කළ නොහැක. වෙනත් උපජාලයක යකඩ කෑල්ලක්? එවිට ඔබට ගැටලුවක් තිබේ.
  • සංවර්ධකයින් උපාංගය මත ලකුණු කර ඇත, දෝෂ වාර්තා යැවීමෙන් පලක් නැත.

දෙවන වටය එතරම් දුර බැහැර කාලයකදී සිදු වූ අතර ලිපියේ මාතෘකාවට මාව ගෙන ගියේය - USB/IP ව්‍යාපෘතිය. විවෘතභාවයෙන් ආකර්ෂණය වේ, විශේෂයෙන් පිරිමි ළමයින්ගෙන් ReactOS ඔවුන් වින්ඩෝස් සඳහා ධාවකයක් අත්සන් කර ඇත, එබැවින් දැන් සෑම දෙයක්ම පරීක්ෂණ මාදිලියක් වැනි කිහිලිකරු නොමැතිව x64 මත පවා ක්‍රියා කරයි. ඒ සඳහා ReactOS කණ්ඩායමට බොහෝ ස්තූතියි! සෑම දෙයක්ම ලස්සනයි, අපි එය දැනීමට උත්සාහ කරමු, එය ඇත්තෙන්ම එසේද? අවාසනාවකට මෙන්, ව්‍යාපෘතිය ද අතහැර දමා ඇති අතර, ඔබට සහාය මත ගණන් ගත නොහැක - නමුත් අපගේ එක අතුරුදහන් නොවූ තැන, මූලාශ්‍රය තිබේ, අපි එය හඳුනා ගනිමු!

දෙවන කොටස, server-linux

ජාලයක් හරහා USB උපාංග බෙදා ගන්නා USB/IP සේවාදායකයක් පිහිටුවිය හැක්කේ Linux-පාදක OS එකක පමණි. හොඳයි, 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 හට එහි Bus ID දැන ගැනීමට අවශ්‍ය බව පැහැදිලි වේ. හිතවත් නරඹන්නන්, රේක් අංක තුන කරළියේ ඇත: අපට ලබා දෙන බස් හැඳුනුම්පත 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)

චියර්ස් තුනක්, සහෝදරවරුනි! සේවාදායකයා ජාලය හරහා යකඩ කැබැල්ල බෙදා ගත් අතර අපට එය සම්බන්ධ කළ හැකිය! එය ඉතිරිව ඇත්තේ usbip daemon හි ස්වයංක්‍රීය ආරම්භය /etc/rc.local වෙත එක් කිරීමට පමණි.

usbipd -D

තුන්වන කොටස, සේවාදායකයාගේ පැත්ත සහ ව්‍යාකූල

මම ජාලය හරහා බෙදාගත් උපාංගය එම සේවාදායකයේම ඩේබියන් යන්ත්‍රයකට සම්බන්ධ කිරීමට උත්සාහ කළ අතර සම්බන්ධ වූ සියල්ල හොඳින්:

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

අපි වින්ඩෝස් වෙත යමු. මගේ නඩුවේ එය Windows Server 2008R2 සම්මත සංස්කරණය විය. නිල මාර්ගෝපදේශය මුලින්ම ධාවකය ස්ථාපනය කිරීමට ඔබෙන් අසයි. මෙම ක්රියාපටිපාටිය වින්ඩෝස් සේවාලාභියා වෙත අමුණා ඇති 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 අනුවාදයට මාරු වන විට ප්‍රොටෝකෝල අනුවාදය වෙනස් කළ නමුත් වින් සේවාදායකයා තුළ මෙය කිරීමට ඔවුන්ට අමතක විය. යෝජිත විසඳුම වන්නේ ප්‍රභව කේතයේ නියතය වෙනස් කර සේවාලාභියා නැවත ගොඩනැගීමයි.

නමුත් මෙම ක්රියා පටිපාටිය සඳහා මම ඇත්තටම Visual Studio බාගත කිරීමට අවශ්ය නැත. ඒත් මට හොඳ පරණ Hiew එකක් තියෙනවා. මූල කේතයේ, නියතය ද්විත්ව වචනයක් ලෙස ප්‍රකාශ කර ඇත. අපි 0x00000106 සඳහා ගොනුව දෙස බලමු, එය 0x00000111 සමඟ ප්‍රතිස්ථාපනය කරන්න. මතක තබා ගන්න, බයිට් අනුපිළිවෙල ආපසු හැරේ. ප්‍රතිඵලය තරග දෙකකි, පැච්:

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

Eeeee... ඔව්!

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

හා එපමණයි. සියල්ල දන්නා ගූගල් සමාගමට පවා මට මෙයට පිළිතුරු දීමට නොහැකි විය. ඒ අතරම, සේවාදායකයේ ඇති උපාංග ප්‍රදර්ශනය කිරීමේ විධානය ඉතා නිවැරදිව පෙන්වයි - මෙන්න එය යතුරයි, ඔබට එය සවි කළ හැකිය. මම ලිනක්ස් යටතේ සිට සවි කිරීමට උත්සාහ කරමි - එය ක්රියා කරයි! දැන් වින්ඩෝස් යටතේ උත්සාහ කරන්නේ නම්? ඔහ් ෂිට් - ඒක වැඩ කරනවා!

අවසාන rake: සේවාදායක කේතයට යමක් එකතු කර නැත. උපාංගයක් බෙදාගැනීමේදී, එය එහි ඇති USB descriptors ගණන කියවන්නේ නැත. තවද Linux යටතේ උපාංගය සවි කරන විට, මෙම ක්ෂේත්රය පිරී ඇත. අවාසනාවන්ත ලෙස, මම ලිනක්ස් යටතේ "make && make install" මට්ටමේ සංවර්ධනය ගැන හුරුපුරුදුය. එමනිසා, ගැටළුව තරමක් අපිරිසිදු හැක් එකකින් විසඳනු ලැබේ - /etc/rc.local වෙත එකතු කිරීම

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

අවසාන කොටස

ටික වේලාවකට පසු, එය ක්රියා කරයි. අපේක්ෂිත ප්‍රති result ලය ලබාගෙන ඇත, දැන් යතුර විකාශන ජාල අංශයෙන් පිටත ඒවා ඇතුළුව ඕනෑම පරිගණකයකට සවි කළ හැකිය (සහ සවිකර නොමැති, ඇත්ත වශයෙන්ම, ද). ඔබට අවශ්‍ය නම්, ඔබට එය shell script එකක් භාවිතයෙන් කළ හැකිය. හොඳ දේ - සතුට සම්පූර්ණයෙන්ම නොමිලේ.
මගේ අත්දැකීම් හබ්‍රාෂිටෙලිට මගේ නළලේ සටහන් වූ පෝරකය වටා යාමට උපකාරී වනු ඇතැයි මම බලාපොරොත්තු වෙමි. ඔබගේ අවදානය පිළිබඳ ස්තූතියි!

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න