Author Archives:

लिनक्स डिव्हाईस ड्रायव्हर मराठीतून :भाग ७ :कँरेक्टर डिव्हाईस ड्रायव्हर फाईल ऑपरेशन्स.


आपण मागील भागात कँरेक्टर डिव्हाईस ड्रायव्हर म्हणजे काय ते पहिले आता त्या डिव्हाईस ड्रायव्हर बरोबर डाटा ऑपरेशन्स कशी करावीत ते आपण या भागात पाहूया.

कँरेक्टर डिव्हाईस ड्रायव्हर हा त्याचा फाईलला जोडला गेलेला असतो.

आपली सर्व कामे तो फाईल्स च्या माध्यमातून पूर्ण करतो.

फाईल ऑपरेशन्स या स्ट्रक्चर मध्ये पण फाईल ची सर्व फंक्शन्स डिक्लेअर करून आपण तो फाईल ओपन, कोल्ज, रीड ,राईट करू शकतो.

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

#include <linux/module.h>

#include <linux/version.h>

#include <linux/kernel.h>

#include <linux/init.h>

#include <linux/fs.h>

#include <linux/device.h>

#include <linux/cdev.h>

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

static struct cdev c_dev; //globle var for char struct

static struct class *cl; //globle var for device class

static int my_open(struct inode *i, struct file *f)

{

printk(KERN_INFO “Driver : open()\n”);

return 0;

}

static int my_close(struct inode *i , struct file *f)

{

printk(KERN_INFO “Driver:close()\n”);

return 0;

}

static ssize_t my_read(struct file *f,char __user *buf,size_t len,loff_t *off)

{

printk(KERN_INFO “Driver:read()\n”);

return 0;

}

static int my_write(struct file *f,const char __user *buf,size_t len,loff_t *off)

{

printk(KERN_INFO “Driver:write()\n”);

return len;

}

static struct file_operations pugs_fops=

{

.owner = THIS_MODULE,

.open = my_open,

.release =my_close,

.read =my_read,

.write =my_write

};

 

static int __init ofcd_init(void) /*const*/

{

printk(KERN_INFO “NAMSAKAR:ofd reg”);

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

{

return -1;

}

if ((cl = class_create(THIS_MODULE, “chardrv”)) == NULL)

{

unregister_chrdev_region(first, 1);

return -1;

}

if (device_create(cl, NULL ,first, NULL, “mynull”) == NULL)

{

class_destroy(cl);

unregister_chrdev_region(first, 1);

return -1;

}

cdev_init(&c_dev, &pugs_fops);

if (cdev_add(&c_dev, first, 1)== -1)

{

device_destroy(cl,first);

class_destroy(cl);

unregister_chrdev_region(first,1);

return -1;

}

return 0;

}

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

{

cdev_del(&c_dev);

device_destroy(cl, first);

class_destroy(cl);

unregister_chrdev_region(first,1);

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

}

module_init(ofcd_init);

module_exit(ofcd_exit);

MODULE_LICENSE(“GPL”);

MODULE_AUTHOR(“MJ”);

MODULE_DESCRIPTION(“OUR FIRST character DRIVER:automatic”);

     [REF:Linux for you magazine]

 कोणती .h फाईल कधी इन्क्लुड करावी:

#include <linux/init.h> : बेसिक इनिशियलायझेशन

#include <linux/module.h> :कोणतेही मोड्यूल्स लिहताना

#include <linux/version.h> :लिनक्स व्हर्जनचा डाटा मिळवण्यासाठी.

#include <linux/kernel.h> : prinitk() हे फंक्शन वापरता येण्यासाठी.

#include <linux/fs.h> :फाईल्स च्या निगडीत ऑपरेशन्स करण्यासाठी

#include <linux/device.h> : डिव्हाईस शी निगडीत ऑपरेशन करताना.

#include <linux/cdev.h> :मेजर व मायनर नंबरसह करेक्टर डिव्हाईस तयार करण्यासाठी.

#include <linux/slab.h> :kmalloc() हे फंक्शन वापरण्यासाठी.

