কীভাবে একটি / ডিভ / টিটিইউএসবি-র জন্য বাস এবং ডিভাইসের সম্পর্ক পাবেন


14

ইউএসবি ডংলগুলি পুনঃসূচনা করার জন্য আমার একটি স্ক্রিপ্ট লিখতে হবে। আমার কাছে সমস্ত সরঞ্জাম রয়েছে তবে আমি আমার / dev / ttyUSBx কে শারীরিক BUS এবং ডিভাইসের সাথে লিঙ্ক করতে পারি না। একটি সমস্যা হ'ল একই আইডি বিক্রেতার এবং আইডি পণ্যটির সাথে আমার তিনটি ডাঙল রয়েছে।

আমি lsusb করলে আউটপুটটি হয়:

Bus 001 Device 004: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 006: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 007: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 002: ID 80ee:0021
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

এবং আমি এটির সাথে সংযুক্ত করেছি:

/dev/ttyUSB0
/dev/ttyUSB3
/dev/ttyUSB5

তবে আমি কোন ডিভাইসের সাথে কোন বাস ডিভাইস সম্পর্কিত তা জানতে চাই। উদাহরণস্বরূপ আমাকে নিম্নলিখিতগুলি পাওয়া দরকার:

/dev/ttyUSB0 -> Bus 001 Device 006
/dev/ttyUSB3 -> Bus 001 Device 004
/dev/ttyUSB5 -> Bus 001 Device 007

আমি উবুন্টু সার্ভার 10.04 ব্যবহার করছি এবং আমি সরঞ্জামগুলি পরীক্ষা করেছি:

lsusb
hal
lsmod

তবে সম্পর্কটা পাচ্ছি না।

উত্তর:


11

যেহেতু আমার কাছে আপনার হার্ডওয়্যার নেই আমি আপনাকে সঠিক উত্তর দিতে পারি না।

আমি পরামর্শ দিচ্ছি যে আপনি প্রশ্নযুক্ত ডিভাইসে যান, উদাহরণস্বরূপ:

ls -l /dev/ttyUSB0

এবং প্রধান এবং গৌণ নোড নম্বর প্রাপ্ত করুন। ধরা যাক তারা 116, 7

তারপরে যান:

ls -l /sys/dev/char/116:7

( char, কারণ টিটিআই একটি অক্ষর ডিভাইস, যদি আপনি কোনও ডিস্ক ডিভাইস ট্রেস করে থাকেন তবে blockপরিবর্তে আপনি নির্দিষ্ট করতে পারেন char)

কমান্ড থেকে আউটপুটে আপনি দেখতে পাবেন এর মতো কিছু:

lrwxrwxrwx 1 root root 0 Sep 6 00:17 116:7 -> ../../devices//sys/devices/pci0000:00/0000:00:13.5/pci0000:00/0000:00:13.5/usb1/1-3/1-3:1.1/sound/card1/pcmC1D0c

ডিরেক্টরি /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/ এবং এর উপ-ডিরেক্টরিগুলির ডিভাইসে অনেক তথ্য রয়েছে। উদাহরণ হিসাবে, /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/busnumএবং /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/devnum। আমার সিস্টেমে এগুলি / var / লগ / সিস্লোগে ডিভাইস হটপ্লাগ এন্ট্রিগুলিতে উল্লিখিত বাস এবং ডিভাইস নম্বর মেলে।

আমার সিস্টেমে / dev / video0 এর জন্য অন্য কিছু কাজ করে:

find /sys/dev -lname '*video0' -exec cat {}/device/busnum {}/device/devnum \; 2>/dev/null

আপনাকে অনেক ধন্যবাদ! অনেক দিন ধরেই আমি এর সাথে লড়াই করছি। শুধু আরও দর্শকদের জন্য আমার উবুন্টু উবুন্টু 10.04.2 LTS ডিভাইস ডিরেক্টরিটি / sys, / dev / গৃহস্থালির কাজ / পরিবর্তে / sys / গৃহস্থালির কাজ / হয়
আর্নেস্তো Campohermoso

সংশোধনের জন্য ধন্যবাদ - আমি সেই পরিবর্তনটির সাথে উত্তরটি সম্পাদনা করেছি, এবং তথ্য মুদ্রণের জন্য একটি ফাইন্ড কমান্ড যুক্ত করেছি।
জন এস গ্রুবার

