Character Device driver

लिनक्स डिव्हाईस ड्रायव्हर मराठीतून :भाग ६ :कँरेक्टर डिव्हाईस ड्रायव्हर बेसिक


आपण बेसिक डिव्हाईस ड्रायव्हर कसा लिहायचा हे पाहिलंत,आता खास कँरेक्टर डिव्हाईस ड्रायव्हर कसा लिहायचा ते या अंकात पाहूया.

आपण मागील लिनक्स कर्नेल च्या भागात हे पण शिकला आहात कि लिनक्स मध्ये डिव्हाईस सुद्धा एका फाईलच्या रुपात असतो.या डिव्हाईस फाईलचे नाव हे आपल्या सिस्टीमवरील अप्लिकेशन आणि डिव्हाईस फाईल यांच्यातील दुवा म्हणून काम करते.आणि डिव्हाईस फाईल आणि डिव्हाईस यांच्या मध्ये संभाषण करण्यासाठी त्या डिव्हाईसचा नंबर महत्त्वाचा असतो.

डिव्हाईस फाईलचा नंबर हा दोन नंबरच्या जोडीने बनलेला असतो:मेजर नंबर आणि मायनर नंबर. <major,minor>.आपल्या सिस्टममध्ये अनेक ड्रायव्हर एखादा मेजर नंबर [कॉमन] वापरू शकतो पण त्यांचा मायनर नंबर वेगळा असेल.कर्नेल मायनर नंबर चा वापर नक्की कोणता डिव्हाईस कनेक्ट केला आहे ते समजून घेण्यासाठी करतो.

आपल्या सिस्टीम मधील कँरेक्टर डिव्हाईस ड्रायव्हर पाहण्यासाठी पुढील कमांड टर्मिनल विन्डो देऊन पाहू शकतो.

$ ls –l /dev/ grep “^c”

कँरेक्टर डिव्हाईस ड्रायव्हर

कँरेक्टर डिव्हाईस ड्रायव्हर

आपल्या सिस्टीम मधील सर्व डिव्हाईस ड्रायव्हर पाहण्यासाठी पुढील कमांड टर्मिनल विन्डोला द्या.

ls –l /dev :या कमांड ने आपण सर्व डिव्हाईस पाहू शकतो.

ते आपणास पुढील प्रमाणे दिसेल:

ब्लॉक व  कँरेक्टर डिव्हाईस ड्रायव्हर

ब्लॉक व कँरेक्टर डिव्हाईस ड्रायव्हर

यात brw : हे ब्लॉक डिव्हाईस ड्रायव्हर तर crw कँरेक्टर डिव्हाईस ड्रायव्हर दर्शवितात.

dev_t व्हेरिएबल यामध्ये दोन्ही नंबर साठवलेले असतात.

[१२ बीट मेजर +२० बीट मायनर=३२ बीट डेव्ह]

MKDEV( int major ,int minor) हि कमांड वापरली कि डिव्हाईस dev तयार होतो.

आपली डिव्हाईस फाईल हि डिव्हाईस ड्रायव्हरला जोडण्यासाठी पुढील दोन पायऱ्या आहेत.

१.आपल्या  डिव्हाईसचा <major,minor> नंबर देऊन रजिस्टर करणे.

२. डिव्हाईस फाईलच्या ऑपरेशन्स आणि डिव्हाईस ड्रायव्हर ची फंक्शन्स जोडणे.

डिव्हाईसचा नंबर मिळवण्यासाठी <linux/fs.h> मधील पुढील API फार महत्त्वाचे आहेत.

int register_chardev_region(dev_t first,unsigned int count, char *name);

int alloc_chardev_region(dev_t *dev,unsigned int firstminor,unsigned int count,char *name);

void unregister_chardev_region(dev_t first,unsigned int count);

  • पहिला API हा cnt इतका नंबर असलेला डिव्हाईस रजिस्टर करतो.
  • जर हे फंक्शन्स व्यवस्थितपणे चाले तर ते ० हे रिटर्न करते आणि जर काही प्रोब्लेम आला तर निगेटिव्ह संख्या रिटर्न होते.
  • दुसरा API हा आपोआप मोकळा मेजर नंबर शोधून डिव्हाईस रजिस्टर करतो.तो पहिला मायनर नंबर हा शक्यतो ० हाच असतो.
  • तिसरा API हा आपलास आपला डिव्हाईस नंबर वापरून झाल्यावर मोकळा करण्यासाठी वापरतात.हा API क्लीन अप फंक्शन मध्ये वापरावा.

