2012-10-07 15 views
5

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

#include <linux/module.h> 
int init_module(void){ printk("<1> hellp"); return 0;} 
void cleanup_module(void){ printk("<1> bye");} 

हालांकि, insmod त्रुटि संदेश काम नहीं कर रहा "अवैध मॉड्यूल प्रारूप" है। गुगलिंग के बाद मुझे लगा कि यह संस्करण संगतता के साथ कुछ समस्या हो सकती है। और इसे हल करने का कोई अच्छा तरीका नहीं है। तो क्या कुछ असली कर्नेल मॉड्यूल डेवलपर मुझे कुछ सलाह दे सकता है? सीखने से पहले मुझे किस पर्यावरण को तैयार करना चाहिए?

धन्यवाद!

उत्तर

10

आप module_init() और module_exit() मैक्रोज़ और कुछ महत्वपूर्ण #defines खो रहे हैं। हमें आपके मेक/जीसीसी विकल्पों जैसे अधिक जानकारी की आवश्यकता है। यह "अमान्य मॉड्यूल प्रारूप" की रिपोर्ट कर रहा है क्योंकि आप 32 बिट में संकलित कर रहे हैं जब आपका कर्नेल 64 बिट है, तो सुनिश्चित करें कि आप -64 संकलन और लिंक ध्वज का उपयोग कर रहे हैं।

कर्नेल मॉड्यूल के लिए एक महान हैलो वर्ल्ड ट्यूटोरियल यहां स्थित है: http://archive.is/KNkEE (लेख में original link टूटा हुआ है)।

कर्नेल मॉड्यूल लिखने में आपका स्वागत है। विंडोज ड्राइवर्स लिखने की तुलना में वे बहुत मज़ेदार हैं (मैंने दोनों किया है)। लिनक्स कर्नेल मॉड्यूल इंटरफ़ेस का उपयोग करने के लिए बहुत आसान है और वहां कई मूल ड्राइवर हैं जिन्हें आप प्रतिनिधि बना सकते हैं और काम तेजी से कर सकते हैं।

+0

* "आप __init और __exit मैक्रो याद कर रहे हैं, ..." * - '__init' के उपयोग और' __exit' आवश्यकता नहीं है; वे केवल पाठ खंड निर्दिष्ट करते हैं जिन्हें बूटिंग पूर्ण होने के बाद मुक्त किया जा सकता है। ड्राइवर मॉड्यूल के लिए क्या आवश्यक है 'module_init() 'और' module_exit() 'का उपयोग करके दो प्रविष्टि बिंदुओं के लिए घोषणाएं हैं। – sawdust

1

लिनक्स कर्नेल, मॉड्यूल प्रोग्रामिंग और एम्बेडेड डिवाइसों के लिए सरल डिवाइस ड्राइवरों के बारे में एक पूर्ण और सरल ब्लॉग।

xploredevicedrivers.blogspot.in

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