2010-07-14 9 views
5

का उपयोग करने के लिए मुझे एक कर्नेल मॉड्यूल लिखना होगा जो डिवाइस ड्राइवर नहीं है। वह मॉड्यूल कुछ उपयोगकर्ता अंतरिक्ष प्रक्रियाओं के साथ संचार करेगा। चूंकि मैं ioctl() का उपयोग नहीं करना चाहता, मुझे या तो/proc निर्देशिका में फ़ाइल बनाने या/dev निर्देशिका में डिवाइस फ़ाइल बनाने के साथ छोड़ दिया गया है।जब/proc और कब/dev

प्रश्न: मैं/proc और/dev के बीच कैसे निर्णय ले सकता हूं। क्या यह सिर्फ एक निर्णय कॉल है या इन दोनों का उपयोग करने पर कोई अनचाहे समझौते हैं।

+0

जैसे ही कार्निल्ड पॉइंट्स/dev/में प्रदर्शित वस्तुओं को इंगित करता है " असली "डिवाइस। यदि आपका चालक एक POSIX प्रकार इंटरफ़ेस (खुला/पढ़/लिखना) का खुलासा करता है तो इसका उपयोग करने का कोई कारण नहीं है। संचार किस तरह आप उपयोगकर्ता और कर्नेल अंतरिक्ष के बीच होने पर योजना बना रहे हैं? – stsquad

+0

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

+1

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

उत्तर

6

आपको एक नया इंटरफ़ेस/proc/में जोड़ने में कठिनाई होगी। कर्नेल डेवलपर्स दुखी है कि यह विविध इंटरफेस के लिए एक डंपिंग भूमि बन गया है कर रहे हैं, और जब तक आप वास्तव में के माध्यम से/proc/पीआईडी ​​/, मुझे लगता है कि आप मुसीबत गिरी समुदाय को समझाने यह स्वीकार करना होगा प्रक्रियाओं के बारे में कुछ संशोधित कर रहे हैं।

/डिवाइस/फ़ाइल में एक डिवाइस फ़ाइल स्वीकार्य हो सकती है, यहां तक ​​कि उन मॉड्यूल के लिए भी जो वास्तव में डिवाइस ड्राइवर नहीं हैं। (उदाहरण के लिए,/dev/केवीएम,/dev/अंक,/dev/ecryptfs,/dev/फ्यूज,/dev/kmsg,/dev/ptmx, आदि) हालांकि, उपकरण फ़ाइलें भी अक्सर ioctl के साथ हेरफेर करने के लिए (आसान होता है), और मुझे लगता है कि यदि आप कर सकते हैं तो आप इससे बचने के लिए सही हैं।

कर्नेल सर्कल में वर्तमान प्रवृत्ति sysfs या कस्टम फाइल सिस्टम है। Sysfs दृष्टिकोण एकल-मूल्य-प्रति-फ़ाइल अर्थशास्त्र पर आधारित होता है, जिसका उद्देश्य गूंज और बिल्ली के साथ छेड़छाड़ करना है। यह उपयोगकर्ताओं के लिए अद्भुत है अगर यह आपके लिए काम करता है। कस्टम फ़ाइल सिस्टम आप बहुत विशिष्ट बाइनरी सक्षम इंटरफेस लिखने की सुविधा देता है, और एफएस/libfs.c मदद करनी चाहिए आप अपनी जरूरतों के लिए अपनी खुद की फाइल सिस्टम लिखें। (मैं किसी को भी नहीं जानता जिसने configfs का उपयोग किया है, लेकिन मैंने हमेशा सोचा है कि यह साफ दिखता है। शायद यह आपके मॉड्यूल के अनुरूप होगा?)

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