वहाँ `udev` का उपयोग करने के लिए विकल्प हैं?


16

जबकि मैं udv की महानता को समझता हूं और डेवलपर्स के प्रयास की सराहना करता हूं, मैं बस सोच रहा था कि क्या इसका कोई विकल्प है।

उदाहरण के लिए, मैं सोच सकता हूं कि स्टार्टअप स्क्रिप्ट बनाने का एक तरीका होना चाहिए जो अधिकांश डिवाइस नोड बनाता है जो मेरे सिस्टम पर (कोई भी हार्डवेयर नहीं बदल रहा है) वैसे भी सबसे अधिक हैं।

मैं जिस लाभ या कारण को छोड़ना udevचाहूंगा, वह स्किपिंग के लिए भी वैसा ही होगा dbus, अर्थात् जटिलता को कम करके और सिस्टम को और अधिक सुरक्षित रूप से सेटअप करने के लिए मेरे परिवर्तनों को बढ़ाकर।

जवाबों:


23

वहाँ udevबाहर करने के लिए विभिन्न विकल्प हैं । लगता है Gentoo कुछ कहा जाता है का उपयोग कर सकते हैं mdev। एक अन्य विकल्प udevपूर्ववर्ती का उपयोग करने का प्रयास होगा devfsd। अंत में, आप हमेशा अपनी ज़रूरत की सभी डिवाइस फ़ाइलें बना सकते हैं mknod

ध्यान दें कि बाद वाले के साथ बूट समय पर सब कुछ बनाने की आवश्यकता नहीं है क्योंकि नोड्स डिस्क पर बनाए जा सकते हैं और अन्य विकल्पों के साथ एक अस्थायी फ़ाइल सिस्टम में नहीं। जब नया हार्डवेयर प्लग किया जाता है (जैसे USB स्टिक), तो निश्चित रूप से, आप गतिशील रूप से बनाई गई डिवाइस फ़ाइलों के लचीलेपन को खो देते हैं। मेरा मानना ​​है कि इस युग में मानक दृष्टिकोण हर डिवाइस फ़ाइल के लिए था जो आपको पहले से ही बनाई जा सकती थी /dev(यानी बहुत सारी डिवाइस फ़ाइलें)।

बेशक आधुनिक डिस्ट्रो में काम करने के लिए इनमें से किसी भी दृष्टिकोण को प्राप्त करने में मुश्किल शायद काफी अधिक है। Gentoo विकी में mdevडेस्कटॉप वातावरण के साथ काम करने में कठिनाइयों का उल्लेख है (Gentoo के बाहर अकेले)। आखिरी devfsdरिलीज 2002 थी, मुझे नहीं पता कि यह आधुनिक कर्नेल के साथ भी काम करेगी या नहीं। मैन्युअल रूप से नोड्स बनाना संभवतः सबसे व्यवहार्य दृष्टिकोण है, लेकिन यहां तक ​​कि अक्षम करना भी udevएक चुनौती हो सकती है, विशेष रूप से डिस्टोस का उपयोग करके systemd( udevअब इसका एक हिस्सा है systemd, जो एक मजबूत निर्भरता का सुझाव देता है)।

मेरी सलाह के साथ छड़ी है udev;)


1
धन्यवाद! महान जवाब जिसने सबसे अधिक सवाल के सभी पहलुओं को संबोधित किया और जानकारी से भरा था! आश्चर्य है कि अब सिस्टम की समस्या को कैसे हल किया जाए ... मैं देखूंगा कि यह कैसे भंग किया जाएगा :)
मानवतावाद

udevबिना पूरी तरह से ठीक काम करना चाहिए systemd- वे दोनों केवल एक ही कोड-बेस के भीतर विकसित किए जाते हैं, लेकिन udevइसे स्वतंत्र रूप से बनाया जा सकता है।
एलियास प्रोबस्ट

@ एलियास, बेशक, वैसे भी udevलगभग लंबे समय से systemdहै। सवाल यह है कि क्या systemdबिना काम चल सकता है udev? मेरा अनुमान है कि आपको कम से कम किसी प्रकार के --without-udevविकल्प के साथ फिर से जुड़ना होगा ।
ग्रीम

2
@ ग्रेमी: नहीं, यह नहीं हो सकता। पहियों को हटाकर कार की जटिलता को कम करने की कोशिश करना थोड़ा सा है। यदि आप सिस्टमड के साथ बूटिंग के साथ ठीक हैं (जो बहुत कुछ करता है ), लेकिन udv की जटिलता (जो कम और कम करता है) के बारे में गंभीरता से चिंतित हैं, तो आपके पास चीजें वास्तव में भ्रमित हैं।
user1686

@ निष्पक्षता बिंदु, लेकिन शायद मैं ठीक भी नहीं हूँ कि init के लिए systemd के साथ बूटिंग के साथ! यह एक नज़र देना होगा
मानवतावाद

22