[REF:Linux Device Driver Book]

डिव्हाईस नंबर दर्शविणारा प्रोग्राम:

#include <linux/module.h>

#include <linux/version.h>

#include <linux/kernel.h>

#include <linux/init.h>

#include <linux/fs.h>

static dev_t first;  //globle variable for the device no

int __init ofd_init(void) /*const*/

{

printk(KERN_INFO “NAMSAKAR:ofd reg”);

if (alloc_chrdev_region(&first, 0, 3, “Mahesh”) <0)

{

return -1;

}

printk(KERN_INFO “<major,minor>: <%d ,%d> \n”, MAJOR(first),MINOR(first));

return 0;

}

static void __exit ofd_exit(void)/*Destructor*/

{

unregister_chrdev_region(first, 3);

printk(KERN_INFO “by Gn:ofd unreg”);

}

module_init(ofd_init);

module_exit(ofd_exit);

MODULE_LICENSE(“GPL”);

MODULE_AUTHOR(“MJ”);

MODULE_DESCRIPTION(“OUR FIRST character DRIVER”);

 

हा प्रोग्राम रन केल्या नंतर mahesh नावाचा डिव्हाईस ड्रायव्हर तयार होऊन त्याचा मायनर आणि मेजर नंबर आपणास दिसेल.

मेजर नंबर आणि मायनर नंबर

मेजर नंबर आणि मायनर नंबर

वरील आउटपुट विंडो मध्ये आपण आपल्या डिव्हाईस चे मेजर नंबर आणि मायनर नंबर डिस्प्ले झालेले पाहिलेत हे आपण आपल्या प्रोग्राममधील printkफंक्शन वापरून आउटपुट विंडोमध्ये दाखवले आहेत.

डिव्हाईस सिस्टिम मध्ये रजिस्टर झाला.

डिव्हाईस सिस्टिम मध्ये रजिस्टर झाला.

वरील चित्रात आपण आपला डिव्हाईस सिस्टिम मध्ये रजिस्टर झाला आहे कि नाही हे /proc/device मध्ये जाऊन पहिले येथे आपण mahesh नावाचा डिव्हाईस तयार झालेला दिसेल.

नंतर आपण /devमध्ये जाऊन पाहिल्यास आपणास डिव्हाईस फाईल तयार झाली नाही हे कळेल मग आपण mknodचा वापर करून नोड तयार केले व त्यात आपल्या डिव्हाईस साठी फाईल तयार झालेली दिसेल.

हेच काम आपण ऑटोमॅटिक पण करू शकतो ते आपण पुढील भागात पाहणार आहोत.

आपणास हा भाग कसा वाटला ते नक्की कळवा.

“लिनक्स मराठीतून “ च्या पुढील भागाला भेट देण्यासाठी येथे टिचकी मारा:

भाग १]लिनक्सची ओळख आणि उबुंटू इन्स्टॉलेशन.

भाग २]लिनक्सची जान आणि शान टर्मिनलची ओळख आणि vi एडीटर.

भाग 3]लिनक्स कर्नेल आणि डिव्हाईस ड्रायव्हर ची ओळख.

भाग ४]डिव्हाईस ड्रायव्हरचा हँलो वल्ड प्रोग्रम.

भाग ५]डिव्हाईस ड्रायव्हरचा पँरामिटर पासिंग व प्रोसेस संबन्धित प्रोग्रम.

भाग ६ ]कँरेक्टर डिव्हाईस ड्रायव्हर बेसिक

भाग ७] कँरेक्टर डिव्हाईस ड्रायव्हर फाईल ऑपरेशन्स.

भाग ८ ]पी. सी. आय. डिव्हाईस ड्रायव्हर बेसिक

धन्यवाद -MJ 🙂

Advertisements