@ জন এসগ্রুবার ঠিক আছে, তবে কীভাবে এটি মাউন্ট করবেন ?!
ডাঃ জ্যাকি

1
@ মিঃ হাইড: আপনি একটি / ডিভ / টিটিইউএসবি মাউন্ট করতে পারবেন না; কেবলমাত্র কিছু ডিভাইস যা ডিস্ক ড্রাইভের মতো পরিচালনা করে তা মাউন্ট করা যায়।
জন এস গ্রুবার

10

সংশ্লিষ্ট ইউএসবি ডিভাইস এবং বাস নম্বরগুলির মতো অক্ষর ডিভাইসগুলিকে মানচিত্র করার সত্যিই ভাল উপায় নেই /dev/ttyUSB0কিন্তু, এটা সম্ভব!

এর মতো কিছু কাজ করতে পারে:

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

সেখান থেকে, আপনি ডিভাইস এবং এর প্যারেন্ট ডিভাইসগুলি সম্পর্কে একগুচ্ছ তথ্য পাবেন। এখন, আপনি যা চান তা পেতে কেবলমাত্র সেই ডেটাগুলি বিশ্লেষণের বিষয়। আমি অতীতে এটি ব্যবহার করেছি:

echo /dev/bus/usb/`udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p' | head -n 2 | awk '{$1 = sprintf("%03d", $1); print}'` | tr " " "/"

এখন, যদি এটি মুখমুখী না হয় তবে আমি কী জানি! আসুন এটি ভেঙে দিন:

udevadm info --name=/dev/ttyUSB0 --attribute-walk - ডিভাইস এবং এর প্যারেন্ট ডিভাইস সম্পর্কে তথ্য দেয়

sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p'- এই ডেটাগুলি বিশ্লেষণ করে এবং "ডিভনাম" বা "বুজনাম" বৈশিষ্ট্যযুক্ত কোনও লাইন ফেরত দেয়। আমরা ধরে নেব যে "বুশনাম" প্রথমে তালিকাভুক্ত ... এবং সেই ক্ষেত্রে ... আমরা কেবল প্রথম দুটি লাইন আউটপুট ধরতে পারি।

head -n 2- আউটপুট প্রথম 2 লাইন ধরুন। আমরা এখানে আরও অভিনবতা পেতে পারি, তবে আমরা কেবল একটি অনুমান করছি যে নিকটতম পিতামাতার "ব্যসনাম" এবং "ডিভনাম" প্রথমে তালিকাভুক্ত হতে চলেছে।

awk '{$1 = sprintf("%03d", $1); print}' - এই অঙ্কগুলি নেয় এবং সেগুলি জিরো দিয়ে প্যাড করে।

echo /dev/bus/usb... - এই সমস্ত জাজ echoস্পেস দিয়ে নতুন লাইনগুলি প্রতিস্থাপনের জন্য একটি বিবৃতিতে গুটিয়ে রাখা হয়েছে। আপনি যদি পেছনের নতুন লাইনটি কেটে ফেলতে চান তবে আপনি এতে যোগ -nকরতে echoপারেন।

tr " " "/" - আউটপুট ফাঁকা স্থানগুলি ফরোয়ার্ড স্ল্যাশ সহ প্রতিস্থাপন করুন

এটি এমন কিছু আউটপুট দেবে:

/dev/bus/usb/001/011

... যা অবশ্যই ডিভাইস আপনি চাইলে busnum:001 devnum:011কয়েকটি টুইটের সাহায্যে খুব সহজেই কিছু আউটপুট করতে পারেন :

echo `udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\1\ \4/p' | head -n 2 | awk '{$1 = sprintf("%s:%03d", $1, $2); print $1;}'`

1

আপনি নীচের কমান্ডটি ব্যবহার করে নোড সম্পর্কে সমস্ত তথ্য সন্ধান করতে পারবেন:

udevadm info -a -p /sys/bus/usb-serial/devices/ttyUSB0/

অনুগ্রহ করে স্ল্যাশ সরিয়ে ফেলুন। এটি "সিসপথটি পাওয়া যায় নি" দেয়।
এনভিডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.