मैं कुछ लिनक्स ड्राइवरों को पोर्ट करने की कोशिश कर रहा हूं और महसूस किया कि लिनक्स के कर्नेल संस्करण 2.4 और 2.6 के बीच काफी अंतर है।लिनक्स कर्नेल मॉड्यूल में module_init और init_module के बीच क्या अंतर है?
गिरी का 2.4 संस्करण में, मॉड्यूल प्रोग्रामिंग के रूप में नीचे था - कर्नेल का 2.6 संस्करण के साथ
#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hi \n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Bye \n");
}
लेकिन,, निम्नलिखित मॉड्यूल के लिए किया जा सकता है -
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int hi_init(void)
{
printk(KERN_ALERT "Hi \n");
return 0;
}
static void hi_exit(void)
{
printk(KERN_ALERT "Bye \n");
}
module_init(hi_init);
module_exit(hi_exit);
कर्नेल 2.6 में ऐसे परिवर्तनों का क्या फायदा है और लिनक्स के कर्नेल 2.6 में यह परिवर्तन क्यों आवश्यक था?
2.4 घोषणाओं का अर्थ है कि आप सिस्टम में मॉड्यूल का निर्माण कभी नहीं कर सकते (क्योंकि घोषणाएं स्थैतिक नहीं हैं)। – stsquad
मॉड्यूल_इनिट के लिए यहां एक बहुत अच्छी व्याख्या है: http://stackoverflow.com/questions/18605653/linux-module-init-vs-core-initcall-vs-early-initcall – user2311046