USB/IPని మచ్చిక చేసుకోవడం

స్థానిక నెట్‌వర్క్ ద్వారా USB పరికరాన్ని రిమోట్ PCకి కనెక్ట్ చేసే పని క్రమం తప్పకుండా తలెత్తుతుంది. కట్ కింద, ఈ దిశలో నా శోధనల చరిత్ర సెట్ చేయబడింది మరియు ఓపెన్ సోర్స్ ప్రాజెక్ట్ ఆధారంగా రెడీమేడ్ పరిష్కారానికి మార్గం. USB/IP ఈ మార్గంలో వివిధ వ్యక్తులు జాగ్రత్తగా సెట్ చేసిన అడ్డంకుల వివరణతో పాటు వాటిని దాటవేయడానికి మార్గాలు.

మొదటి భాగం, చారిత్రకం

యంత్రం వర్చువల్ అయితే, ఇదంతా సులభం. హోస్ట్ నుండి వర్చువల్ మెషీన్‌కు USB ఫార్వార్డింగ్ యొక్క కార్యాచరణ VMWare 4.1లో కనిపించింది. కానీ నా విషయంలో, WIBU-KEYగా గుర్తించబడిన భద్రతా కీని వేర్వేరు సమయాల్లో వేర్వేరు యంత్రాలకు కనెక్ట్ చేయాలి మరియు వర్చువల్ వాటిని మాత్రమే కాకుండా.
సుదూర 2009లో మొదటి రౌండ్ శోధన నన్ను ఇనుప ముక్క అని పిలవబడే వైపుకు నడిపించింది TrendNet TU2-NU4
ప్రోస్:

  • కొన్నిసార్లు అది కూడా పని చేస్తుంది

కాన్స్:

  • ఎల్లప్పుడూ పని చేయదు. గార్డెంట్ స్టెల్త్ II రక్షణ కీ దాని ద్వారా ప్రారంభం కాలేదని అనుకుందాం, "పరికరాన్ని ప్రారంభించడం సాధ్యం కాదు" అనే లోపంతో ప్రమాణం చేయండి.
  • మేనేజ్‌మెంట్ సాఫ్ట్‌వేర్ (USB పరికరాలను చదవడం - మౌంటు చేయడం మరియు అన్‌మౌంట్ చేయడం) అత్యంత దయనీయంగా ఉంది. కమాండ్ లైన్ స్విచ్‌లు, ఆటోమేషన్ - లేదు, వినలేదు. అంతా కేవలం చేతితో మాత్రమే. పీడకల.
  • కంట్రోల్ సాఫ్ట్‌వేర్ బ్రాడ్‌కాస్టింగ్ ద్వారా నెట్‌వర్క్‌లోని హార్డ్‌వేర్ కోసం శోధిస్తుంది, కాబట్టి ఇది ఒక ప్రసార నెట్‌వర్క్ విభాగంలో మాత్రమే పని చేస్తుంది. మీరు చేతితో ఇనుము ముక్క యొక్క IP చిరునామాను పేర్కొనలేరు. ఇతర సబ్‌నెట్‌లో ఇనుము ముక్క ఉందా? అప్పుడు మీకు సమస్య ఉంది.
  • డెవలపర్లు పరికరంలో స్కోర్ చేసారు, బగ్ నివేదికలను పంపడం పనికిరానిది.

రెండవ రౌండ్ అంత దూరం లేని సమయాల్లో జరిగింది మరియు నన్ను వ్యాసం యొక్క అంశానికి దారితీసింది - USB/IP ప్రాజెక్ట్. నిష్కాపట్యతతో ఆకర్షిస్తుంది, ముఖ్యంగా అబ్బాయిల నుండి ReactOS వారు Windows కోసం డ్రైవర్‌పై సంతకం చేసారు, కాబట్టి ఇప్పుడు ప్రతిదీ టెస్ట్ మోడ్ వంటి క్రచెస్ లేకుండా x64లో కూడా పని చేస్తుంది. దీని కోసం ReactOS బృందానికి చాలా ధన్యవాదాలు! ప్రతిదీ అందంగా ఉంది, అనుభూతి చెందడానికి ప్రయత్నిద్దాం, ఇది నిజంగా అలా ఉందా? దురదృష్టవశాత్తు, ప్రాజెక్ట్ కూడా వదిలివేయబడింది మరియు మీరు మద్దతును లెక్కించలేరు - కానీ మాది ఎక్కడ కనిపించదు, మూలం ఉంది, మేము దానిని కనుగొంటాము!

రెండవ భాగం, సర్వర్-లైనక్స్

నెట్‌వర్క్ ద్వారా USB పరికరాలను షేర్ చేసే USB/IP సర్వర్ Linux-ఆధారిత OSలో మాత్రమే సెటప్ చేయబడుతుంది. బాగా, Linux Linux, కాబట్టి కనీస కాన్ఫిగరేషన్, ప్రామాణిక చేతి కదలికలో డెబియన్ 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 దాని బస్ IDని తెలుసుకోవాలనుకుంటుందని స్పష్టమవుతుంది. ప్రియమైన వీక్షకులారా, రేక్ నంబర్ త్రీ రంగంలో ఉంది: మాకు అందించే బస్ ID lsusb (ఇది చాలా స్పష్టమైన మార్గం అనిపిస్తుంది) - ఇది ఆమెకు సరిపోదు! వాస్తవం ఏమిటంటే USB హబ్‌ల వంటి హార్డ్‌వేర్‌ను usbip విస్మరిస్తుంది. కాబట్టి, మేము అంతర్నిర్మిత ఆదేశాన్ని ఉపయోగిస్తాము:

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

