क्या डिवाइस आईडी द्वारा USB-सीरियल पोर्ट को एक्सेस करने का कोई तरीका है, न कि tty। * पोर्ट द्वारा?


17

Linux पर USB- सीरियल डिवाइस अपने सीरियल पोर्ट पर दो उपनाम बनाते हैं:
/dev/tty*और/dev/serial/by-id/<my_usb_device_id>

क्या USB डिवाइस आईडी द्वारा सीरियल पोर्ट की पहचान करने के लिए OSX पर एक रास्ता है? सिस्टम प्रोफाइलर और उपयोग करने वाले दोनों में ioreg -p IOUSBमैं आईडी देख सकता हूं, लेकिन इससे मुझे उस आईडी का उपयोग करने के लिए कनेक्ट करने के लिए कोई करीब नहीं मिलता है।

हम हार्डवेयर के कई टुकड़ों को विकसित कर रहे हैं और यह एक परीक्षण के रूप में हर बार जब मैं परीक्षण सॉफ़्टवेयर के सीरियल पोर्ट कॉन्फ़िगरेशन को सत्यापित करने की आवश्यकता होती है, तो एक अलग डिवाइस कनेक्ट करने के लिए उन्हें दर्द होता है, क्योंकि OSX पर tty.*पोर्ट नाम मेरे कंप्यूटर पर पोर्ट पर निर्भर करता है, डिवाइस पर नहीं। /dev/serial/by-id/<my_usb_device_id>अलग-अलग उपकरणों के बीच स्वचालित रूप से अंतर करने के लिए लिनक्स चलाने वाले लोग खुशी से पोर्ट का उपयोग कर रहे हैं ।

जवाबों:


2

मेरे पास एक एफडीडीआई पुल के लिए, सीरियल नंबर पहले से ही डिवाइस के नाम में दिखाई देता है: यह लिनक्स पर /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(और कुछ /dev/ttyUSBx) के रूप में /dev/cu.usbserial-DA00AG57और /dev/tty.usbserial-DA00AG57मैकओएस के रूप में प्रकट होता है । ( और अंतर के लिए /programming//a/8632603/4896937 देखें ।)tty.*cu.*

दुर्भाग्य से, मेरे पास प्रोलिफिक ब्रिज के लिए, आपके जैसा एक मुद्दा अभी भी लागू होता है: एक ऐसा उपकरण जो दिखने में /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(जिसमें कोई सीरियल नंबर नहीं है) बस /dev/cu.usbserialऔर /dev/tty.usbserialmacOS पर है (सिस्टम प्रोफाइलर भी इसके लिए कोई सीरियल नंबर नहीं देता है)। कौन जानता है कि अगर मैं एक दूसरे को प्लग इन करता हूं तो क्या होगा।

शायद वहाँ एक और सामान्य उत्तर है जो विक्रेता-स्वतंत्र है, लेकिन चेतावनी दी जाए कि कुछ डिवाइस एक सीरियल नंबर की रिपोर्ट नहीं कर सकते हैं।


मेरे लिए वे /dev/tty.usbmodemFD121 और /dev/tty.usbmodemF131 के रूप में दिखाई देते हैं। संख्या सीधे मेरे लैपटॉप पर यूएसबी पोर्ट पर निर्भर करती है। सिस्टम जानकारी उनके फर्मवेयर द्वारा निर्धारित उपकरणों के लिए सही आईडी दिखाती है। दोनों धारावाहिक STM32F2 / F4 प्रोसेसर द्वारा बनाए गए हैं।
जोहान

2

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

ioreg -r -c IOUSBHostDevice -l

यह सभी USB होस्ट डिवाइस को प्रिंट करेगा, और यह प्रत्येक डिवाइस के सबट्री से सभी गुणों को प्रिंट करेगा। आपको अपनी डिवाइस को उसकी आईडी या सीरियल नंबर के आधार पर शीर्ष स्तर पर खोजने में सक्षम होना चाहिए। एक बार जब आप इसे पा लेते हैं, तो आपको इसके सबट्री के माध्यम से स्कैन करने में सक्षम होना चाहिए, और अंततः कक्षा का एक ऑब्जेक्ट ढूंढना चाहिए IOSerialBSDClient। इसमें वह संपत्ति होगी IODialinDeviceजो आप चाहते हैं।

यदि आप तब यह प्रोग्रामेटिक रूप से करना चाहते हैं, तो आप -aविकल्प को ioregकमांड में जोड़ सकते हैं , जो उपरोक्त आउटपुट के प्लिस्ट संस्करण को आउटपुट करेगा। फिर आप इस तरह के एक पुस्तकालय के साथ पार्स कर सकते हैं plistlib

आपको यह कल्पना करने में मदद करने के लिए IORegistryExplorer ऐप का उपयोग करने में मदद मिल सकती है, क्योंकि पूरा ioregआउटपुट पढ़ना थोड़ा मुश्किल है! यह XCode के "हार्डवेयर IO टूल्स" पैकेज में उपलब्ध है, जिसे आप Apple डेवलपर साइट पर डाउनलोड खोज कर प्राप्त कर सकते हैं । यहाँ मेरे डिवाइस पर ऐसा दिखता है:

IORegistryExplorer उदाहरण

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