2011-10-12 16 views
7

के माध्यम से एक्सेस का उपयोग कर रहा हूं, मैं कुछ कर्नेल-मोड को उपयोगकर्ता-स्पेस एक्सेस प्रदान करने के लिए एक छोटा कर्नेल मॉड्यूल बना रहा हूं, केवल एआरएमवी 7 चिप (विशेष रूप से, कैश नियंत्रण) की विशेषताएं। मैं कॉर्बेट, रूबिनी और हार्टमैन द्वारा लिनक्स डिवाइस ड्राइवर्स के माध्यम से पढ़ रहा हूं। इसमें वे वर्णन करते हैं कि एक पूर्ण ड्राइवर + डिवाइस + बस कैसे बनाना है। मैं बिल्कुल बस चालक नहीं बनाना चाहता हूं। असल में 'ड्राइवर' जो मैं बना रहा हूं उसे वास्तव में डिवाइस परिभाषा के खिलाफ मिलान करने की ज़रूरत नहीं है - यह पूरी तरह से मंच के सीपीयू से मेल खाती है। क्या कोई मुझे समझा सकता है:लिनक्स ड्राइवर sysfs

  1. sysfs में मेरे गुण कब जाना चाहिए? क्या यह मेरे मॉड्यूल एंट्री में /sysfs/modules/mymodule के तहत होना चाहिए? /sys/devices/platform भी आशाजनक प्रतीत होता है, और /sys/devices/system/cpu भी ऐसा लगता है।
  2. यदि कोई मौजूदा स्थान है जहां मुझे अपना kobject/विशेषताओं को रखना चाहिए, तो मैं इसे कैसे प्लग करूं? मैं आवश्यक kset कैसे प्राप्त करूं? मैंने देखा है कि सभी उदाहरण kset बनाते हैं और उसके बाद kobject से लिंक करते हैं - मैंने मौजूदा नामित kset का अनुरोध करने के लिए एपीआई नहीं देखा है?

क्षमा करें अगर यह केवल असंभव स्पष्ट है, या अगर कुछ वास्तव में सरल और आसानी से खोजा गया उदाहरण कहीं है कि मैंने किसी कारण से नहीं खोजा है। क्या कोई इस पर प्रकाश डाला सकता है?

उत्तर

8

मैंने sysfs के साथ बहुत कुछ नहीं किया है, लेकिन मुझे एक सरल दिखने वाला उदाहरण मिला जो आप जो कर रहे हैं उसके समान ही है (स्वाभाविक रूप से, यह एआरएम के तहत भी है)। arch/arm/mach-omap1/pm.c पर विशेष रूप से idle_show/idle_store sysfs फ़ाइल देखें। यह /sys/power/sleep_while_idle के रूप में (sysfs_create_file() का प्रयोग करके) पंजीकृत और वैश्विक kobj (include/linux/kobject.h में परिभाषित) का उपयोग करता है हो जाता है। वहां कुछ अन्य वैश्विक कोबज परिभाषित किए गए हैं जिन्हें आप उपयोग कर सकते हैं, हालांकि मुझे नहीं लगता कि कोई भी आपके ड्राइवर के लिए उपयुक्त है।

क्या यह एक प्लेटफ़ॉर्म ड्राइवर होने जा रहा है? एक ड्राइवर के रूप में जो किसी भी बस के नीचे फिट नहीं होता है, यह एक अच्छा फिट लगता है। प्लेटफार्म ड्राइवरों को अपनी खुद की निर्देशिका/sys/devices/प्लेटफ़ॉर्म के अंतर्गत प्राप्त होती है, और इसमें विशेषताएं हो सकती हैं। drivers/hwmon/coretemp.c पर एक नज़र डालें, जिसमें temp1_crit, temp1_crit_alarm, temp1_input, आदि विशेषताएँ हैं। यह काफी सरल दिखता है: गुण बनाएं (शायद __ATTR() के साथ?), उन्हें सभी को एक सरणी में सूचीबद्ध करें, attribute_group को परिभाषित करें, इसे sysfs_create_group() के साथ probe() फ़ंक्शन में पंजीकृत करें, और इसे remove() फ़ंक्शन में sysfs_remove_group() के साथ पंजीकरण न करें।

शायद अन्य प्लेटफार्म ड्राइवर हैं जो विशेषताओं को परिभाषित करते हैं (sysfs_create_group के लिए खोजें) यदि आपको अन्य उदाहरणों की आवश्यकता है। उम्मीद है की यह मदद करेगा!

+0

मुझे coretemp.c ड्राइवर पर एक नज़र डालेंगी। धन्यवाद! –

+0

एक अद्यतन - coretemp मॉड्यूल एकदम सही टेम्पलेट था। मुझे कुछ sysfs विशेषताएँ काफी अच्छी तरह से काम कर रही हैं। एक बार फिर धन्यवाद। –

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