कर्नेल में main
फ़ंक्शन नहीं होता है । main
C भाषा की एक अवधारणा है। कर्नेल C और असेंबली में लिखा जाता है। कर्नेल का प्रवेश कोड असेंबली द्वारा लिखा गया है।
बूट अनुक्रम इस प्रकार है:
- BIOS आमतौर पर बूट ब्लॉक डिवाइस से बूट लोडर लोड करता है। एक लोकप्रिय बूट लोडर अभी ग्रब है।
- ग्रब एक प्रारंभिक रूट डिवाइस (
initrd
) के साथ, संभव में कर्नेल छवि को लोड करता है । फिर किसी पते पर कोड निष्पादित किया जाता है।
- कर्नेल छवि में कुछ कर्नेल मॉड्यूल हैं, उदाहरण के लिए: फाइलसिस्टम मॉड्यूल, डिवाइस ड्राइवर। कर्नेल छवि रूट फाइल सिस्टम को माउंट करने के लिए फाइलसिस्टम मॉड्यूल का उपयोग करती है। अब कर्नेल डिस्क से सभी कर्नेल मॉड्यूल को लोड और चला सकते हैं।
- कर्नेल आरंभीकरण कार्य चलाता है। उदाहरण के लिए: पीसीआई बस को पार करें और सभी पीसीआई उपकरणों को ढूंढें, सभी डिवाइस ड्राइवरों को इनिशियलाइज़ करें।
- अंत में कर्नेल प्रक्रिया 0 बनाता है और प्रक्रिया 1 (
init
प्रक्रिया), सीपीयू के संदर्भ को रिंग 0 से रिंग 3 तक स्विच करता है, और init प्रक्रिया शुरू करता है (प्रक्रिया आईडी 1 है)। अब कर्नेल बूट समाप्त हो गया है!
init
कार्यक्रम सभी init स्क्रिप्ट चलाता है। सभी सेवाएं शुरू कर दी हैं। शैल कहा जाता है। उपयोगकर्ता लॉगिन कर सकते हैं।
main
समारोह एक सी समारोह है। वास्तव में मुख्य विधि सी कार्यक्रमों का प्रवेश बिंदु नहीं है। C रनटाइम पहले कई फ़ंक्शन को कॉल करता है main
। जीसीसी की एक विस्तारित विशेषता है: निर्माणकर्ता। "कंस्ट्रक्टर" घोषित किए गए कार्यों को पहले कहा जाता है main
।
उदाहरण के लिए:
/* This should not be used directly. Use block_init etc. instead. */
#define module_init(function, type) \
static void _attribute__((constructor)) do_qemu_init ## function(void) { \
register_module_init(function, type); \
}
यह मैक्रो qemu प्रोजेक्ट से है।