#include <linux/errno.h> :एरर्स चा कोड या फाईल मध्ये असतो.

#include <linux/types.h> :size_t ,dev_t या सारखे डाटा टाईप सपोर्ट साठी.

#include <linux/fcntl.h> : o_accmode साठी

#include <asm/system.h> :cli(), _flags वापरण्यासाठी

#include <asm/uaccess.h> :copy_from /to _users या सारखी फंक्शन्स वापरताना.

 module.h मधील फंक्शन्सची माहिती :

MODULE_ALIAS(_alias) युजर स्पेस मध्ये मोड्युलचे नाव व माहितीदेण्यासाठी.
MODULE_LICENSE(_license) मोड्युल कोणते लायसन्स वापरणार आहे त्याचे नाव.
MODULE_AUTHOR() मोड्युलचा लेखक.
MODULE_DESCRIPTION() मोड्युलच्या कामविषयक थोडक्यात माहिती
MODULE_PARAM() मोड्युल लोड करताना पास केले जाणारी पँरामिटर
MODULE_VERSION() वापरल्या जाणाऱ्या मोड्यूल चे व्हर्जन

आपण modinfo मोड्युलचे नाव .ko अशी कमांड दिली असता वरील सर्व मोड्युल शी निगडीत माहिती आपणस मिळते.

फाईल ऑपरेशन्सच्या काही महत्त्वाच्या गोष्टी:

वरील कोड मध्ये ओपन आणि क्लोज फंक्शन int रिटर्न करतात ,० म्हणजे यशस्वीपणे पार पडले आणि निगेटिव्ह म्हणजे काही तरी प्रोब्लेम आहे.पण रीड आणि राईट हे फंक्शन्स काही पोझिटिव्ह नंबर रिटर्न करतात ते म्हणजे किती बाईट डाटा रीड किंवा राईट झाला म्हणूनच त्या फंक्शन्स चा रिटर्न टाईप ssize_t आहे.

तसेच आणखी एक मस्त गोष्ट आहे…read() हे फंक्शन len बाईट्स इतका डाटा buf या बफर मध्ये लिहिते आणि किती बाईट्स लिहिलेत ती संख्या रिटर्न व्हेल्यू म्हणून पाठवते.म्हणजेच रीड फंक्शन हे युजर स्पेसिफिक बफर मध्ये डाटा लिहिते कारण तो युजरला वाचता व वापरता यावा…आहे ना गंमत रीड फंक्शन्स बफर मध्ये राईट करते….

काही महत्त्वाचे कोडचे भाग:

loff_t (*llseek) (struct file *, loff_t, int);

यात llseek हि मेथड फाईल ची चालू रीड राईट पोझिशन बदलतो , loff_t म्हणजे लोंग ऑफसेट.

ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);

हे फंक्शन डिव्हाईस कडून डा टा घेताना वापरतात जर या ठिकाणी काहीच डा टा नसेल तर ते –EINVAL म्हणजेच इन्व्हेलीड अर्ग्युमेंट म्हणून एरर दर्शविते.

int (*open) (struct inode *, struct file *);

डिव्हाईस ओपन करणे हि डिव्हाईस फाईल वर केली जाणारी पहिली क्रिया.

struct module *owner

हे आपल्या मोड्युल ला पोईंट करते आणि जर आपले मोड्यूल कामत असेल तर ते काढून टाकण्यास प्रतिबंध करते.

बयाचदा यास THIS_MODULE हे  नाव राहते याची डेफिनेशन <linux/module.h> मध्ये असते.

ओपन मेथड :

ओपन मेथड पुढील काम करते:

  • डिव्हाईस तयार आहे का नाही ते पाहणे आणि त्या निगडीत काही एरर्स आहेत का ते पाहणे.
  • जर डिव्हाईस प्रथमच ओपन हॉट अहेल तर त्याचे  इनिशियलायझेशन करणे.
  • f_op पोईंटर अपडेट करणे.
  • file->private_data मध्ये ठेवण्यात येणाऱ्या डाटा स्ट्रक्चर साठी राखीव जागा करून त्यात तो ठेवणे.

