कैसे पता लगाएं कि कौन सा सीरियल पोर्ट उपयोग में है?


33

प्रश्न:

मैंने एक सीरियल पोर्ट (उर्फ RS-232) के माध्यम से एक डिवाइस (यानी जीएसएम मॉडम) में प्लग किया था, और मुझे यह देखने की जरूरत है कि /dev/फाइलसिस्टम में किस फाइल के साथ यह डिवाइस बंधी हुई थी, जिससे यह संवाद कर सके। दुर्भाग्य से न तो कोई नई बनाई गई फ़ाइल है /dev/और न ही dmesgआउटपुट में कुछ देखा जा सकता है । इसलिए यह एक कठिन सवाल लगता है।

पृष्ठभूमि:

मैंने कभी भी सीरियल डिवाइस के साथ काम नहीं किया था, इसलिए कल, जब वहाँ एक आवश्यकता दिखाई दी, मैंने इसे Google पर करने की कोशिश की, लेकिन कुछ भी उपयोगी नहीं मिला। मैंने तलाश में कुछ घंटे बिताए, और मैं एक पाया हुआ जवाब साझा करना चाहता हूं क्योंकि यह किसी के लिए मददगार हो सकता है।


1
मैं एक उपकरण का पता लगाने के लिए उन बिट्स का उपयोग करना पसंद करता हूं - मैं शायद इसका उपयोग करूंगा, हालांकि मेरे पास कई उपकरण हैं जो केवल टीएक्स / आरएक्स पिन का उपयोग करते हैं, मैं शायद इसके लिए सीटीएस लाइन को उच्च रखने के लिए उन्हें हैक कर सकता हूं।
डैनी स्टेपल

जवाबों:


34

दुर्भाग्य से सीरियल पोर्ट नॉन-प्लगप्ले हैं, इसलिए कर्नेल को पता नहीं है कि किस डिवाइस को प्लग किया गया था। एक हॉवटो ट्यूटोरियल पढ़ने के बाद मुझे काम करने का आइडिया मिल गया है।

/dev/OS की तरह यूनिक्स की निर्देशिका में ttySn नाम की फाइलें शामिल हैं (n संख्या के साथ) । उनमें से ज्यादातर मौजूदा उपकरणों के अनुरूप नहीं हैं। यह जानने के लिए कि कौन से काम करते हैं, एक आदेश जारी करें:

$ dmesg | grep ttyS
[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    0.892626] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[    0.915797] 0000:01:01.0: ttyS4 at I/O 0x9800 (irq = 19) is a ST16650V2
[    0.936942] 0000:01:01.1: ttyS5 at I/O 0x9c00 (irq = 18) is a ST16650V2

ऊपर मेरे पीसी का एक उदाहरण आउटपुट है। आप कुछ सीरियल पोर्ट की इनिशियलाइज़ेशन देख सकते हैं:

ttyS0, ttyS1, ttyS4, ttyS5

उनमें से एक में प्लग किए गए डिवाइस पर एक पॉजिटिव वोल्टेज होने वाला है। इसलिए /proc/tty/driver/serialजिस डिवाइस में प्लग किए गए डिवाइस के साथ और उसके बिना फाइल की सामग्री की तुलना करके हम आसानी से अपने डिवाइस से संबंधित टिट्स पा सकते हैं । तो, अब करते हैं:

$ sudo cat /proc/tty/driver/serial> /tmp/1

(संयुक्त राष्ट्र) एक उपकरण प्लग

$ sudo cat /proc/tty/driver/serial> /tmp/2

अगला दो फ़ाइलों के बीच अंतर की जाँच करें। नीचे मेरे पीसी का आउटपुट है:

$ diff /tmp/1 /tmp/2
2c2
< 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0
---
> 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0 CTS|DSR

Dmesg आउटपुट के साथ तीन नंबरों की तुलना करके हम यह निर्धारित कर सकते हैं कि कौन सा पोर्ट है:

[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

इसलिए, हमारा डिवाइस है /dev/ttyS0, मिशन पूरा!


1
क्या होगा अगर मुझे dmesg आउटपुट में कोई उपकरण नहीं दिखता है?
user3019105

2
@ user3019105 क्षमा करें, मैंने कभी इस तरह के मुद्दे का सामना नहीं किया। जो मैं समझता हूं, dmesgउसमें सीरियल डिवाइस पर irq असाइन करने के बारे में एक संदेश होना चाहिए । और अगर ऐसा नहीं होता, तो मुझे कुछ हार्डवेयर समस्या होती। यह सिर्फ एक धारणा है, और गलत हो सकता है, लेकिन अगर मैं इस तरह की समस्या को दूर कर दूंगा, तो मैं इस विचार को ध्यान में रखते हुए अनुसंधान शुरू करूंगा कि सीरियल पोर्ट को आरंभीकृत किया जाना चाहिए।
हाय-एंजेल

1
चूंकि मैं मशीन से मशीन पर जाता हूं इसलिए मैंने इस मशीन पर मुझे सीरियल पोर्ट दिखाने के लिए एक उपनाम परिभाषित किया है। यह सिस्टमड के साथ उबंटू परिवार सिस्टम पर काम करता है। उर्फ बंदरगाहों = 'udvadm जानकारी --export-db | grep -i "^ n: ttyu"'
DDay
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.