2013-08-27 9 views
9

मेरी लिनक्स (पर BeagleBone काले Angstrom distro) मैं एक USB डोंगल जो एक सीरियल पोर्ट के रूप में और डिफ़ॉल्ट प्रति प्रस्तुत करता है पर के रूप में /dev/ttyUSB0लिनक्स: पर जुड़े यूएसबी-धारावाहिक डोंगल

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

मैं सिस्टम बूट होने पर स्वचालित रूप से प्रारंभ करना चाहता हूं, यूएसबी डोंगल का अनुमान लगाया गया है। मुझे यह कैसे करना चाहिए?

प्रयास अब तक:

  1. systemd: मैं की स्थिति After: remote-fs.target और After:syslog.target के साथ एक systemd सेवा बनाया है, लेकिन (ऐसा लगता है) USB डोंगल उस बिंदु पर तैयार नहीं है और डेमॉन की स्टार्टअप विफल रहता है।

    क्या अन्य सिस्टम targets या services स्थिति के लिए हैं, ताकि डिमन केवल तभी शुरू किया जा सके जब udev ने डिवाइस इंस्टॉल करना समाप्त कर दिया हो और नेटवर्क तैयार हो?

  2. udev: मैं की तरह

    कर्नल एक udev नियम बनाया == "ttyUSB?", भागो + = "/ path// daemon.sh करने के लिए"

    जो सफलतापूर्वक निष्पादित करता है। लेकिन डेमॉन (जिसे उस स्क्रिप्ट के भीतर "&" के साथ पृष्ठभूमि प्रक्रिया के रूप में शुरू किया गया है) निष्पादित नहीं होता है। यह भी udev नियमों से लंबे समय तक चलने वाली प्रक्रियाओं के लिए, फंसे हुए प्रतीत होता है।

ऐसा करने का सही तरीका क्या है?

+0

, इस ब्लॉग लेख मुझे बहुत मदद करता है (क्योंकि यह लगभग ठीक तुम क्या करने की कोशिश कर रहे हैं क्या है)। [udev ईवेंट (डिवाइस हॉटप्लग) पर लंबे समय से चलने वाली सिस्टम सेवा शुरू करने के लिए उचित (-श) तरीका] (http://blog.fraggod.net/2012/06/16/proper-ish-way-to-start -long-running-systemd-service-on-udev-event-device-hotplug.html) –

+0

संदर्भ के लिए धन्यवाद, अब यह काम करता है! – Philipp

उत्तर

9

तरह

# cat /etc/udev/rules.d/95-serialdaemon.rules 
KERNEL=="ttyUSB0", ENV{SYSTEMD_WANTS}="serialdaemon.service" 

एक udev नियम की तरह

# cat /lib/systemd/system/serialdaemon.service 
[Unit] 
Description=USB serial to socket bridge 
After=remote-fs.target 
After=syslog.target 

[Service] 
ExecStart=/mnt/serialdaemon.sh 

एक systemd सेवा निष्पादन योग्य फ़ाइल

# cat /mnt/serialdaemon.sh 
#!/bin/sh 
date +%F-%T >> /var/log/serialdaemon.log 
/usr/local/serialdaemon/serialdaemon -serial /dev/ttyUSB0 -port 15789 -baud 38400 >> /var/log/serialdaemon.log 2>&1 
date +%F-%T >> /var/log/serialdaemon.log 
+1

आप अपने स्वयं के anwser को "स्वीकृत" के रूप में चिह्नित कर सकते हैं, क्योंकि यह आपकी समस्या का सही समाधान है। इसके बारे में कुछ भी गलत नहीं है ... –

3

बनाएँ बनाएं मेरे आगे टिप्पणी में लिंक हल करने के लिए लगता है के बाद से यह समस्या, यहां एक सीईएम शुरू करने के लिए udev का उपयोग करने का समाधान है rtain USB डिवाइस प्लग किया गया है: मैंने कुछ समय पहले एक ऐसी ही समस्या थी

Proper(-ish) way to start long-running systemd service on udev event (device hotplug)

+2

अपना उत्तर स्वीकार करते हुए आपको अंक मिलते हैं। मेरा सिर्फ वहां (मेरा खुद का) संदर्भ है। – Philipp

+0

यह लिंक व्यावहारिक समाधान प्रदान करता है, लेकिन यदि भविष्य में यह लिंक टूटा हुआ है, तो कृपया अपने उत्तर में उस लिंक से सामग्री के सारांश को कॉपी-पेस्ट करें।बेशक, आपको मूल लिंक का उल्लेख करके उचित क्रेडिट देना होगा। – anishsane

+0

@anishsane इसके लिए क्षमा करें, आप सही हैं। यह एसओ पर मेरी पहली पोस्टों में से एक था, अगर मैंने आज जवाब लिखा है, तो मैंने ऐसा किया होगा। यदि मेरे पास कुछ खाली समय है तो मैं लिंक में दिए गए समाधान का सारांश जोड़ूंगा। –

संबंधित मुद्दे