लिनक्स डिव्हाईस ड्रायव्हर मराठीतून :भाग ४:डिव्हाईस ड्रायव्हरचा हँलो वल्ड प्रोग्रम.


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

डिव्हाईस ड्रायव्हर प्रोग्राम हा लायब्ररी सारखा काम करतो याचा अर्थ असा कि अप्लिकेशन याच्यातील फंक्शन्स रन करतो.हा प्रोग्राम ‘c’ या भाषेत लिहिला जातो पण याच्यात C मध्ये वापरतो तसे main() हे फंक्शन नसते.हा प्रोग्राम कर्नेल द्वारा लॉक आणि लिंक केला जातो त्यासाठी त्यास कंपाईल करणे गरजेचे असते.

लिनक्स डिव्हाईस ड्रायव्हर मध्ये कन्स्ट्रक्टर आणि डीस्ट्रक्टर असतात.मोड्युल लोड केल्यावर  कन्स्ट्रक्टर कॉल केला जातो. आणि rmmod द्वारा मोड्यूल काढून टाकल्यास डीस्ट्रक्टर कॉल केला जातो ड्रायव्हर मध्ये मोड्युल init ,exit फंक्शन्स हे काम पाहतात.

लिनक्स डिव्हाईस ड्रायव्हर प्रोग्राम लिहण्यास सुरवात करण्या अगोदर आपण पुढील गोष्टी व सेटिंग करणे महत्त्वाचे आहे.

आपल्या लिनक्स कॉम्प्युटरमधील टर्मिनल विंडो ओपेन करा.

रुट अकौंट ने लॉग इन करा [su root].

रुट अकौंट कसे तयार करावे हे जाणून घेण्यासाठी येथे टिचकी मारा.

नंतर whoami [मी कोण ] हि कमांड वापरून आपण रुट अकौंट मधेच आहोत का याची खात्री करून घेणे.

नंतर आपण होम मध्ये एक फोल्डर तयार करावा जेथे प्रोग्राम स्टोअर करता येतील. आणि त्या फोल्डर मध्ये जावे.

उदा: [cd /home/MJ/]मी MJ नावाचा फोल्डर तयार करून त्यात काम करणार आहे.

आपण कोणत्या फोल्डर मध्ये आहे हे जाणून घेण्यासाठी pwd हि कमांन्ड वापरावी म्हणजे आपली चालू डिरेक्टरी कोणती ते समजेल.

आपण vi एडीटर वापरून आपले प्रोग्राम लिहणार आहोत तर vi hello.c हि कमांड दिल्यावर अगोदर जर hello.c फाईल असेल तर ती ओपेन होईल अन्यथा नवीन hello.c फाईल तयार होईल.आणि आपण व्हर्चुअल एडीटरच्या[vi] मध्ये जाऊ.

vi मध्ये प्रोग्राम लिहण्यासाठी आधी i बटन दाबावे तरच vi एडीटर इन्सर्ट मोडमध्ये येतो आणि आपण vi एडीटरमध्ये लिहू शकतो.

त्यानंतर खालील प्रोग्राम पेस्ट करावा किंवा टाईप करावा.

किंवा डायरेक्ट लिनक्सच्या टेक्स्ट एडीटर मध्ये जाऊन कोड कॉपी पेस्ट करून ती फाईल .c एक्सटेंशन देऊन सेव्ह करा.

हँलो वल्ड प्रोग्रम:

#include<linux/init.h>

#include<linux/module.h>

MODULE_LICENSE(“GPL”);

static int hello_init(void)

{

printk(KERN_ALERT “Hello world”);

return 0;

}

static void hello_exit(void)

{

printk(KERN_ALERT “Goodby”);

}

module_init(hello_init);

module_exit(hello_exit);

आपण वरील प्रोग्रामच्या कोडचे स्पष्टीकरण ओळीने पहात जाऊया.

प्रोग्रॅमच्या सुरवातीला काही हेडर फाईल इन्क्लुड कराव्या लागतात.

इन्क्लुड फाईल्सचे आपल्या संगणकातील लोकेशन पाहण्यासाठी /root/inclue/linux या लोकेशन वर जा आपलास डॉट एच [.h]फाईल्स चा साठा मिळेल.

१] init.h हि फाईल initहि प्रोसेस स्टार्ट करण्यासाठी इन्क्लुड केली जाते. जवळपास  सर्वच प्रोग्राम मध्ये हि फाईल इन्क्लुड करावी लागते.

या हेडर फाईलमध्ये सिस्टीम बुट आणि मोड्यूल्स कर्नेल मध्ये टाकण्यासाठी व काढण्यासाठी याचा उपयोग होतो.init आणि exitहि फंक्शन्स याचा फाईल मध्ये डिफाईन केली आहेत.

