2012-03-22 10 views
9

मैंने कर्नेल में दो सरल मॉड्यूल विकसित किए। अब मैं एक मॉड्यूल में एक फ़ंक्शन को परिभाषित करना चाहता हूं और उसके बाद इसे दूसरे में उपयोग करना चाहता हूं।एक लिनक्स कर्नेल मॉड्यूल में फ़ंक्शन को परिभाषित करने और इसे किसी अन्य में उपयोग करने के लिए कैसे करें?

मैं यह कैसे कर सकता हूं?

बस बिना किसी समस्या के अन्य मॉड्यूल में फ़ंक्शन और कॉलर को परिभाषित करें?

+0

संभावित डुप्लिकेट [कैसे एक और मॉड्यूल से निर्यात कर्नेल मॉड्यूल कार्यों कॉल करने के लिए?] (Http: // stackoverflow .com/प्रश्न/12311867/कैसे-टू-कॉल-निर्यात-कर्नेल-मॉड्यूल-फ़ंक्शंस-से-दूसरे-मॉड्यूल) –

उत्तर

25

module1.c में यह निर्धारित करें:

#include <linux/module.h> 

int fun(void); 
EXPORT_SYMBOL(fun); 

int fun(void) 
{ 
    /* ... */ 
} 

और module2.c में इसका इस्तेमाल करते हैं:

extern int fun(void); 
की
+0

मुझे अभी भी एक समस्या है। निर्देशिका/var/log/में मैं प्रिंटक देखने के लिए फ़ाइल संदेश खोलता हूं, मेरा फ़ंक्शन खरीदता है। इस तरह का एक संदेश दिखाता है: "मॉड्यूल लाइसेंस" अनिर्दिष्ट "टेंट कर्नेल", "कर्नेल टेंट के कारण लॉक डीबगिंग अक्षम करना"। मैं अन्य मॉड्यूल में एक संदेश मुद्रित करने के लिए बस एक मॉड्यूल के फ़ंक्शन को कॉल करता हूं। – Ricardo

+1

@ रिकार्डो: यह निर्यात कार्यों से संबंधित नहीं है, लेकिन केवल इस तथ्य के लिए, कि आपने मॉड्यूल के लाइसेंस को परिभाषित नहीं किया है। ऐसा करने के लिए 'MODULE_LICENSE' मैक्रो का उपयोग करें। –

+0

काम कर रहा है। धन्यवाद। कर्नेल छवि के अंदर मॉड्यूल के लिए, एक ही प्रक्रिया है? – Ricardo

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

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