మూడవ భాగం, క్లయింట్ వైపు మరియు గందరగోళంగా ఉంది

నేను నెట్‌వర్క్‌లో భాగస్వామ్య పరికరాన్ని అదే సర్వర్‌లో డెబియన్ మెషీన్‌కు కనెక్ట్ చేయడానికి ప్రయత్నించాను మరియు ప్రతిదీ సరిగ్గా కనెక్ట్ చేయబడింది:

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

విండోస్‌కి వెళ్దాం. నా విషయంలో ఇది Windows Server 2008R2 స్టాండర్డ్ ఎడిషన్. ముందుగా డ్రైవర్‌ను ఇన్‌స్టాల్ చేయమని అధికారిక గైడ్ మిమ్మల్ని అడుగుతుంది. విండోస్ క్లయింట్‌కు జోడించిన రీడ్‌మీలో ఈ విధానం ఖచ్చితంగా వివరించబడింది, మేము వ్రాసినట్లుగా ప్రతిదీ చేస్తాము, ప్రతిదీ పని చేస్తుంది. 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కి మారేటప్పుడు ప్రోటోకాల్ సంస్కరణను మార్చారు, కానీ వారు విన్ క్లయింట్‌లో దీన్ని చేయడం మర్చిపోయారు. ప్రతిపాదిత పరిష్కారం సోర్స్ కోడ్‌లోని స్థిరాంకాన్ని మార్చడం మరియు క్లయింట్‌ను పునర్నిర్మించడం.

కానీ ఈ విధానం కోసం నేను నిజంగా విజువల్ స్టూడియోని డౌన్‌లోడ్ చేయకూడదనుకుంటున్నాను. కానీ నాకు మంచి పాత హివ్ ఉంది. సోర్స్ కోడ్‌లో, స్థిరాంకం డబుల్ వర్డ్‌గా ప్రకటించబడింది. 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

మరియు అంతే. అన్ని తెలిసిన Google కూడా నాకు దీనికి సమాధానం చెప్పలేకపోయింది. మరియు అదే సమయంలో, సర్వర్‌లో అందుబాటులో ఉన్న పరికరాలను ప్రదర్శించడానికి ఆదేశం చాలా సరిగ్గా చూపిస్తుంది - ఇక్కడ ఇది, కీ, మీరు దానిని మౌంట్ చేయవచ్చు. నేను Linux క్రింద నుండి మౌంట్ చేయడానికి ప్రయత్నిస్తున్నాను - ఇది పనిచేస్తుంది! మరియు ఇప్పుడు Windows కింద నుండి ప్రయత్నించినట్లయితే? ఓహ్ షిట్ - ఇది పనిచేస్తుంది!

చివరి రేక్: సర్వర్ కోడ్‌లో ఏదో జోడించబడలేదు. పరికరాన్ని భాగస్వామ్యం చేస్తున్నప్పుడు, అది దాని నుండి USB డిస్క్రిప్టర్ల సంఖ్యను చదవదు. మరియు Linux క్రింద నుండి పరికరాన్ని మౌంట్ చేస్తున్నప్పుడు, ఈ ఫీల్డ్ నిండి ఉంటుంది. దురదృష్టవశాత్తూ, Linuxలో “మేక్ && ఇన్‌స్టాల్ చేయండి” స్థాయిలో డెవలప్‌మెంట్ గురించి నాకు బాగా తెలుసు. అందువల్ల, సమస్య మురికిగా ఉండే హాక్‌తో పరిష్కరించబడుతుంది - /etc/rc.localకి జోడించడం

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

పార్ట్ ఫైనల్

కొంత ఫిడ్లింగ్ తర్వాత, అది పని చేస్తుంది. కోరుకున్న ఫలితం పొందబడింది, ఇప్పుడు కీని ప్రసార నెట్‌వర్క్ సెగ్మెంట్ వెలుపల ఉన్న వాటితో సహా ఏదైనా PCకి (మరియు అన్‌మౌంట్ చేయబడిన, కోర్సు యొక్క కూడా) మౌంట్ చేయవచ్చు. మీకు కావాలంటే, మీరు షెల్ స్క్రిప్ట్‌ని ఉపయోగించి దీన్ని చేయవచ్చు. ఏది బాగుంది - ఆనందం పూర్తిగా ఉచితం.
నా అనుభవం నా నుదిటిపై ముద్రించిన రేక్ చుట్టూ తిరగడానికి హబ్రాజితేలికి సహాయపడుతుందని నేను ఆశిస్తున్నాను. మీరు ఆసక్తి చూపినందుకు ధన్యవాదములు!

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి