স্থির নামে ইউএসবি ডিভাইস কীভাবে বাঁধবেন?


43

আমার একটি আরডুইনো রয়েছে যা কখনও কখনও আমার সাথে স্ক্রিপ্টকে ব্যর্থ করে তোলে /dev/ttyUSB0এবং এর সাথে অন্য সময় আবদ্ধ হয় /dev/ttyUSB1

আমি আমার ডিভাইসটি কোথায় থাকতে পারে তার সমস্ত সম্ভাবনাগুলি গণনা করতে চাই না, তবে আমি বরং এটি স্থির কোথাও আবদ্ধ থাকতে চাই /dev/arduino

আমি কীভাবে এটি অর্জন করব?


4
কেবল একটি সরল উদেব-বিধি লিখুন যা এর ভিআইডি ও পিআইডি দ্বারা ডানদিকে তৈরি করতে সিমিলিংক / দেব / আরডুইনোকে নিয়োগ করবে।
এডি_ইম


উত্তর:


41

প্রস্তাবিত হিসাবে, আপনি কিছু udev নিয়ম যোগ করতে পারেন। আমি এতে সম্পাদনা করেছি /etc/udev/rules.d/10-local.rules:

ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="my_uart"

আপনি চালিয়ে আপনার ডিভাইসের ভেরিয়েবলগুলি পরীক্ষা করতে পারেন

udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB0)

এখানে আরও গভীরতার গাইড রয়েছে যা আপনি http://www.reectedated.net/writing_udev_rules.html এ পড়তে পারেন


কবজির মতো কাজ করেছেন। একটি প্রশ্ন: কিভাবে প্রস্থান করবেন udevam? এবং এটি লক্ষ করা গুরুত্বপূর্ণ যে এর my_uartঅধীনে সিমলিংক তৈরি করে /dev/my_uart। আমি প্রথম প্রথম লিখলাম /dev/arduinoএবং এটি arduinoযথেষ্ট ব্যর্থ হলেও ব্যর্থ হয়েছিল ।
k0pernikus

udevadmএটি হয়ে গেলে নিজেই প্রস্থান করা উচিত।
কোট্টে

তারপরে কোনও অজানা কারণে প্রতিবেদনটি তৈরি করার সময় এটি টার্মিনাল সেশনটি আমার রাস্পবেরি পাইতে হিমশীতল করে।
k0pernikus

35

উপরের নিয়ম বাক্য গঠনটি কিছু বিতরণে কাজ করতে পারে তবে খনিতে (রাস্পবিয়ান) কাজ করে না। যেহেতু আমি কোনও একক দস্তাবেজ পাই নি যা এখানে সমস্ত ইনস এবং আউটগুলি ব্যাখ্যা করে, তাই আমি এখানে খুঁজে পেতে আমার নিজের লিখেছিলাম । এটি এটিকেই ফোটায়।
1. ttyUSB এ কী রয়েছে তা সন্ধান করুন:

dmesg | grep ttyUSB  

2. ডিভাইসের সমস্ত বৈশিষ্ট্য তালিকাবদ্ধ করুন:

udevadm info --name=/dev/ttyUSBx --attribute-walk

(অবশ্যই এক্স এর পরিবর্তে আপনার ডিভাইস নম্বর (গুলি) সহ)। একটি অনন্য শনাক্তকারী সেট বেছে নিন, যেমন আইডভেেন্ডার + আইডি প্রোডাক্ট। আপনার যদি একই আইডভেেন্ডার এবং আইডিপ্রডাক্ট সহ একাধিক ডিভাইস থাকে তবে আপনার সিরিয়াল নাম্বারের প্রয়োজনও হতে পারে। সিরিয়াল নম্বর প্রতিটি ডিভাইসের জন্য অনন্য হওয়া উচিত।
৩. /etc/udev/rules.d/99-usb-serial.rulesএই লাইনের মতো কিছু দিয়ে একটি ফাইল তৈরি করুন :

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name" 

(ধরে নিই যে আপনার সেখানে সিরিয়াল নম্বর দরকার নেই, এবং অবশ্যই আইডিভেন্ডর এবং আইডি প্রোডাক্টের সংখ্যাগুলি সহ যা আপনি ২ য় ধাপে পেয়েছেন
4.. নতুন নিয়মটি লোড করুন:

sudo udevadm trigger

৫. যা ঘটেছে তা যাচাই করুন:

ls -l /dev/your_device_name  

সিমলিংকটি কী ttyUSB নাম্বারে গেছে তা প্রদর্শিত হবে। যদি তা হয় /dev/ttyUSB1তবে তা কে এবং এটি কোন গ্রুপের মালিক তা যাচাই করুন:

ls -l /dev/ttyUSB1   

তারপরে এটির মজাদার জন্য:

udevadm test -a -p  $(udevadm info -q path -n /dev/your_device_name)

সুতরাং idVendorএবং যদি idProductএকই রকম হয় তবে এর কোনও সমাধান আছে কি? (দুটি সেন্সর ইউআরটি মডিউলগুলিতে অভিন্ন মডেল ইউএসবিতে সংযুক্ত)
স্টিভেন লু

@ স্টেভেনলু হ্যাঁ, পদক্ষেপ 2 দেখুন, udevadm info --name=/dev/ttyUSB1 --attribute-walkউভয় ডিভাইসের জন্য করুন এবং ক্রমিক সংখ্যাগুলি সন্ধান করুন, প্রতিটি ডিভাইসের জন্য এগুলি অনন্য হওয়া উচিত। যদি আপনার সেন্সরগুলির কোনও ক্রমিক নম্বর না থাকে তবে আপনি কী তা নির্দিষ্ট করতে পারবেন?
রল্ফব্লাই

এটা দুর্দান্ত, আমি যখন এই চেষ্টা করব তখন আমি আবার রিপোর্ট করব
স্টিভেন লু

আমার $ 2 ইউএসবি থেকে ইউআরটি ডংগলের সিরিয়াল নম্বর রয়েছে 0001। আমি অবাক হয়ে বলতে পারি না। দেখে মনে হচ্ছে তাদের আউটপুট প্রোটোকলের ভিত্তিতে সেন্সরগুলি সনাক্ত করতে হবে।
স্টিভেন লু

পছন্দ করুন এফটিআইডিআই ইউএসবি-ইউআরটি রূপান্তরকারীদের একটি অনন্য সিরিয়াল নম্বর রয়েছে, আফাইক। কয়েকটি অতিরিক্ত টাকা, তবে বিকাশের জন্য কম সময়।
রল্ফব্লাই

9

একাধিক-অভিন্ন-ইউএসবি-ডিভাইস সমস্যা

আমার কাছে চারটি ক্যামেরা সহ রাস্পেরি পাই রয়েছে। আমি, pix নিতে fswebcamযা শনাক্ত ক্যামেরা /dev/video0.. video3। কখনও কখনও ক্যামেরা video0, vide02, video4এবং video6কিন্তু আমরা এখন জন্য যে ভুলে যেতে পারেন।

আমার একটি ক্যামেরা নম্বর সনাক্ত করার জন্য একটি অবিরাম আইডি প্রয়োজন যাতে উদাহরণস্বরূপ video0সর্বদা একই ক্যামেরা থাকায় আমি ছবিগুলি ক্যাপশন করি। দুর্ভাগ্যক্রমে এটি নির্ভরযোগ্যভাবে ঘটে না - বুটে, ক্যামেরাগুলি গণনা করা হয় video0.. video3তবে সবসময় একইভাবে হয় না।

ক্যামেরা সমস্ত একই আইডি এবং ক্রমিক নম্বর আছে।

এই সমস্যার সমাধানে ইউদেব বিধি জড়িত, তবে সেখানে প্রচুর ফিশুক রয়েছে।

কমান্ড জারি করলে

udevadm info –attribute-walk –path=/dev/video0

আপনি আউটপুট একটি স্কিড পেতে কিন্তু প্রধান বিট হয়

KERNEL=”video0”, SUBSYSTEM=”video4linux” and KERNELS=”1:1.2.4:1.0”.

কার্নেলস বিটটি একটি ইউএসবি হাব পোর্ট। চারটি ক্যামেরা সহ এগুলির মধ্যে চারটি রয়েছে - সেগুলি পুনরায় বুটে পরিবর্তন হয় না, তবে video{x}কোনও বন্দরের সাথে সম্পর্কিত পরিবর্তন হতে পারে

সুতরাং একটি ইউএসবি হাব পোর্টে একটি ভিডিও নম্বর টাই করার জন্য আমাদের একটি ওদেব নিয়ম প্রয়োজন - এরকম কিছু:

KERNEL==”video0”,SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0”,SYMLINK+=”camera0” 

দেখতে সহজ দেখাচ্ছে - এর সাথে ক্যামেরাটি অ্যাক্সেস করুন

fswebcam –d  $realpath /dev/camera0

এটি কাজ না করে - আপনি যদি এটি কোনও ওদেব নিয়মে রাখেন এবং সিস্টেমটি বিভিন্ন বন্দরে ভিডিও0 (বুট-এ) বরাদ্দ করে তবে উদেব নিয়ম উপেক্ষা করা হয়। থেকে সিমবলিক লিঙ্ক /dev/camera0মূলত বলছেন no such device। স্কয়ার এক।

আমরা যা চাই তা হ'ল কোনও video{x}সংখ্যার নয়, একটি ইউএসবি হাব ঠিকানার সাথে একটি সিমিলিঙ্ক বাঁধাই । এটি একটি পাইথন প্রোগ্রাম নিয়েছে।

প্রথম পদক্ষেপ ছিল চালানো

fswebcam –d /dev/video${x}  tst.jpg

জন্য x1 এবং 8 অস্তিত্ব মধ্যে tst.jpgপ্রতিটি কলের পর শনাক্ত এই ভিডিওটির সংখ্যার উপর একটি ক্যামেরা কিনা। এটি থেকে সক্রিয় ভিডিও নম্বরগুলির একটি তালিকা তৈরি করুন। আমার অভিজ্ঞতা হয়েছে যে এটি হয় 0,1,2,3বা 0,2,4,6আমি ব্যবহার করা ক্যামেরাগুলির জন্য।

অন্যরা অবশ্যই একটি ভিন্ন প্রক্রিয়া ব্যবহার করে এই তালিকাটি তৈরি করতে পারেন।

তারপরে তালিকার প্রতিটি ভিডিও নম্বরের জন্য রান করুন

udevadm info –attribute-walk –path=/dev/videox > dd

এবং KERNELS= lineথেকে এক্সট্রাক্ট dd। এই প্রক্রিয়াটি থেকে আপনি ক্যামেরাগুলির জন্য ইউএসবি পোর্ট অ্যাড্রেসের একটি তালিকা শেষ করেন। এই তালিকাটি বাছাই করুন যাতে পরবর্তী ধাপে আপনি সর্বদা একই ক্রমে প্রক্রিয়া করুন। এটিকে "ঠিকানা তালিকা" বলুন।

udevadm … > ddজিনিসটি আবার চালান এবং দেখতে একটি তালিকা তৈরি করুন

KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camerax”. Call this the “video list”.

এখন ঠিকানা তালিকার মধ্য দিয়ে পদক্ষেপ দিন - প্রতিটি প্রবেশের জন্য ভিডিও তালিকা থেকে সংশ্লিষ্ট এন্ট্রি সন্ধান করুন। লাইনের সংকলনের মতো দেখতে একটি নতুন তালিকা তৈরি করুন

KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camera2”

X (syMLink নম্বর) ঠিকানা তালিকার ক্রম সংখ্যা দ্বারা প্রতিস্থাপিত হয়েছে।

এখন আপনার একটি ওদেব বিধি রয়েছে যা কাজ করে। একটি ইউএসবি হাব ঠিকানার সাথে বাঁধা একটি সিমিলিংক বুট করার সময় সেই বন্দরে কী ভিডিও নম্বর বরাদ্দ করা যায় তা বিবেচনা করে না।

একটি ফাইলের মধ্যে চূড়ান্ত তালিকা লিখুন /etc/udev/rules.d/cam.rulesudevadm triggerএটি সক্রিয় করতে চালান এবং কাজটি শেষ হয়েছে। /dev/camera2তার ভিডিও নম্বর নির্বিশেষে একই ক্যামেরা (ইউএসবি পোর্ট) হবে।


ইউনিক্স স্ট্যাকেক্সচেঞ্জে স্বাগতম। মার্কডাউন ব্যবহার করে আপনার উত্তরটি ফর্ম্যাট করুন। আমি শুধু এটি আপনার জন্য করেছিলাম। এছাড়াও মনে রাখবেন যে আমরা উত্তরগুলি পয়েন্ট হতে চাই। এটি একটি ব্লগ এন্ট্রি (যা সম্পূর্ণ খারাপ নয়) এর মতো আরও পড়েছে তবুও এটি কার্যকর হয়নি এমন পদ্ধতির বিষয়ে প্রথমে পড়তে তেমন সহায়ক নয়। আপনি সেই অংশটি স্ক্র্যাপ করতে পারেন।
k0pernikus

দুঃখিত। আমি এখানে নতুন. আমি কয়েক মাস ধরে এই সমস্যাটি নিয়ে গবেষণা করেছি। আমি অন্যদের একই সমস্যার সাথে লড়াই করতে দেখেছি এবং আমার পক্ষে কার্যকর এমন কোনও উত্তর আমি পাইনি। ঠিক তাই আমি জানি, আপনি এই জাতীয় পোস্ট করার পরামর্শ কোথায় দেবেন? আমি নিজেকে সংযত করেছিলাম এবং পাইথন উত্সটি অন্তর্ভুক্ত করি না :-)
ইয়ান বোগ

1

আমি এর মধ্যে একটি অনন্য ডিভাইস সন্ধান করতে সক্ষম হয়েছি /dev/serial/by-id। আমি এখনও রিবুট চেষ্টা করিনি, তবে সেই ডিরেক্টরিতে থাকা ফাইলগুলি উপযুক্ত ডিভাইস ফাইলের ( ttyACM[0-9]) .` এর লিঙ্ক ছিল `

আমি রাস্পবেরি পাইতে খিলান লিনাক্স চালাচ্ছি, তবে আমি কেবল find"আরডুইনো" সম্বলিত ফাইল নামগুলির জন্য এগুলি পেরিয়ে হোঁচট খেয়েছি। আমার অরুডিনোগুলিতে / থেকে ডেটা পড়ার / লেখার জন্য ডিভাইস হিসাবে সেই ফাইলগুলি ব্যবহার করে আমার পাইথন প্রোগ্রামগুলি সূক্ষ্মভাবে চালিত হয় (এখন পর্যন্ত, একক পাইতে দুটি)।


0

কেবল এটুকু বলার জন্য যে উপরেরগুলি আমার পক্ষে কাজ করেছে এবং / ইত্যাদি / fstab এ প্রবেশ করার পরে আমার জন্য ডিভাইসটি স্বয়ংক্রিয়ভাবে চালিয়েছে (এবং এটি লাঠিটি অপসারণের পরেও আহ্বান জানায়)

অর্থাত

/ Etc / fstab ফাইলের

# See /etc/udev/rules.d/5-usb-disk.rules
/dev/backup     /vol/backup     ext4    defaults,errors=remount-ro 0       1

বিড়াল /etc/udev/rules.d/5-usb-stick.rules

#
# the next line creates a symlink to this disk drive called /dev/backup 
# i.e.
#   root:# ls -la /dev/backup 
#   lrwxrwxrwx 1 root root 3 Jul 22 19:33 /dev/backup -> sg0

# Backup usb stick - create /dev/backup
# ATTRS{model}=="Cruzer Blade    "
ACTION=="add", ATTRS{model}=="Cruzer Blade    ", SYMLINK+="backup"

# Clean up after removal  
ACTION=="remove", ATTRS{model}=="Cruzer Blade    ", RUN+="/bin/umount /vol/backup"

সুতরাং আমার ইউএসবি স্টিক afterোকানোর পরে আমি পাই:

root:# mount | grep sd
/dev/sda1 on /vol/backup type ext4 (rw,relatime,errors=remount-ro,data=ordered)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.