२] आपण जर डिव्हाईस् ड्रायव्हर लिहीत असो तर module.h फाईल इन्क्लुड करणे बंधनकार आहे.या फाईल मध्ये मोड्यूल्सशी निगडीत फंक्शन्स उपलब्द असतात

३] MODULE_LICENSE हि ओळ आपण GPL हा फ्री लायसन्स वापरणार आहे ते सांगते.

GPL चा अर्थ ग्नु पब्लिक लायसेन्स [GNU Public License]असा होतो.

४] जेंव्हा मोड्यूल कर्नेल मध्ये लोड होते तेंव्हा hello_init हे फंक्शन काम करते.या फंक्शनला इनिशलायझ फंक्शन म्हणतात.जर हे फंक्शन फेल झाले तर तो एरर कोड रिटर्न करतो म्हणून हे फंक्शन कधीच void नसते.

५] जसे आपण c प्रोग्रामिंग मध्ये printf वापरत होतो तसे लिनक्स कर्नेल प्रोग्रामिंग मध्ये prink()हे प्रिंटिंग साठी फंक्शन वापरतात.या फंक्शनमुळे स्ट्रिंग डाटा हा कर्नेल च्या लॉग बफर मध्ये साठवला जातो.

prink मध्ये अजून एक सुविधा असते ती म्हणजे मेसेजचे महत्व ठरवणे त्यासाठी मेसेजच्या सुरवातीला काही टँग लावतात.

printk फंक्शन मध्ये वेगवेगळ्या आठ loglevel असतात.त्या kernel.h या फाईल मध्ये कर्नेल मध्ये इनबिल्ट असतात.

Printk फंक्शनच्या आठ लॉग लेव्हल खालील प्रमाणे:

  • KERN_EMERG : हि लेव्हल मेसेज जेंव्हा इमर्जन्सी असेल तेंव्हा वापरतात.उदा:प्रोसेस बंद होणे.
  • KERN_ALERT : लक्ष वेधून घेण्यासाठी.
  • KERN_ERR : चूक दर्शविण्यासाठी
  • KERN_CRIT : क्रिटीकल सिरीयस हार्डवेअर वा सोफ्टवेअर प्रोब्लेम सांगण्यासाठी.
  • KERN_WARNING : धोक्याचा संदेश देण्यासाठी.
  • KERN_NOTICE : साधा नोटीस मेसेज सांगण्यासाठी.
  • KERN_INFO : माहिती सांगण्यासाठी.
  • KERN_DEBUG : डीबगिंग करताना मेसेज पाहण्यासाठी.

वरील प्रोग्राम मध्ये आपण Hello world हा मेसेज लॉग करणार आहोत.

६] त्यानंतर रिटर्न फंक्शन द्वारे आपण फंक्शन कॉल करताना आलेल्या एररचा कोड रिटर्न केला जातो.

७] मोड्युल कर्नेल मधून काढून टाकण्यासाठी hello_exit हे फंक्शन वापरतात.हे फंक्शन रन झाल्यानंतर “GoodBy”हा मेसेज लॉगमध्ये रेकोर्ड होतो.

८] module_init हे फंक्शन कर्नेल ला मोड्यूल्स इनिशलाईझ झाल्यवर कोणकोणते फंक्शन रन करायचे ते सांगतात.

९] module_exit हे फंक्शन कर्नेल ला मोड्यूल्स काढून टाकल्यावर कोणकोणते फंक्शन रन करायचे ते सांगतात

प्रोग्रम एडीटर मध्ये टाइप करून झाल्यानंतर Ctrl+Q बटन किंवा Esc दाबून आपण एडिटर मधून बाहेर पडावे.प्रोग्राम सेव्ह करून बाहेर पडण्यासाठी wq! हि कमांड वापरावी.

आता आपला पहिला प्रोग्रॅम तयार झाला आहे तो परत एकदा पाहण्यासाठी आपण .c फाईल टेक्स्ट एडीटर मधून ओपेन करून चेक करू शकता.

किंवा cat hello.c हि कमांड देऊन फाईल रीड ओन्ली मोड मध्ये बरोबर आहे का ते पाहू शकता.आपणस आपला प्रोग्राम पुढीलप्रमाणे दिसेल.

code of Hello world

Code of Hello world program

[Ref: Linux For You magazine]

मेक फाईल:

वरील कोड रन करण्या अगोदर तो मेक फाईल वापरून कंपाईल करावा लोगतो.त्यासाठी आपला प्रोग्राम ज्या फोल्डर मध्ये आहे त्याच फोल्डर मध्ये Makefile नावाची फाईल तयार करणे अन्यथा तुम्हाला तुमच्या फाईल चा पूर्ण पत्ता द्यावा लागेल.

      [नोंद :यातील Mekefile हा शब्द केस सेन्सेटिव्ह आहे त्यामुळे M हे केंपीटल लेटर्स मध्ये हवे.]

