डिवाइस फ़ाइलों, ioctl, sysfs, netlink के बीच उपयोग अंतर


12

मैं स्पष्ट करने की कोशिश कर रहा हूं कि लिनक्स में उपकरणों के साथ बातचीत करने का सबसे उपयोगी (कार्यक्षमता के मामले में) तरीका क्या है। जैसा कि मैं समझता हूं, डिवाइस फाइलें कार्यक्षमता का केवल हिस्सा (ब्लॉक डिवाइसेस में पता ब्लॉक, चरित्र उपकरणों में धाराएं, आदि ...) को उजागर करती हैं। ioctl(2)आमतौर पर सबसे अधिक उपयोग किया जाता है, फिर भी कुछ लोग कहते हैं कि यह सुरक्षित नहीं है, और इसी तरह।

कुछ अच्छे लेखों या अन्य प्रासंगिक बिंदुओं का स्वागत किया जाएगा।

जवाबों:


9

ioctl/devप्रवेश के साथ हाथ से हाथ जाता है ; आपका विशिष्ट कोड करेगा

fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);

यह पूरी तरह से मानक यूनिक्स व्यवहार है। कर्नेल चालक के अंदर आप अभिगम नियंत्रण रख सकते हैं (जैसे केवल rootकुछ चीजें कर सकते हैं, या अधिक बारीक दाने के लिए एक विशिष्ट क्षमता की आवश्यकता होती है) जो इसे बहुत लचीला और शक्तिशाली बनाता है।

बेशक इसका मतलब यह है कि डिवाइस उपयोग ब्लॉक / चरित्र पढ़ने-लिखने की गतिविधि की तुलना में बहुत अधिक उजागर कर सकते हैं; ioctlकॉल के जरिए कई काम किए जा सकते हैं। इतना आसान नहीं से शेल स्क्रिप्ट से उपयोग करने के लिए है, लेकिन बहुत आसान Cया perlया pythonया इसी तरह की।

sysfsप्रविष्टियाँ ड्राइवरों के साथ बातचीत करने का एक और तरीका है। आमतौर पर प्रत्येक प्रकार की कमांड में एक अलग प्रविष्टि होती है, इसलिए इसे ड्राइवर को लिखना जटिल हो सकता है, लेकिन यह उपयोगकर्ताओं के माध्यम से एक्सेस करना बहुत आसान बनाता है; सरल खोल स्क्रिप्ट बहुत सारे सामान में हेरफेर कर सकती है, लेकिन बहुत कुशल नहीं हो सकती है

netlinkमुख्य रूप से नेटवर्क डेटा ट्रांसफर पर केंद्रित है (मुझे लगता है!), लेकिन इसका उपयोग अन्य सामान के लिए किया जा सकता है। यह डेटा ट्रांसफर के बड़े संस्करणों के लिए वास्तव में अच्छा है और इसका मतलब ioctlकुछ मामलों में उत्तराधिकारी होना है ।

सभी विकल्प अच्छे हैं; आपके उपयोग का मामला बेहतर तरीके से निर्धारित कर सकता है कि आपके ड्राइवर से किस प्रकार का इंटरफ़ेस निकलता है।


1
भ्रमित करने के लिए और अधिक जोड़ना: "ioctl: हालांकि, ioctl कर्नेल में पदावनत है, और आपको ioctl के नए उपयोगों के साथ किसी भी ड्राइवर को प्राप्त करने में मुश्किल होगी, यह माना जाता है। कर्नेल अनुरक्षक अव्यवस्थित बनाता है क्योंकि यह कर्नेल कोड और अनुप्रयोग कोड को अन्योन्याश्रित बनाता है। , और यह दोनों को कर्नेल संस्करणों और आर्किटेक्चर के पार रखना कठिन है। " [पेज २५५] क्रिस सिममंड्स द्वारा [१०१। "मास्टर्ड एंबेडेड लिनक्स प्रोग्रामिंग"।
इसरार

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