क्या लिनक्स में एक डिवाइस ड्राइवर एक प्रोग्राम / प्रक्रिया है या यह सिर्फ एक पुस्तकालय है?


23

क्या डिवाइस ड्राइवर एक प्रोग्राम है जो अपने आप चलता है, या यह सिर्फ एक पुस्तकालय (कार्यों का एक समूह) है जिसे मेमोरी में लोड किया जाता है और प्रोग्राम इसके कार्यों में से एक को कॉल कर सकते हैं (इसलिए यह अपने आप नहीं चल रहा है)।

और अगर यह एक कार्यक्रम है, तो क्या इसकी एक प्रक्रिया आईडी है, इसलिए क्या मैं उदाहरण के लिए एक डिवाइस ड्राइवर को उसी तरह समाप्त कर सकता हूं जिस तरह से मैं किसी अन्य प्रक्रिया को समाप्त कर सकता हूं?


1
आप एक ड्राइवर को rmmod के साथ "अनलोड" कर सकते हैं, लेकिन केवल अगर इसका उपयोग नहीं किया जा रहा है।
pjc50

जवाबों:


35

लिनक्स पर, कई डिवाइस ड्राइवर कर्नेल का हिस्सा होते हैं, न कि पुस्तकालयों या प्रक्रियाओं का। इन का उपयोग करके उपकरण फ़ाइलें (आमतौर पर के साथ सहभागिता कार्यक्रम /dev) और विभिन्न सिस्टम को कॉल जैसे open, read, write, ioctl...

हालांकि अपवाद भी हैं। कुछ डिवाइस ड्राइवर कर्नेल ड्राइवर स्टब्स और उपयोगकर्ता-स्पेस लाइब्रेरी ( जैसे यूआईओ का उपयोग करके) के मिश्रण का उपयोग करते हैं। दूसरों को पूरी तरह से उपयोगकर्ता-अंतरिक्ष में लागू किया जाता है, आमतौर पर कुछ बिट-बैंगिंग इंटरफ़ेस (UART या GPIO) के शीर्ष पर। दोनों मामलों में, वे आम तौर पर प्रक्रिया में होते हैं, इसलिए आपको एक अलग प्रक्रिया नहीं दिखाई देगी, बस वह प्रक्रिया जो डिवाइस का उपयोग कर रही है।

डिवाइस ड्राइवर को "समाप्त" करने के लिए, आपको इसका उपयोग करके सभी प्रक्रियाओं को रोकना होगा, फिर इसके कर्नेल मॉड्यूल (यह मानकर इसे मॉड्यूल के रूप में बनाया गया है) को हटा दें, और वैकल्पिक रूप से इसका उपयोग करने वाले किसी भी अन्य मॉड्यूल और जो अब आवश्यक नहीं हैं। आप अपने सिस्टम पर उपयोग करने वाले मॉड्यूल को सूचीबद्ध कर सकते हैं lsmod, और उनका उपयोग करके अनलोड कर सकते हैं rmmodया modprobe -r, दोनों ही काम करेंगे यदि lsmodइंगित करता है कि उनके पास कोई उपयोगकर्ता नहीं है।


2
यदि आप पर्याप्त बहादुर हैं, और आपकी कर्नेल के साथ संकलित किया गया था CONFIG_MODULE_FORCE_UNLOAD, तो आप उन rmmod -fअनलोड मॉड्यूल को बाध्य करने की कोशिश कर सकते हैं जो उपयोग में हैं / हटाने के लिए डिज़ाइन नहीं किए गए / आदि। इसके अलावा, बस एक अविश्वसनीय स्थिति में कर्नेल के परिणामस्वरूप, कर्नेल को भी दागी।
रुस्लान

9

आपको पहले यह परिभाषित करना होगा कि ड्राइवर क्या है। मैं इसे एक प्रोग्राम या सबरूटीन के रूप में परिभाषित करूंगा जो एक डिवाइस (जैसे आपका कैमरा) या एक सबसिस्टम (एक फाइल सिस्टम की तरह) को नियंत्रित करता है। चाहे वह इसे सीधे सिस्टम प्रोग्राम के माध्यम से या कर्नेल सर्वर के माध्यम से या उपयोगकर्ता-भूमि प्रक्रियाओं के लिए मूल रूप से इस अनिवार्य अर्थ संबंधी प्रश्न में नहीं होना चाहिए।

कुछ मामलों में लिनक्स केवल सॉफ्टवेयर में लिखा एक जेनेरिक प्रोटोकॉल प्रदान करता है जहां वास्तविक "ड्राइवर" एक डिवाइस ट्री है। यह हार्डवेयर पैरामीटर्स का एक विन्यास है और कौन से सॉफ्टवेयर का उपयोग करना है जो ड्राइवर बनाते हैं।

आम तौर पर बोलने वाले ड्राइवर इंटरफेस और प्रोटोकॉल कर्नेल मॉड्यूल का उपयोग करके कार्यान्वित किए जाते हैं जो डिवाइस पेड़ों या udv नियमों द्वारा परिभाषित आवश्यकतानुसार लोड किए जाते हैं। एक कर्नेल मॉड्यूल सबसे सख्त अर्थ में एक प्रक्रिया या पुस्तकालय नहीं है।

एक पुस्तकालय कोड का एक स्थिर सेट है जिसे किसी भी प्रक्रिया में लोड किया जा सकता है। आधुनिक ऑपरेटिंग सिस्टम इन पुस्तकालयों को साझा मेमोरी में लोड करते हैं। एक प्रक्रिया स्वयं को किसी भी साझा लाइब्रेरी से लिंक कर सकती है।

एक प्रक्रिया एक चालू कार्यक्रम है जिसमें सिस्टम प्रोग्राम या कर्नेल को सिस्टम मेमोरी और सीपीयू समय जैसे संसाधनों को आवंटित किया गया है। कर्नेल मॉड्यूल स्वयं इस पैटर्न का पालन कर सकते हैं या नहीं भी कर सकते हैं, लेकिन परवाह किए बिना लिनक्स के तहत डिफैक्टो प्रक्रियाओं के रूप में नहीं माना जाता है।

तो आपके प्रश्न का उत्तर देने के लिए ड्राइवर की प्रक्रिया की आवश्यकता नहीं है, लेकिन यह हो सकता है। हालांकि एक पुस्तकालय में कोड मौजूद हो सकता है, ड्राइवर को अभी भी एक कार्यक्रम के माध्यम से मेमरी में लोड किया जाता है, चाहे वह कर्नेल मॉड्यूल या उपयोगकर्ताभूमि प्रक्रियाओं के रूप में कर्नेल हो।

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


0

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

इससे कुछ ही अपवाद हैं:

  • कर्नेल थ्रेड को ड्राइवरों द्वारा भी शुरू / बंद किया जा सकता है, ये अनिवार्य रूप से उपयोगकर्ता-अंतरिक्ष भाग के बिना प्रक्रियाएं हैं।
  • बाधित हैंडलर हार्डवेयर द्वारा शुरू किए जाते हैं, न कि उपयोगकर्ता-अंतरिक्ष प्रक्रियाओं द्वारा।

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

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