obj-m समोर कोणकोणते मोड्यूल्स बिल्ड करायचे आहेत त्यांची नावे द्यावीत. त्यानंतर .o,.koसारख्या फाईल कंपाईल झाल्यावर आपोआप तयार होतील.

      [नोंद :यामध्ये आपण आपल्या फाईल चे नाव .c या एक्सटेंशन चा वापर न करत .o [ऑब्जेक्ट] या एक्सटेंशन चा वापर करणार आहोत]

खालील कोड Makefileमध्ये पेस्ट करावा.

obj-m +=hello.o

all:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

मेक कोडची माहिती:

shell uname –r :हि कमांड आपल्या सिस्टीम वर कर्नेल चे कोणते व्हर्जन आहे ते शोधते.

पुढील ओळ हे दर्शविते कि, लोड होणारे मोड्युल हे कर्नेल चा भाग आहे आणि लोड झाल्यानंतर ते कर्नेलचा भाग बनेल.

प्रोग्राम पुढीलप्रमाणे रन करणे:

१. टर्मिनल विंडो मध्ये जाऊन आपली मेक फाईल असेल त्या फोल्डर मध्ये जाणे.

२. make कमांड वापरून आपला कोड आपण कंपाईल करावा कोड कंपाईल झाला तरच बाकी सपोर्टिंग फाईल्स तयार होतील अन्यथा एरर्स चा मेसेज मिळेल.त्याच बरोबर कोणत्या ओळीला चूक झाली आहे त्या ओळीचा नंबर पण मिळेल.

३. आपण परत vi hello.c करून कोड मध्ये जाऊन आवश्यक चेंजेस करावेत.

. sudo insmod hello.ko:हि कमांड वापरल्यावर आपले मोड्युल कर्नेल मध्ये इन्क्लुड होते.

५. आता ते झाले का नाही हे चेक करण्यासाठी कर्नेल लॉग मधील मेसेज पाहण्यासाठी dmesg हि कमांड वापरा.

६. आपणास “Hello World”हा मेसेज दिसेल म्हणजे इनिशियलायझेशन फंक्शन सुरळीत चालत असेल.

७. lsmod हि कमांड वापरून आपले मोड्युल हे लिस्ट मध्ये आहे ना ते चेक करणे.

८. नंतर आपले मोड्युल काढून टाकण्यासाठी sudo rmmod hello.koहि कमांड वापरा आणि dmesg कमांड वापरून मेसेज चेक करणे.

९. [नोंद : आपण एक मोड्युल एकदाच इन्सर्ट करू शकतो दुसऱ्यांदा ते इन्सर्ट करायचे असल्यास आधीचे मोड्युल काढून मग परत सुधारित मोड्युल इन्सर्ट करावे.]

Output window

Output window

अशा प्रकारे आज आपण कर्नेल चा बेसिक प्रोग्राम कसा करावा हे शिकलात.आपण आपल्या कॉम्प्युटर वर हा सोपा प्रोग्राम नक्की करून पहा.

मी आपल्याला सोपे जावे म्हणून मी केलेला प्रोग्रॅम फाईल्स जोडलेल्या आहेत.

खालील hello.c आणि  Makefile यांचे .doc हे एक्सटेंशन काढून या फाईल्स आपण जशाच्या तशा वापरू शकतो.[हे एक्सटेंशन फाईल ब्लॉगला  जोडण्यासाठी मी लावलेले आहे.]

डाऊनलोड करण्यासाठी  फाईल्स :  Makefile आणि   hello1.doc

आपला स्वतः चा डिव्हाईस ड्रायव्हर कसा वाटला आपल्याला..झकास ना.. आता याच प्रोग्राम मध्ये सुधारणा करत करत आपण पुढचे प्रोग्राम शिकणार आहोत.

यानंतर डिव्हाईस ड्रायव्हरचा पँरामिटर पासिंग प्रोग्रम,प्रोसेस संबन्धित प्रोग्रम शिकण्यास आपणस नक्की आनंद होईल…मग सज्ज रहा पुढच्या पायरीसाठी…

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

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

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

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

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

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

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

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

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

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

धन्यवाद -MJ :-)

तुमचा अभिप्राय नोंदवा

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / बदल )

Twitter picture

You are commenting using your Twitter account. Log Out / बदल )

Facebook photo

You are commenting using your Facebook account. Log Out / बदल )

Google+ photo

You are commenting using your Google+ account. Log Out / बदल )

Connecting to %s