आधुनिक लिनक्स कर्नेल devtmpfsफ़ाइल सिस्टम (प्राचीन के साथ भ्रमित न करें devfs) का समर्थन करते हैं , जो कि कर्नेल को पता चलता है जैसे ही वे सभी डिवाइस को गतिशील रूप से बनाते हैं। (वास्तव में, नवीनतम udevरिलीज़ के लिए इसकी आवश्यकता होती है ; आप पाएंगे कि udv अब कोई भी डिवाइस नोड नहीं बनाता है, केवल सिमिलिंक है)।

इसी तरह, फर्मवेयर लोडिंग को कर्नेल में भी स्थानांतरित कर दिया गया है, इसलिए केवल शेष कार्य udevमॉड्यूल लोडिंग (मॉडालिसिस के अनुसार) और डिवाइस की अनुमति और अन्य udev नियमों को लागू करते हैं।

इसलिए सिद्धांत रूप में एक पूरी तरह से अखंड कर्नेल को udev के बिना ठीक बूट होना चाहिए ।

हालाँकि, यहाँ वास्तविक समस्या वही है जो बाद में होती है।

  1. काफी कुछ उपयोगकर्ता कार्यक्रम, अपने डिवाइस डेटाबेस को बनाए रखने के लिए udv पर भरोसा करते हैं, जिसके माध्यम से सुलभ है libudev। उपकरणों की गणना करते समय और जोड़े / हटाए गए ईवेंट को सीधे कर्नेल इंटरफेस (sysfs और netlink) का उपयोग करके किया जा सकता है, फिर भी आपको सभी मेटाडेटा के बिना छोड़ दिया जाएगा जो विभिन्न udv नियम संलग्न हैं।

  2. udev नियम भी में विभिन्न "लगातार" सिमलिंक बनाए रखने /dev/disk/by-*, /dev/mapper, /dev/input/by-path, /dev/snd/by-path, और इतने पर। उदाहरण के लिए, यदि आपके पास दो डिस्क जुड़े हुए हैं, तो इस बात की कोई गारंटी नहीं है कि पहले वाला हमेशा रहेगा sdaया नहीं sdb, लेकिन udv यह सुनिश्चित करता है कि सहानुभूति /dev/disk/by-uuidसही वाले को इंगित करती रहेगी।

  3. जबकि डिवाइस नोड्स अब कर्नेल द्वारा बनाए गए हैं और इसलिए अब आपकी चिंता नहीं है, यह नोट करना अभी भी महत्वपूर्ण है कि कुछ उपकरण प्रकारों ने गतिशील रूप से असाइन किए गए प्रमुख / मामूली संख्याओं का उपयोग करना शुरू कर दिया है, इसलिए भले ही आपके पास /dev/fuse10,228 और /dev/hpetआज 10,229 के रूप में हो , वे हर रिबूट के बाद अलग-अलग संख्याएँ होती हैं, इसलिए या तो devtmpfs(पुराने सिस्टम पर) एक कार्यक्रम जो entsvents को सुनता है, की आवश्यकता होती है

इनमें से कई चीजें आसानी से अन्य कार्यक्रमों द्वारा की जा सकती हैं mdev, जैसे कि निश्चित रूप से। मेरा कहना है कि एक स्थिर /etc/MAKEDEVस्क्रिप्ट अब काम नहीं कर रही है ...


इसलिए, मूल रूप से, जब बूट जटिलता की बात आती है, तो udv आपकी चिंताओं के कम से कम होने की संभावना है ।


दिलचस्प है, क्या आप जानते हैं कि कौन सा कर्नेल संस्करण नोड्स की गतिशील रचना का परिचय देता है?
ग्रीम

2
@ ग्रेम: लगभग 2.6.32
यूजर 168686

12

कई विकल्प हैं:

  • सीधे शब्दों में उचित का एक सेट है chmod, chown, lnएक स्क्रिप्ट है कि बूटस्ट्रैप के हिस्से के रूप में चलाया जाता है, और उस तरह का आदेशों।
  • उपयोग करें systemd-udev, प्लग-एंड-प्ले प्रबंधक जो सिस्टमड प्रोजेक्ट का हिस्सा है।
  • जेंटू काeudev प्रयोग करें , जो एक कांटा है systemd-udevजिसमें से सिस्टमड अब काफी बदल गया है।
  • देवुआन काvdev प्रयोग करें , जो जूड नेल्सन द्वारा विकसित एक प्लग-एंड-प्ले मैनेजर है, जो देवुआन का हिस्सा है।
  • mdevएक अन्य उत्तर के विपरीत, जो उपयोग करें , एक जेंटू चीज नहीं है। यह प्लग-एंड-प्ले मैनेजर है जो बिजीबॉक्स में बनाया गया है ।
  • Suckless काmdev उपयोग करें जो कि डिमिटिस पैपस्टामोस द्वारा विकसित एक प्लग-एंड-प्ले मैनेजर है।
  • लॉरेंट बरकोट काmdevd उपयोग करें , जो कि बिजीबॉक्स के साथ संगत कॉन्फ़िगरेशन है, mdevलेकिन अपने स्वयं के सॉकेट को संभालता है और लिस्टेन प्रोटोकॉल को नहीं समझता है।

