ٽيمنگ USB/IP

مقامي نيٽ ورڪ ذريعي هڪ USB ڊوائيس کي ريموٽ پي سي سان ڳنڍڻ جو ڪم باقاعده طور تي پيدا ٿئي ٿو. ڪٽ جي تحت، هن طرف منهنجي ڳولا جي تاريخ مقرر ڪئي وئي آهي، ۽ هڪ کليل ذريعو منصوبي جي بنياد تي تيار ڪيل حل جو رستو USB/IP هن رستي تي مختلف ماڻهن طرفان احتياط سان مقرر ڪيل رڪاوٽن جي وضاحت سان، ۽ گڏوگڏ انهن کي نظرانداز ڪرڻ جا طريقا.

حصو پهريون، تاريخي

جيڪڏهن مشين مجازي آهي - اهو سڀ ڪجهه آسان آهي. يو ايس بي فارورڊنگ جي ڪارڪردگي هڪ ميزبان کان هڪ ورچوئل مشين ڏانهن ظاهر ٿيو VMWare 4.1 ۾. پر منهنجي صورت ۾، سيڪيورٽي چيڪ، WIBU-KEY طور سڃاتو وڃي ٿو، مختلف وقتن تي مختلف مشينن سان ڳنڍڻو پوندو هو، ۽ نه رڳو مجازي.
2009 جي دور ۾ ڳولا جو پهريون دور مون کي لوهه جو هڪ ٽڪرو سڏيو ويو TrendNet TU2-NU4
پرو:

  • ڪڏهن ڪڏهن اهو ڪم ڪري ٿو

ڪن

  • هميشه ڪم نٿو ڪري. فرض ڪريو گارڊنٽ اسٽيلٿ II جي حفاظتي چيڪ ان جي ذريعي شروع نه ٿئي، قسم کڻڻ سان غلطي "ڊوائيس شروع نه ٿي ڪري سگھجي".
  • مئنيجمينٽ سافٽ ويئر (پڙھڻ - ماؤنٽنگ ۽ ان ماؤنٽنگ يو ايس بي ڊيوائسز) انتهائي ڏکوئيندڙ آھي. ڪمانڊ لائن سوئچز، آٽوميشن - نه، نه ٻڌو آهي. سڀ ڪجهه صرف هٿ سان آهي. رات جو خواب.
  • ڪنٽرول سافٽ ويئر ڳولهي ٿو لوھ جو ٽڪرو پاڻ کي نيٽ ورڪ ۾ براڊڪاسٽنگ ذريعي، تنهنڪري اهو صرف هڪ براڊ ڪاسٽ نيٽ ورڪ جي حصي ۾ ڪم ڪري ٿو. توھان ھٿ سان لوھ جي ٽڪري جو IP پتو بيان نٿا ڪري سگھو. لوھ جو ھڪڙو ٽڪرو ٻئي سبٽ ۾؟ پوء اوھان کي هڪ مسئلو آهي.
  • ڊولپرز ڊوائيس تي اسڪور ڪيا آهن، اهو بيگ رپورٽون موڪلڻ لاء بيڪار آهي.

ٻيو دور ان وقت ۾ ٿيو جيڪو ايترو پري نه هو، ۽ مون کي مضمون جي موضوع ڏانهن وٺي ويو. USB/IP پروجيڪٽ. کليل سان ڪشش، خاص طور تي ڇوڪرن کان ReactOS انهن ونڊوز لاءِ هڪ ڊرائيور تي دستخط ڪيو، تنهن ڪري هاڻي سڀ ڪجهه ڪم ڪري ٿو x64 تي به بغير ڪنهن ڪچي جي ٽيسٽ موڊ وانگر. جنهن لاءِ ReactOS ٽيم جا ڪيترائي شڪر! هر شيءِ خوبصورت لڳي ٿي، اچو ته ان کي محسوس ڪرڻ جي ڪوشش ڪريون، ڇا واقعي ائين آهي؟ بدقسمتي سان، پروجيڪٽ پاڻ کي به ڇڏي ڏنو ويو آهي، ۽ توهان حمايت تي ڳڻپ نٿا ​​ڪري سگهو - پر جتي اسان جو غائب نه ٿيو، ذريعو اتي آهي، اسان ان کي معلوم ڪنداسين!

حصو ٻيو، سرور-لينڪس

هڪ USB/IP سرور جيڪو نيٽ ورڪ تي USB ڊوائيسز شيئر ڪري ٿو صرف لينڪس-بنياد OS تي سيٽ ڪري سگهجي ٿو. خير، لينڪس لينڪس آهي، تنهن ڪري انسٽال ڪريو ڊيبين 8 ورچوئل مشين تي گهٽ ۾ گهٽ ترتيب ۾، معياري هٿ حرڪت:

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

آباد ٿيل. وڌيڪ، انٽرنيٽ مشورو ڏئي ٿو ته توهان کي ڊائون لوڊ ڪرڻ جي ضرورت پوندي يو ايس بيپ ماڊل، پر - هيلو، پهريون ريڪ. اهڙو ڪو به ماڊل ناهي. ۽ سڀ ڇاڪاڻ ته نيٽ ورڪ تي سڀ کان وڌيڪ مينوئل پراڻي برانچ 0.1.x ڏانهن اشارو ڪن ٿا، ۽ تازو 0.2.0 ۾ يو ايس بي پي ماڊلز جا مختلف نالا آهن.

هن ڪري:

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

خير، اچو ته ھيٺيون لائينون شامل ڪريون /etc/modules انھن کي خودڪار طريقي سان لوڊ ڪرڻ لاءِ سسٽم جي شروعات تي:

usbip-core
usbip-host
vhci-hcd

اچو ته شروع ڪريون يو ايس بي پي سرور:

sudo usbipd -D

وڌيڪ، آفاقي ذهن اسان کي ٻڌائي ٿو ته يو ايس بيپ اسڪرپٽ سان گڏ اچي ٿو جيڪا اسان کي سرور کي منظم ڪرڻ جي اجازت ڏئي ٿي - ڏيکاريو ته ڪهڙي ڊوائيس نيٽ ورڪ تي شيئر ڪندو، اسٽيٽس ڏسو، وغيره. هتي هڪ ٻيو باغي اوزار اسان جي انتظار ۾ آهي - اهي اسڪرپٽ 0.2.x برانچ ۾، ٻيهر، تبديل ڪيا ويا آهن. توھان حاصل ڪري سگھوٿا حڪمن جي ھڪڙي فهرست سان

sudo usbip

حڪمن جي وضاحت پڙهڻ کان پوء، اهو واضح ٿئي ٿو ته گهربل USB ڊوائيس کي حصيداري ڪرڻ لاء، يو ايس بي پي پنهنجي بس جي سڃاڻپ ڄاڻڻ چاهي ٿو. پيارا ناظرین، ريڪ نمبر ٽي ميدان ۾ آهي: بس جي ID جيڪا اسان کي ڏيندو بي ايس ايس (اهو سڀ کان وڌيڪ واضح طريقو لڳي ٿو) - اهو هن کي مناسب ناهي! حقيقت اها آهي ته يو ايس بيپ هارڊويئر کي نظر انداز ڪري ٿو جهڙوڪ 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 ڊيمن جي خودڪار شروع کي شامل ڪرڻ لاء رهي ٿو /etc/rc.local

usbipd -D

حصو ٽي، ڪلائنٽ پاسي ۽ مونجهارو

مون ڪوشش ڪئي ته شيئر ٿيل ڊيوائس کي نيٽ ورڪ تي ڊبيان مشين سان ڳنڍڻ جي ساڳي ئي سرور تي، ۽ هر شي ٺيڪ سان ڳنڍيل آهي:

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

اچو ته ونڊوز ڏانهن وڃو. منهنجي صورت ۾ اهو ونڊوز سرور 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

اوهه. ڪجهه غلط ٿيو. اسان گوگل جي مهارت کي استعمال ڪندا آهيون. اهڙا ٽڪرا ذڪر آهن ته مستقل سان ڪجهه غلط آهي؛ سرور جي حصي ۾، ڊولپرز پروٽوڪول ورزن کي تبديل ڪيو جڏهن ورزن 0.2.0 ڏانهن سوئچ ڪيو، پر اهي هن کي Win ڪلائنٽ ۾ ڪرڻ وساري ويٺا. تجويز ڪيل حل اهو آهي ته سورس ڪوڊ ۾ مستقل کي تبديل ڪرڻ ۽ ڪلائنٽ کي ٻيهر تعمير ڪرڻ.

پر مان واقعي نٿو چاهيان ته هن طريقي جي خاطر Visual Studio ڊائون لوڊ ڪريو. پر مون کي هڪ سٺو پراڻو Hiew آهي. ماخذ ڪوڊ ۾، مستقل کي ڊبل لفظ قرار ڏنو ويو آهي. اچو ته 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

۽ اهو آهي. جيتوڻيڪ سڀ ڄاڻندڙ گوگل مون لاء اهو جواب نه ڏئي سگهيو. ۽ ساڳئي وقت، سرور تي موجود ڊوائيسز کي ڊسپلي ڪرڻ جو حڪم بلڪل صحيح طور تي ڏيکاري ٿو - هتي اهو آهي، چاٻي، توهان ان کي نصب ڪري سگهو ٿا. مان ڪوشش ڪريان ٿو لينڪس جي هيٺان مان جبل ڪرڻ - اهو ڪم ڪري ٿو! ۽ جيڪڏھن ھاڻي ونڊوز جي ھيٺان ڪوشش ڪريو؟ اوه گندي - اهو ڪم ڪري ٿو!

آخري ريڪ: سرور ڪوڊ ۾ ڪجھ شامل نه ڪيو ويو آھي. جڏهن هڪ ڊوائيس حصيداري ڪريو، اهو ان مان USB بيان ڪندڙن جو تعداد نه پڙهي. ۽ جڏهن لينڪس جي هيٺان ڊوائيس کي چڙهڻ، هي فيلڊ ڀريو ويندو آهي. بدقسمتي سان، مان لينڪس جي تحت ترقي سان واقف آهيان "make & & make install" سطح تي. تنهن ڪري، مسئلو هڪ گندي هيڪ سان حل ڪيو ويو آهي - شامل ڪرڻ /etc/rc.local

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

حصو فائنل

ٿوري دير کان پوء، اهو ڪم ڪري ٿو. مطلوب نتيجو حاصل ڪيو ويو آھي، ھاڻي چاٻي کي ڪنھن به PC تي نصب ڪري سگھجي ٿو (۽ اڻ ماؤنٽ، يقينا، پڻ)، بشمول براڊڪاسٽ نيٽ ورڪ سيڪشن کان ٻاھر. جيڪڏھن توھان چاھيو ٿا، توھان اھو ڪري سگھو ٿا شيل اسڪرپٽ استعمال ڪندي. ڇا سٺو آهي - خوشي بلڪل مفت آهي.
مون کي اميد آهي ته منهنجو تجربو habrazhiteli جي مدد ڪندو ريڪ جي چوڌاري حاصل ڪرڻ لاء جيڪو منهنجي پيشاني تي نشان لڳل آهي. توهان جي توجه لاء مهرباني!

جو ذريعو: www.habr.com

تبصرو شامل ڪريو