रिलीज मेथड:

रिलीज मेथड पुढील काम करते:

  • ओपन मेथडने file->private_data मध्ये ठेवलेली जागा काढून घेणे.
  • डिव्हाईस बंद करणे.

रीड आणि राईट मेथड:

  • ssize_t read(struct file *filp, char __user *buff, size_t count, loff_t *offp);
  • ssize_t write(struct file *filp, const char __user *buff,size_t count, loff_t *offp);
  • यात flip हा फाईलचा पोईंटर असतो.
  • count म्हणजे ट्रान्सफर करणाऱ्या डाटाची साईझ.
  • buff म्हणजे युजरचा बफर ज्यात रीड आणि राईट करताना डाटा ठेवला जातो.
  • offp [लोंग ऑफसेट टाईप पोईंटर] युजर वापरात असणर्‍या फाईलची पोझिशन दर्शवते.
  • रिटर्न व्हेल्यू ssize_t म्हणजेच signed size type.

हे अधिक स्पष्ट होण्यासाठी पुढील आकृती पहा:

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

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

   [Ref:Linux Device Driver Book]

रीड आणि राईट मेथड साठी नियम:

जर रिटर्न संख्या हि फंक्शन मधील count या अंके इतकी असेल तर तितके बाईट्स पाठवले जातात.

जात रिटर्न संख्या हि पोझिटिव्ह असेल आणि count पेक्षा कमी असेल तर तितकाच डाटा पाठवला जातो

जर रिटर्न संख्या हो शून्य असेल तर फाईल संपली असे मानले जाते .

निगेटिव्ह रिटर्न संख्या म्हणजे एरर याचा नंबर <linux/errno.h>या फाईल मध्ये असतो यात –EINTR [interrupt system call],-EFAULT [bad address]यांचा समावेश होतो.

 

डिव्हाईस ड्रायव्हरचा बेसिक सारांश.

क्रिया

युजर फंक्शन्स

कर्नेल फंक्शन्स

मोड्युल लोड करणे. [load] insmod module_init()
डिव्हाईस उघडणे. [open] fopen file_operations:open
डिव्हाईस मधून वाचणे.[close] fread file_operations:read
डिव्हाईस मध्ये लिहणे.[read] fwrite file_operations:write
डिव्हाईस बंद करणे.[write] fclose file_operations:release
मोड्यूल काढून टाकणे.[remove] rmmod module_exit()

[Ref:FreeSoftwareMagazine]

 आता आपण सर्व बेसिक फाईल ऑपरेशन्स शिकला आहात..मजा आली ना…आता..पुढील भागात आपण पी सी आय डिव्हाईस ड्रायव्हर ची महिती घेवूया.

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

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

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

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

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

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

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

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

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

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


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

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

डिव्हाईस फाईलचा नंबर हा दोन नंबरच्या जोडीने बनलेला असतो:मेजर नंबर आणि मायनर नंबर. <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 :-)

लिनक्स डिव्हाईस ड्रायव्हर मराठीतून :भाग ५:डिव्हाईस ड्रायव्हरचा पँरामिटर पासिंग व प्रोसेस संबन्धित प्रोग्रम.


नमस्कार मित्रानो, मागील भागात आपण बेसिक हेंलो वल्ड चा प्रोग्राम पाहिलात,इतक्या सोप्या पद्धतीने डिव्हाईस ड्रायव्हर लिहायला तुम्हाला नक्कीच मजा आली असेलच.

या भागात आपण थोडे पुढे जाऊन वेगवेगळे बेसिक प्रोग्राम्स शिकणार आहोत.

समजा तुम्हाला तुमच्या डिव्हाईस ड्रायव्हरला काही पँरामिटर द्यायचे असतील तर ते कसे द्यायचे ते आपण या अंकात पाहूया.

पँरामिटर पासिंग प्रोग्रम :

प्रथम आपण आपल्या मोड्युलला फक्त एक पँरामिटर कसे पाठवायचे ते पाहूया.

