कैसे एक usb सीरियल डिवाइस के लिए एक ttyUSBX डिवाइस से मिलान करने के लिए


23

विकल्प ड्राइवर ने इस उपकरण के लिए USB ID का सही ढंग से मिलान किया और चालक को लोड किया। उदाहरण के लिए

# lsusb
Bus 001 Device 002: ID 19d2:0031 ONDA Communication S.p.A. ZTE MF636
Bus 001 Device 003: ID 12d1:14ac Huawei Technologies Co., Ltd.

यह हार्डवेयर के प्रबंधन के लिए ttyUSBX डिवाइस भी बनाता है

crw-rw---- 1 root uucp 188, 0 Jul  4 13:48 /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 1 Jul  4 13:49 /dev/ttyUSB1
crw-rw---- 1 root uucp 188, 2 Jul  4 13:35 /dev/ttyUSB2
crw-rw---- 1 root uucp 188, 3 Jul  4 13:37 /dev/ttyUSB3
crw-rw---- 1 root uucp 188, 4 Jul  4 13:37 /dev/ttyUSB4
crw-rw---- 1 root uucp 188, 5 Jul  4 13:37 /dev/ttyUSB5
crw-rw---- 1 root uucp 188, 6 Jul  4 13:37 /dev/ttyUSB6
crw-rw---- 1 root uucp 188, 7 Jul  4 13:37 /dev/ttyUSB7

हालाँकि, मेरे पास एक से अधिक USB सीरियल डिवाइस हैं और मैं जानना चाहता हूं कि किस USBT के लिए कौन सा ttyUSB है। पूर्व। / देव / ttyUSB1 -> 19d2: 0031

क्या आप किसी भी बिंदु को जानते हैं जहां मुझे यह जानकारी मिल सकती है?


यदि आप विक्रेता / उत्पाद जैसे विवरण जानते हैं, तो यह उत्तर बहुत अच्छा है
इयरकैम

जवाबों:


14

Sysfs फाइलसिस्टम पर एक नजर है। मेरे USB सीरियल के लिए एक उदाहरण:

$ lsusb
Bus 003 Device 016: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
$ ls -l /sys/bus/usb-serial/devices
lrwxrwxrwx 1 root root 0 Jul  4 17:37 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:1c.0/0000:02:00.0/usb3/3-1/3-1:1.0/ttyUSB0
$ $ grep PRODUCT= /sys/bus/usb-serial/devices/ttyUSB0/../uevent
PRODUCT=67b/2303/300

जैसा कि आप देख सकते हैं, मेरे कंप्यूटर पर ttyUSB0नक्शे 067b:2303। खोज के लायक अन्य स्थान हैं /sys/class/tty/। सहेलियों पर ध्यान दें।


क्या आपने इसे उत्पाद की सूची बनाने के लिए कुछ भी किया?
इगोर स्टोपा 10

@IgorStoppa, करने की कोशिश करो के परिणाम से फाइल उदाहरण के लिए,। अपने सीरियल डिवाइस के नोड नाम को प्रतिस्थापित करें। catueventfind /sys -name ttyACM0
sherrellbc

10

आप यह देखने की कोशिश कर सकते हैं कि आपका डिवाइस / उपकरण / देव / सीरियल / बाय-आईडी / के तहत पंजीकृत हैं या नहीं

ls -l / dev / सीरियल / बाय-आईडी

ये नाम सुसंगत होना चाहिए और सही ttyUSBx के लिए (सिमिलिंक) इंगित करेगा


क्या आप कुछ स्पष्टीकरण, उदाहरण इत्यादि जोड़ सकते हैं, ऑनलाइन उत्तर एसई में उतना अच्छा नहीं है
रोमियो निनोव

@RomeoNinov ठीक है, मैंने आपके अनुरोध के अनुसार कुछ स्पष्टीकरण जोड़ा है। यह सिर्फ एक और निर्देशिका में देखने की तुलना में अधिक कठिन नहीं है, इसलिए मैं यह नहीं देख सकता कि उत्तर को और अधिक विस्तृत बनाने से यह कैसे बेहतर होगा। उसके लिए माफ़ करना।
वैक्सहेड जूल

