का उपयोग करने के लिए जब मैं एलकेएमपीजी (See Section 4.1.4. Unregistering A Device) पढ़ रहा था और try_module_get/module_put
फ़ंक्शंस का उपयोग करने के लिए मुझे यह स्पष्ट नहीं था। कुछ एलकेएमपीजी उदाहरण उनमें से कुछ का उपयोग करते हैं, कुछ नहीं करते हैं।लिनक्स कर्नेल मॉड्यूल: try_module_get/module_put
भ्रम को जोड़ने के लिए, try_module_get
2.6.24 स्रोत में 193 फाइलों में 282 बार दिखाई देता है, फिर भी Linux Device Drivers (LDD3) और Essential Linux Device Drivers में, वे नहीं एक भी कोड उदाहरण में दिखाई देता है।
मुझे लगा कि वर्ष register_chrdev
इंटरफेस (cdev इंटरफ़ेस द्वारा 2.6 में अधिक्रमित) से संबद्ध थे, लेकिन वे केवल एक ही फाइल में एक साथ दिखाई देते 8 बार:
find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .
तो जब यह करने के लिए उचित है इन कार्यों का उपयोग करें और क्या वे किसी विशेष इंटरफ़ेस या परिस्थितियों के सेट के उपयोग से बंधे हैं?
संपादित
मैं LKMPG से sched.c उदाहरण भरी हुई और निम्न प्रयोग करने की कोशिश की:
[email protected]:~/kernel-source/lkmpg/2.6.24$ tail /proc/sched -f &
Timer called 5041 times so far
[1] 14594
[email protected]:~$ lsmod | grep sched
sched 2868 1
[email protected]:~$ sudo rmmod sched
ERROR: Module sched is in use
इस ओर जाता है मुझे विश्वास है कि कर्नेल अब यह खुद लेखांकन है करता है और हो जाता है/डालता है अप्रचलित हो सकता है। क्या कोई इसे सत्यापित कर सकता है?
वहाँ उपधारा 'संदर्भ गिनती manipulation' में अध्याय 14 में' try_module_get' में से एक घटना है, (पेज 367) –
मैं हाल ही में मेरे पिछले टिप्पणी में LDD पुस्तक –