2012-01-02 27 views
9

मैं लिनक्स डिवाइस ड्राइवर को विकसित करने के प्रयास कर रहा हूँ और मेरा पहला प्रयास के रूप में मैं निम्न फ़ाइल विकल्प है कि एक चार डिवाइस ड्राइवर विकसित करने की कोशिश कर रहा हूँ,किसी डिवाइस ड्राइवर के लिए कर्नेल मॉड्यूल को लोड करने पर स्वचालित रूप से/dev में डिवाइस कैसे बनाया जाए?

struct file_operations fops{ 
.open=open_fun, 
.release=release_fun, 
.write=write_fun, 
.read=read_fun, 
}; 

जब मैं insmod का उपयोग कर चालक लोड करते हैं, मुझे लगता है कि देख /proc/devices ड्राइवर को चार उपकरणों के नीचे सूचीबद्ध करता है लेकिन मुझे इसे /dev में नहीं मिल रहा है। एक गूगल खोज mknod का सुझाव दिया /dev में एक deivce बना सकते हैं और ड्राइवर की बड़ी और छोटी से संबद्ध करना। हालांकि, ऐसा करने का प्रयास सुपर उपयोगकर्ता के रूप में किए जाने पर भी "अनुमति अस्वीकार" त्रुटि हुई।

क्या मैं डिवाइस /dev में प्रदर्शित करने के लिए जब कर्नेल मॉड्यूल लोड किया जाता है क्या करना चाहिए? मैंने डिवाइस को पंजीकृत करने के पुराने (register_chrdev) और नए संस्करण (cdev_init & cdev_add) दोनों की कोशिश की लेकिन उनमें से कोई भी काम नहीं करता है।

धन्यवाद,
मीर

+1

देखें यह भी: http://stackoverflow.com/questions/5970595/create-a-device-node-in-code/ – Eugene

+0

संभावित डुप्लिकेट [लिनक्स कर्नेल मॉड्यूल के init \ _ मॉड्यूल कोड से डिवाइस नोड कैसे बनाएं?] (https://stackoverflow.com/questions/5970595/how-to-create-a-device-node-from-the-init-module-code-of-a-linux- कर्नेल- मॉड्यूल) –

उत्तर

3

आप सिस्टम क्या युक्ति नोड (रों) आप बनाने में इसकी आवश्यकता बताने के लिए create some udev rules करना पड़ सकता है।

3

मैं कंसोल पर आदेश के बाद चलाकर नोड बनाने के बाद /dev भीतर प्रविष्टियों देख सकता था।

sudo mknod -m 0666/dev/msio ग 22 0

उपयोगकर्ता जड़ नहीं था, इसलिए मैं sudo का उपयोग करने के लिए किया था। मेरा प्रवेश नाम msio था, क्रमशः प्रमुख और मामूली संख्या 22, 0 वाला एक चरित्र डिवाइस।

मैं तुम्हें पता है कि अगर यह प्रोग्राम के प्राप्त किया जा सकता करने देगा।

+3

हां, एक प्रोग्राम नोड प्रोग्रामेटिक रूप से बनाना संभव है। आप इसके लिए 'class_create()' और 'device_create' का उपयोग कर सकते हैं। @duskwuff द्वारा उल्लिखित यूदेव सिस्टम बाकी का ख्याल रखेगा। – Eugene

+0

@ यूजीन धन्यवाद। इससे बहुत मदद मिलती है। सभी को धन्यवाद। – Mir

1

CONFIG_DEVTMPFS काफी अच्छा आप का उपयोग करें कि आपके distro के साथ कर सकते हैं यदि है। आपके पास कर्नेल ऑटोमैटउंट हो सकता है जो आपके लिए बूट (CONFIG_DEVTMPFS_MOUNT) पर हो या इसे मैन्युअल रूप से माउंट करें (mount -t devtmpfs none/dev)।

0

सबसे पहले आप का उपयोग करने के: sudo mknod/dev/DEVICENAME ग 81 0

यह/dev में डिवाइस फ़ाइल बनाता है लेकिन आप इसे पढ़ने/लिखने की अनुमति देने का है। ऐसा करने के लिए

sudo chmod 777/dev/DEVICENAME

हो गया !!!

2
  • हेडर फाइल linux/device.h और linux/kdev_t शामिल करें।एच

  • स्थैतिक संरचना वर्ग c_dev;

  • स्थिर संरचना dev_t dev;

चालक की __init fuction के अंदर नीचे एपीआई के जोड़े

  • सीएल = class_create (THIS_MODULE, "एक्स");

जहां x - नाम/sys/class/ड्राइवर के लोड होने पर नाम प्रदर्शित किया जाना चाहिए।

  • डिवाइस_क्रेट (सीएल, न्यूल, देव, न्यूल, "डी") के साथ device_create() कर्नेल एपीआई का उपयोग करें;

जहां डी - डिवाइस फ़ाइल को/dev के अंतर्गत बनाया जाना है।

जहां देव कि चालक

आगे संदर्भ के लिए के लिए प्रमुख संख्या डायनामिक आवंटन के लिए alloc_chrdev_region एपीआई के उपयोग के दौरान आरंभ नहीं हो जाता पहला उपकरण संख्या के लिए चर रहा है कृपया लिंक के माध्यम से जाने http://opensourceforu.com/2011/04/character-device-files-creation-operations/

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