पुढे आपणस रन करण्यासाठी लागणारा प्रोग्राम दिलेला आहे.

#include<linux/init.h>#include#includeMODULE_LICENSE(“GPL”);int paramTest;module_param(paramTest, int,S_IRUSR|S_IWUSR);static int param_init(void)

{

printk(KERN_ALERT “Showing the parameter demo”);

printk(KERN_ALERT “VALUE OF PARAMTEST IS: %d”,paramTest);

return 0;

}

static void param_exit(void)

{

printk(KERN_ALERT “Exiting the parameter demo”);

}

module_init(param_init);

module_exit(param_exit);

[Ref: Linux For You magazine]

वरील प्रोग्रॅम मध्ये मोड्युल पँरामिटर शी निगडीत फंक्शन्स चा लाभ घेण्यासाठी moduleparam हि फाईल हेडर मध्ये इन्क्लुड केलेली आहे.

module_param(paraameter name, data type ,permission);

हा फॉरमेट कर्नेल ला पँरामिटरचे नाव ,त्याचा डाटा टाईप आणि त्यास दिल्या जाणाऱ्या परमिशन दर्शविते.

परमिशन चे प्रकार पडतात: S_IWUSR,S_IRUSR,S_IXUSR,S_IRGRP,S_WGRP

  • यात S_I हे हेडर सर्वाना कॉमन आहे.
  • R =रीड वाचणे ,W =राईट लिहिणे ,X= एक्झीक्युट करणे.
  • USR=युजर ,GRP=ग्रुप
  • यात OR म्हणजे | ऑर ऑपरेशन करून एका पेक्षा जास्त परमिशन सेट करता येतात.

आपण आपला प्रोग्राम टेक्स्ट एडिटर मधून लिहला असता तो पुढीलप्रमाणे दिसतो.

पँरामिटर पासिंग प्रोग्रम

पँरामिटर पासिंग प्रोग्रम

हा प्रोग्राम रन करण्यासाठी पुढील पायऱ्या आहेत.

[आपण मागील भागातील मेक फाईल कशी करावी या भागाचा आधार घेऊ शकता]

आपल्या मेक फाईल मध्ये hello.o च्या जागी आपल्या वरील फाईल चे नाव [parameter.o] देणे आणि फाईल सेव्ह करणे.

मेक फाईल मधील बदल

मेक फाईल मधील बदल

नंतर make हि कमांड वापरून फाईल कंपाईल करणे.

आता हे मोड्युल कर्नेल मध्ये टाकण्यासाठी :sudo insmod parameter.ko paramTest=2

हि कमांड वापरणे यात आपण paramTest यास हि संख्या पँरामिटर म्हणून पाठवली.

आता आपले आउटपुट पाहण्यासाठी dmesg कमांड वापरणे.

तेंव्हा आपणास “Value of paramTest=2 “असे  आउटपुट मिळेल.

आउटपुट विंडो

आउटपुट विंडो

पँरामिटरचा अँरे :

आता एका पेक्षा जास्त पँरामिटर पास करण्यासाठी पँरामिटरचा अँरे पाठवावा लागतो.

त्यासाठी पुढील प्रोग्रम पहा:

#include<linux/init.h>

#include<linux/module.h>

#include<linux/moduleparam.h>

MODULE_LICENSE(“GPL”);

int paramArray[3];

module_param_array(paramArray, int,NULL, S_IWUSR|S_IRUSR);

static int array_init(void)

{

printk(“Into the parameter Array demo”);

printk(“Array elements are :%d\t%d\t%d”,paramArray[0],paramArray[1], paramArray[2]);

return 0;

}

static void array_exit(void)

{

printk(“Exiting the array parameter demo”);

}

module_init(array_init);

module_exit(array_exit);

यात int चा ३ इतकी साईझ असलेला अँरे वापरला आहे.

अँरे हे पँरामिटर म्हणून वापरण्यासाठी module_param() च्या जागी module_param_array() हे फंक्शन वापरले आहे.

