2012-05-07 11 views
38

के बीच अंतर मैं सरल लिनक्स मॉड्यूल mod.c. लिख रहा हूं। जब मैं mod.c फ़ाइल संकलित करता हूं, तो यह दो आउटपुट फ़ाइल mod.o और mod.ko बनाता है। तो मैं बस जानना चाहता हूं, mod.o और mod.ko फ़ाइल के बीच क्या अंतर है?.o और .ko फ़ाइल

+1

मुझे लगता है कि .ko 2.6 कर्नेल ऑब्जेक्ट फ़ाइलें हैं जबकि। 2.4 हैं। इसके बारे में यहां और पढ़ें: http://tldp.org/HOWTO/Module-HOWTO/linuxversions.html – smichak

उत्तर

34

संक्षिप्त उत्तर यह है कि .ko फ़ाइल आपकी ऑब्जेक्ट फ़ाइल कर्नेल द्वारा आवश्यक कुछ कर्नेल स्वचालित रूप से जेनरेट की गई डेटा संरचनाओं से जुड़ी है।

.o फ़ाइल आपके मॉड्यूल की ऑब्जेक्ट फ़ाइल है - आपकी सी फ़ाइल को संकलित करने का नतीजा। कर्नेल बिल्ड सिस्टम तब स्वचालित रूप से कर्नेल मॉड्यूल (your_module_kmod.c नामक) का वर्णन करने वाले कुछ डेटा संरचनाओं के साथ एक और सी फ़ाइल बनाता है, इस सी फ़ाइल को किसी अन्य ऑब्जेक्ट फ़ाइल में संकलित करें और अपनी ऑब्जेक्ट फ़ाइल और ऑब्जेक्ट फ़ाइल को बनाने के लिए एक साथ बनाया गया है। को फ़ाइल।

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

12

लिनक्स 2.6 से पहले, एक उपयोगकर्ता अंतरिक्ष कार्यक्रम ELF वस्तु (ओ) फ़ाइल की व्याख्या और, चल रहा कर्नेल में यह जोड़ने समाप्त द्विआधारी छवि पैदा करने के सभी कार्य करते हैं। कार्यक्रम उस छवि को कर्नेल में पास करेगा और कर्नेल मेमोरी में चिपकने से थोड़ा अधिक करेगा। लिनक्स 2.6 में, कर्नेल लिंकिंग करता है। उपयोगकर्ता स्थान प्रोग्राम ईएलएफ ऑब्जेक्ट फ़ाइल की सामग्री को कर्नेल पर सीधे पास करता है। इसके लिए काम करने के लिए, ईएलएफ ऑब्जेक्ट छवि में अतिरिक्त जानकारी होनी चाहिए। इस विशेष प्रकार की ईएलएफ ऑब्जेक्ट फ़ाइल की पहचान करने के लिए, हम ".o" के बजाय प्रत्यय ".ko" ("कर्नेल ऑब्जेक्ट") के साथ फ़ाइल को नामित करते हैं। 0oउदाहरण के लिए, सीरियल डिवाइस ड्राइवर जो लिनक्स 2.4 में फ़ाइल में रहता था लिनक्स 2.6 में serial.o फ़ाइल serial.ko में रहता है।

http://tldp.org/HOWTO/Module-HOWTO/linuxversions.html से।

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