मेरे पास एक रास्पबेरी पाई से जुड़े दो समान एडेप्टर (दो Arduinos) हैं। ls -l /dev/serial/by-idकेवल एक एडॉप्टर देता है ../../ttyUSB1, जबकि ls -l /sys/bus/usb-serial/devicesमुझे दोनों दिखाता है। इसलिए मुझे नहीं लगता कि यह एक अच्छा जवाब है।
डैनियल एफ

6

मुझे भी ऐसी ही समस्या थी

इसे /etc/udev/rules.d/50-usb.rules पर लिखें

SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", SYMLINK+="ONDA"
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14ac", SYMLINK+="HUAWEI"

अंत की ओर। रीबूट।

अब आप /dev/ONDAअपने ONDA डिवाइस को प्राप्त करने के लिए उपयोग कर सकते हैं ।

यदि आप चाहते हैं कि गैर-रूट उपयोगकर्ता इनका उपयोग करने में सक्षम हों, तो जोड़ें

, MODE="0666"

प्रत्येक पंक्ति के अंत में।


मैंने ऐसा किया और उन फ़ाइलों की जाँच की जहाँ वे लिंक करते हैं। उत्पाद मैं कई इंटरफेस है, जैसे ठोस डिस्क, USB सीरियल। जबकि मैं / देव / ttyACM0 से लिंकेज की उम्मीद करता था लेकिन यह / देव / एसडीए के लिए था। नियम फ़ाइल में परिभाषित करने का कोई तरीका जो नियम लागू करना चाहिए वह किस डिवाइस में है? मैंने /etc/udev/rules.d/99-ftdi.rules में नियम लिखे
नर्स

ठीक पाया गया: नियम मापदंडों में SUBSYSTEM == "ट्टी" जोड़ा गया। यह मान udevadm info --name=/dev/ttyACM0
12

3

मैं udv का उपयोग करता हूं और कुछ नियम लिखता हूं जो उपकरणों के लिए सहानुभूति पैदा करते हैं।

उपकरणों को अलग करने के लिए पर्याप्त जानकारी प्राप्त करने के लिए सभी उपकरणों के लिए कुछ इस तरह का प्रयास करें:

$ udevadm info --query all --name /dev/ttyUSB0 --attribute-walk

1

निम्नलिखित कमांड मुझे ttyUSB डिवाइस नामों की सूची देंगे जो 19d2: 0016 के साथ जुड़े हैं (जो कि ZTE MF831 LTE स्टिक की "मॉडेम मोड" आईडी है, आपकी स्थिति अलग हो सकती है।)

    for i in $(find -L /sys/bus/usb/devices/ -maxdepth 2 -name "ttyUSB*"); do
        egrep -i "v19d2p0016(.*)in02" $i/../modalias >/dev/null && echo "/dev/${i##*/}"
    done

यह फाइल नाम ttyUSB * के साथ फ़ाइलों की एक सूची के माध्यम से लूप करेगा, जिसमें सिमिलिंक, / sys / बस / usb / डिवाइस शामिल हैं। परिणामों के भीतर हम मोडलियास नामक एक फ़ाइल की खोज करेंगे और एक स्ट्रिंग देखेंगे जिसमें विक्रेता आईडी "v" "19d2" और उत्पाद आईडी "p" 0016 होगा। यदि आउटपुट मेल खाता है, तो हम "देव" के साथ उपसर्ग किए गए एक स्ट्रिंग को प्रतिध्वनित करेंगे। “USB के सामने? नाम दें। Afaik पहले या आमतौर पर अंतिम (उच्चतम संख्या) ZTE उपकरणों के लिए मॉडेम पोर्ट है। आप / tmp / और head -n1 या tail -n1 लाइनों के अनुसार एक फ़ाइल के परिणामों को प्रतिध्वनित कर सकते हैं। यदि आपके पास हब हैं, तो आपको संभवतः मैक्सडेप को बढ़ाने की आवश्यकता हो सकती है।

यह सबसे सुंदर तरीका नहीं है, लेकिन यह लगभग किसी भी लिनक्स संस्करण पर काम करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.