यात इतर पँरामिटर सोबत counter असतो हा किती पँरामिटर पास केले याची नोंद ठेवतो आपलं प्रोग्राम मध्ये ती सुविधा वापरली नाही आहे म्हणून आपण तो असा ठेवला आहे.

पँरामिटरचा अँरे पासिंगचा प्रोग्राम

पँरामिटरचा अँरे पासिंगचा प्रोग्राम

आपण sudo insmod parameterArray.ko paramArray=1,2,3 असे पँरामिटर अँरे सोबत

मोड्युल लोड करतो.

तेंव्हा आपणस dmesg केल्यावर या तीन संख्या आउटपुट स्क्रीनवर दिसतील.

 

पँरामिटर अँरे पासिंग प्रोग्रम आउटपुट विंडो
पँरामिटर अँरे पासिंग प्रोग्रम आउटपुट विंडो

प्रोसेस संबन्धित प्रोग्रम.

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

#include<linux/init.h>

#include<linux/module.h>

#include<linux/sched.h>

MODULE_LICENSE(“GPL”);

static int test_init(void)

{

struct task_struct *task;

for_each_process(task)

{

printk(“process Name :%s\t PID:%d\t Process State:%ld\n”,task->comm,task->pid, task->state);

}

return 0;

}

static void test_exit(void)

{

printk(KERN_INFO “Clearing up.\n”);

}

module_init(test_init);

module_exit(test_exit);

 

 

 

 

 

 

 

 

 

 

 

लिनक्स मध्ये प्रत्येक प्रोसेसला काही गोष्टी जोडल्या गेलेल्या असतात जसे कि प्रोसेसचा आय डी नंबर,प्रोसेस ची चालू स्थिती फ्लँग इत्यादी.

प्रोसेस संबधित प्रोग्रम लिहिताना आपणस sched.h हि फाईल हेडर मध्ये इन्क्लुड करावी लागते.

आपणस task_struct या स्ट्रक्चर चा पोईंटर करून याच्या आधारे आपण भरपूर माहिती मिळवू शकतो.

प्रोसेसची माहिती मिळवणारा प्रोग्रम.

प्रोसेसची माहिती मिळवणारा प्रोग्रम.

आपण वरील प्रोग्राम मध्ये आपल्या सिस्टीम मधील प्रोसेसचा आय डी नंबर,प्रोसेस ची चालू स्थिती फ्लँग इत्यादी माहिती पाहू.

यात task नावाचा पोईंटर तयार करण्यात आलेला असून आपण आपल्या सिस्टीम मधील प्रोसेस या स्ट्रक्चर पोईंटरचा वापर करून डिस्प्ले करणार आहोत.

हा प्रोग्राम रन केल्यानंतर आपणास प्रोसेस ची लिस्ट दिसेल.

अशा रीतीने आपण आपल्या सिस्टीम मधील प्रोसेस बद्दल पूर्णपणे माहिती घेवू शकता.आपणस आउटपुट विंडो खालीलप्रमाणे दिसेल.

आउटपुट :सिस्टीममधील प्रोसेस

आउटपुट :सिस्टीममधील प्रोसेस

या प्रोसेस आय डी आपण इंटरनेटवर सर्च कारण आपणस हव्या त्या प्रोसेस बद्दल अधिक माहिती घेवू शकतो.तसेच कोणती प्रोसेस कोणते अप्लिकेशन चालू आहे त्याची स्टेट काय हि सुद्धा माहिती मिळते.

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

अशा रीतीने आपण पँरामिटर पासिंग आणि प्रोसेसशी निगडीत प्रोग्राम कसे रन करावे ते पाहिलेत.

आपण कँरेक्टर डिव्हाईस ड्रायव्हरची माहिती पुढे घेणार आहोत तर हे डिव्हाईस ड्रायव्हर म्हणजे काय ते कसे काम करतात त्यांचे प्रकार कोणते हे प्रश्न तुम्हाला पडले असतीलच तर भेटूया पुढील अंकात याच प्रश्नांची उत्तरे शोधण्यासाठी…. 

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

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

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

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

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

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

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

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

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

Follow

Get every new post delivered to your Inbox.

Join 128 other followers