2013-02-05 14 views
6

में संरचना cdev को पंजीकृत क्यों करें यह एक नौसिखिया प्रश्न हो सकता है, लेकिन कृपया इसे समझने में मेरी सहायता करें।ड्राइवर कोड

हमें अपने चरित्र चालक में संरचना सीडीवी पंजीकृत करने की ज़रूरत क्यों है?

उत्तर

8

जो मैं आपके प्रश्न के बारे में समझता हूं, उससे आप struct cdev के महत्व के बारे में पूछ रहे हैं। struct cdevinode संरचना के तत्वों में से एक है। जैसा कि आप शायद पहले ही जानते हैं, inode संरचना आंतरिक रूप से फ़ाइलों का प्रतिनिधित्व करने के लिए कर्नेल द्वारा उपयोग की जाती है। struct cdev कर्नेल की आंतरिक संरचना है जो चार उपकरणों का प्रतिनिधित्व करती है। तो cdev* i_cdevstruct inode का क्षेत्र सीडीवी संरचना के लिए एक सूचक है जबकि inode चार डिवाइस फ़ाइल को संदर्भित करता है। इसलिए यदि कर्नेल को वर्ण डिवाइस का आह्वान करना है, तो उसे cdev प्रकार की संरचना पंजीकृत करनी होगी।

13

struct cdev कर्नेल के भीतर एक वर्ण डिवाइस का प्रतिनिधित्व करता है।

सभी स्ट्रीमिंग डिवाइस (पूर्व: UART, कीबोर्ड) चरित्र उपकरण श्रेणी के अंतर्गत आती है और के रूप में एक डिवाइस नोड फ़ाइल (पूर्व:/dev/ttyS0) उपयोगकर्ता के अंतरिक्ष में उपलब्ध है। उपयोगकर्ता अनुप्रयोग मानक फ़ाइल I/O संचालन का उपयोग कर डिवाइस तक पहुंचता है।

enter image description here

कर्नेल के अंदर, चरित्र चालक उपकरण फ़ाइल और स्ट्रीमिंग डिवाइस के बीच में आता है, और इस ड्राइवर परत फ़ाइल मैं/हे आपरेशन डिवाइस के संचालन और उपाध्यक्ष प्रतिकूल में अनुवाद का ख्याल रखता है।

चरित्र डिवाइस चालक विकास struct file_operations में उपयोग की जाने वाली सबसे महत्वपूर्ण डेटा संरचना है। इस संरचना का उपयोग मूल फ़ाइल i/o - खुला(), पढ़ने(), लिखें(), बंद(), ioctl(), आदि ... डिवाइस के लिए कार्यक्षमता को लागू करने के लिए किया जाता है।

struct cdev संरचना file_operations संरचना और कुछ अन्य महत्वपूर्ण ड्राइवर जानकारी (प्रमुख/मामूली संख्या) को समाहित करती है। कर्नेल के साथ चरित्र चालक को पंजीकृत करने का यह नया तरीका है।

cdev संरचना निम्नलिखित एपीआई के माध्यम से गिरी द्वारा पहुँचा है:

cdev_init() - used to initialize struct cdev with the defined file_operations 
cdev_add() - used to add a character device to the system. 
cdev_del() - used to remove a character device from the system 

cdev_add() के लिए एक कॉल के बाद, अपने डिवाइस तुरंत जीवित है। आपके द्वारा परिभाषित सभी कार्यों (file_operations संरचना के माध्यम से) कहा जा सकता है।

+0

प्रश्न प्रासंगिक था, और मुझे यकीन नहीं है कि मुझे वास्तव में पूर्ण तस्वीर मिली है: http://free-electrons.com/doc/books/ldd3.pdf में, scull.c ड्राइवर एक सीडीवी परिभाषित करता है और पास करता है इसके लिए एक फॉप्स स्ट्रक्चर के साथ-साथ फ़ाइल डिस्क्रिप्टर (स्ट्रक्चर फाइल में सदस्य फॉप्स भी होते हैं)। मैं फ़ाइल डिस्क्रिप्टर को एक स्ट्रक्चर फॉप पास करने की आवश्यकता को समझता हूं (इसलिए जब उपयोगकर्ता फ़ाइल को पढ़/लिखते हैं तो आपकी विधियों को बुलाया जाता है), लेकिन हमें उसी फॉप्स जानकारी के साथ सीडीईवी स्ट्रिक्यूचर की आवश्यकता क्यों होगी? – user1159290

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