इन सबके अलावा, पहले के अलावा, उपकरणों के बारे में कर्नेल अधिसूचना घटनाओं पर प्रतिक्रिया करने के तरीके का वर्णन करने वाले नियमों के सेट की आवश्यकता होती है। जाहिर है।

ऐसे उपकरण भी हैं जो /proc/sys/kernel/hotplugदो mdevएस जैसे कार्यक्रमों के लिए डिज़ाइन किए गए हैं , और जो एक नेटलिंक सॉकेट को सुनकर उन्हें अनुकूलित और क्रमबद्ध करेंगे और फिर उन कार्यक्रमों को पैदा करेंगे:


6

udev? सबसे अच्छा विकल्प इसका उपयोग नहीं करना है। और यह सीखकर कि लिनक्स का उपयोग कैसे करना है और * NIX दुनिया अधिक तार्किक समझ बनाने लगेगी।

सबसे अच्छा दीर्घकालिक विकल्प स्थिर उपकरणों (नोट देखें) का उपयोग करना है। यदि आपको ड्राइवर मिल गया है, तो लिनक्स कर्नेल हॉट-प्लगिंग का प्रबंधन करता है। मैं udvd चल रहा है, कभी नहीं पसंद करते हैं।

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

नोट: यदि आप फ्लैश ड्राइव या डीवीडी डिवाइस में प्लग इन कर रहे हैं, तो dmesg|tailमाउंट करने के लिए डिवाइस का नाम देखने के लिए उपयोग करें। जब एक उपकरण एक चरित्र या ब्लॉक डिवाइस है, तो सीखना कंप्यूटर हार्डवेयर की दुनिया में मूलभूत प्रणाली ज्ञान है। लिनक्स में यह खुला स्रोत है, इसे लिनक्स के बारे में बहुत कुछ जांचें , न कि केवल एम्बेडेड । यह लिनक्स (Solaris, HPUX, AIX, आदि) जैसे सभी * NIX के सीधे फॉरवर्ड लॉजिक (दर्शन नहीं) को समझने में व्यापक है।

Udev, dbus, gconf / dconf, systemd, gnome-shell, Gnome, Glib, mono और Fedora उन लोगों के लिए हैं जो अपने हाथों पर समय का भार रखते हैं, जो RTFM नहीं कर सकते हैं, या स्वचालित रूप से अपडेट की गई स्लिक (तलाश) कर रहे हैं, लेकिन धीमी गुड़ की तुलना में, छोटी गाड़ी, आधा रास्ता-वहाँ लिनक्स। (वास्तव में एक भयानक जगह है, समान अनुभवों के टन के लिए वेब के चारों ओर देखें)।

सिस्टम बूट तब udevd चलाता है। लेकिन, यह दावा किया जाता है कि udv आवश्यक है क्योंकि, will changeरिबूट पर डिवाइस की छोटी संख्या । यूदेव का रायसन डी'त्रे खुद को हर मोड़ पर विरोधाभासी लगता है। और जहां यह फाइलें होती हैं वे हमेशा गलत लगती हैं, चाहे आप किसी से भी सलाह लें। भरोसा मत करो या freedesktop.org।

इसके अलावा udv को उस डरावनी आवाज़ में जाना जा रहा है, जिसे सिस्टमड के नाम से जाना जाता है, मुझे नहीं पता कि कोई व्यक्ति / आदि / udv कबाड़ के साथ क्या करता है। और, यह कहना कठिन है कि udv नियम लिखना किसी भी तरह से बेहतर है। Gentoo लोग इस पर लटकना चाहते हैं और सिस्टमड नहीं होना चाहते हैं, इसलिए उन्होंने इसे eudev को फोर्क किया है।

यदि आप हास्यास्पद रूप से तेज़ चाहते हैं, तो कोई बुरा सिस्टम नहीं बढ़ाता है, लिनक्स बेसिक्स का उपयोग करें।


6
यह एक उत्तर से अधिक शेख़ी है ...
jasonwryan

2
@ajonwryan कुछ हद तक हाँ, अभी भी कुछ मूल्य है क्योंकि यह udevकार्यक्षमता में सामान्य रूप से शामिल उन कार्यों से मैन्युअल रूप से निपटने के लिए कुछ तरीके सलाह देता है। इस वैकल्पिक दृष्टिकोण की मजबूती को इंगित करना भी ठीक है ।
मानवतावादी

1
इसे अपडाउन किया। यह तर्क कि मैं पूरी तरह सहमत हूं कि शैली को कुछ लोगों द्वारा अनुचित माना जा सकता है, इसकी खूबियां हैं, और यहां तक ​​कि अगर यह वास्तव में सहायक नहीं है, तो मैं इसे तथ्यात्मक रूप से स्वीकार करने के लिए प्रवृत्त हूं। कर्नेल 4.x में, udev बेतरतीब ढंग से ईथरनेट इंटरफेस का नाम बदल रहा है .. क्या ?!
विक्टर

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