2013-03-21 5 views
13

चालक को प्रारंभ करते समय module_init और subsys_initcall के बीच क्या अंतर है?ड्राइवर को प्रारंभ करते समय module_init और subsys_initcall के बीच क्या अंतर है?

+0

क्या आपने मैन पेज देखे? – rekire

+1

उसके लिए कोई मैन्युअल पृष्ठ प्रविष्टि उपलब्ध नहीं है। – kzs

+1

आप हमेशा स्रोतों के माध्यम से grep कर सकते हैं। केवल स्रोतों को देखकर एक बड़ा सौदा समझाया जा सकता है। –

उत्तर

17

अंतर समय, या अधिक सटीक, निष्पादन के आदेश से संबंधित है। यही है, के रूप में घोषित प्रक्रिया module_init के रूप में घोषित प्रक्रिया से पहले निष्पादित होने की गारंटी है। यह ऑर्डरिंग सुनिश्चित करता है कि डिवाइस ड्राइवर पहले की कार्यक्षमता का उपयोग करने का प्रयास करने से पहले सबसिस्टम और प्लेटफ़ॉर्म ड्राइवर प्रारंभ किए जाते हैं (उदाहरण के लिए एक डिवाइस ड्राइवर उपप्रणाली डिवाइस के रूप में पंजीकृत होता है)।

प्रत्येक के लिए वास्तविक मैक्रो परिभाषा इस बात पर निर्भर करती है कि कर्नेल (लोड करने योग्य) मॉड्यूल के लिए कॉन्फ़िगर किया गया है या नहीं। इन मैक्रो (और अन्य init मैक्रो) के लिए परिभाषा include/linux/init.h

नोट पाया जा सकता है subsys_initcall() केवल एक अंतर्निहित (स्थिर जुड़े) मॉड्यूल के द्वारा इस्तेमाल किया जा सकता।
module_init या तो अंतर्निर्मित या लोड करने योग्य मॉड्यूल द्वारा उपयोग किया जा सकता है।

+0

बहुत स्पष्ट .. धन्यवाद .. – kzs

+2

लोड करने योग्य '* .ko' मॉड्यूल के लिए,' subsys_initcall() 'को 'module_init()' यानी 'device_initcall()' संदर्भ के रूप में मैप किया गया है: http: संदर्भ: http : //lxr.free-electrons.com/source/include/linux/init.h#L298 – TheCodeArtist

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

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