लिनक्स डिव्हाईस ड्रायव्हर मराठीतून :भाग १०:डिस्प्ले डिव्हाईस ड्रायव्हर बेसिक.


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

व्हिडिओ डिव्हाईस हे डिस्प्लेवर दाखवण्यासाठी व्हिज्युअल आउटपुट डाटा तयार करतात.

लिनक्स व्हिडिओ सिस्टीम हि फ्रेम बफर लेयर्स तयार करून देऊन हार्डवेअर चेंजेस वर डिपेंडेबल नसणारी सिस्टीम सुविधा तयार करून देते.

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

त्याचा वापर करून अँप्लिकेशनमध्ये कोणताही बदल न करता अँप्लिकेशन्स वेगवेगळ्या हार्डवेअरवर चालू शकते.

आपण वापरात असलेले काही वेब ब्राऊजर ,व्हिडीओ प्लेयर्स अशी अँप्लिकेशन्स डायरेक्ट फ्रेमबफर वापरून ग्राफिक्स हार्डवेअरशी डाटा ट्रान्सफर ऑपरेशन करतात.

फ्रेम बफर कन्सेप्ट:

खालील चित्रात दाखवल्या प्रमाणे मुव्ही प्लेयर कॉमन फ्रेम बफर ए. पी. आय. चा वापर करून वेगवेळ्या व्हिडीओ कार्ड बरोबर डाटा ट्रान्सफर करतात.यावरून आपणास फ्रेम बफर चा फायदा काय आहे ते समजले असेलच.

x-windows सारखी काही अँप्लिकेशन्स APIचा वापर न करता डायरेक्ट हार्डवेअर शी संभाषण साधू शकतात.

फ्रेम बफर कन्सेप्ट

फ्रेम बफर कन्सेप्ट

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

यात रिझोल्यूशन ,फ्रिक्वेंसी,टायमिंग ,व्हर्टिकल सिंक ,हॉरीझोन्टल सिंक यांची सविस्तर माहिती मिळेल.

फ्रेम बफर API:

फ्रेम बफर API चा वापर करताना काही मुख्य डाटा स्ट्रक्चर माहित असणे गरजेचे आहे ती पुढीलप्रमाणे:

1)   struct fb_var_screeninfo.:या स्ट्रक्चर मध्ये डिस्प्ले स्क्रीन ची काही बदलता येणाऱ्या गोष्टी ठेवलेल्या असतात उदा:रिझोल्यूशन,मार्जिन हि सेटिंग्ज प्रोग्रामर बदलू शकतो.

2)   struct fb_fix_screeninfo :या डाटा स्ट्रक्चर मध्ये व्हिडीओ हार्डवेअर ची फिक्स माहिती ठेवलेली असते जसे कि फ्रेमबफर मेमरीचा साईझ,स्टार्टींग चा अँड्रेस.

3)   fb_cmap :हे स्ट्रक्चर फ्रेम बफरचा कलर मँप ठरवते.युजर यामार्फत रेड,ब्लु,ग्रीन [RGB]या कलर्स च्या संख्या ठरवू शकतो.

तसेच यात ट्रान्सपरन्सी सेट करण्याची हि सुविधा आहे.

फ्रेमबफर ड्रायव्हर:

आपण आपल्या डिस्प्ले बरोबर फ्रेमबफर ड्रायव्हर ने संभाषण करणार आहोत.

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

 डाटा स्ट्रक्चर्स:

struct fb_info :हे फ्रेमबफर डिव्हाईस ड्रायव्हर मधील प्रमुख डाटा स्ट्रक्चर आहे.हे स्ट्रक्चर include/linux/fb.h येथे डिफाईन केलेले असते.

struct fb_info {

/* … */

struct fb_var_screeninfo var; /* Variable screen information.

struct fb_fix_screeninfo fix; /* Fixed screen information.

/* … */

struct fb_cmap cmap; /* Color map.

/* … */

struct fb_ops *fbops; /* Driver operations.

/* … */

char __iomem *screen_base; /* Frame buffer’s virtual address */

unsigned long screen_size; /* Frame buffer’s size */

/* … */

/* From here on everything is device dependent */

void *par; /* Private area */

};

वरील स्ट्रक्चर मध्ये आपण शिकलेली स्क्रीन फिक्स इन्फो,स्क्रीन व्हेरिएबल इन्फो ,कलर मँप हे डाटा स्ट्रक्चर डिफाईन केले आहेत तसेच फाईल ऑपरेशन साठी वापरण्यात येणार fb_ops हे स्ट्रक्चर सुद्दा आहे.

स्कीन बफर चा साईझ आणि बेस अँड्रेस डिफाईन केले आहेत.

यात आपल्या डिव्हाईसशी निगडीत असलेला डाटा हा par या पोईंटरमध्ये ठेवलेला असतो.

framebuffer_alloc() हि मेथड वापरून fb_info साठी मेमरी अलोकेट केली जाते. 

fb_ops हे स्ट्रक्चर:

struct fb_ops

{

struct module *owner;

/* ड्रायव्हर ओपन करणे */

int (*fb_open)(struct fb_info *info, int user);

/* ड्रायव्हर कोल्ज करणे */

int (*fb_release)(struct fb_info *info, int user);

/* व्हेरिएबल स्क्रीन इन्फो वापरून डिव्हाईसचे पेरामीटर व्यवस्थीत आहेत का नाहीत ते चेक करणे.*/

int (*fb_check_var)(struct fb_var_screeninfo *var,

struct fb_info *info);

/* व्हिडीओ कंट्रोलर चे रेजिस्टंर सेट करणे*/

int (*fb_set_par)(struct fb_info *info);

/* कलर रेजिस्टर पँरामीटर सेट करणे. */

int (*fb_setcolreg)(unsigned regno, unsigned red,

unsigned green, unsigned blue,

unsigned transp, struct fb_info *info);

/* डिस्प्ले ब्लाँक करणे */

int (*fb_blank)(int blank, struct fb_info *info);

/* पुढील मेथड या ग्राफिक्स कार्ड चा वापर करतात. */

/* रेक्टअँगल चौकोनी एरिया हा पिक्सेलने भरून घेतो. */

void (*fb_fillrect)(struct fb_info *info,const struct fb_fillrect *rect);

/* चोकोनाचा काही भाग एका भागाकडून दुसरीकडे कॉपी करण्यासाठी */

void (*fb_copyarea)(struct fb_info *info,const struct fb_copyarea *region);

/* डिस्प्ले वर चित्र काढण्यासाठी */

void (*fb_imageblit)(struct fb_info *info,const struct fb_image *image);

/* डिस्प्ले रोटेट करण्यासाठी */

void (*fb_rotate)(struct fb_info *info, int angle);

/* डिव्हाईसशी संबंधित आय ओ सिलेक्ट इंटरफेस कमांड */

int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,

unsigned long arg);

/* … */

};

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

fb_ops याचे स्ट्रक्चर पुढीलप्रमाणे आहे. 

पँरामीटर चेक आणि सेट करणे:

fb_check_var() :हि मेथड डिव्हाईस वर बेसिक चेक ऑपरेशन करते ते रिझोल्यूशन बीट पर पिक्सेल ह्या व्हेल्यू चेक करते RGB फोर्मेट सेट करते.

fb_set_par():हि मेथड एल सी डी कंट्रोलरच्या  रेजिस्टरच्या सेटिंग सेट करते.यात मार्जिन सेटिंग येते.तसेच size_reg मध्ये रेझोल्यूशन सेटिंग,आणि DMA_REGमध्ये डी.एम.ए. सेट केला जातो, ज्याचा वापर डायरेक्ट मेमरी एक्सेस् साठी होतो.

कलर मोड:

सुडो [psudo] कलर आणि ट्रु [true]कलर हे दोन प्रकराचे कलर मोड आहेत.पिक्सेल व्हेल्यू पेक्षा कलर व्हेल्युला इंडेक्स केले असता आपण आपल्या फ्रेम बफर मेमरीची जागा वाचवू शकतो.

त्यासाठी आपणस आपले हार्डवेअर कलर सेट [palette]ला सपोर्ट देणारे हवे.

एल सी डी मध्ये १६ बीट /पिक्सेल आणि RGB565 फोर्मेट वापरतात याचा अर्थ fb_check_var() फंक्शन बीट ऑफसेट व्हेल्यू रेड, ग्रीन ,ब्ल्यू साठी अनुक्रमे ११,५,० असे घेतात .

[०-५ (५): ब्ल्यू,५-११(६): ग्रीन,११-१६[५]:रेड]

fb_set_par() फंक्शन्स अल्फा ब्लेंडिंग चा वापर करून पिक्सेल व्हेल्यू आणि बँकग्राउंड हे मिक्स करते.

RGB नी एनकोडिंगसाठी वापरलेली बीट लेन्थ [५+६+५=१६] यास कलर डेप्थ म्हणतात.याचा वापर करून फ्रेमबफर ड्रायव्हर आपल्या कॉम्प्युटर मधील बुट लोगो इमेज डिस्प्लेवर दाखवतात.

स्क्रीन ब्लेन्किंग:

fb_blank() हे फंक्शन डिस्प्ले ब्लेन्किंग आणि अन –ब्लेन्किंगला सपोर्ट करते.हि सुविधा पॉवर मेनेजमेंट साठी वापरली जाते.

आपला डिस्प्ले १० मिनिटासाठी ब्लेंक ठेवण्यासाठी setterm -blank 10 हि कमांड वापरावी.

हि कमांड CTRL_REG मध्ये ब्लेन्किंग साठीची व्हेल्यू सेट करून fb_blank() हे फंक्शन कॉल करते.आणि डिस्प्ले ब्लेंक करते.

एक्सेलीरेटेड मेथड:

एक्सेलीरेटेड मेथड या मेथड व्हिडीओ आणि ग्राफिक्स ची मोठी मोठी ऑपरेशन्स करण्यासाठी वापरतात.

सिस्टिम मध्ये डिस्प्ले वर ब्लेंडिंग ,स्ट्रेचिंग ,बीट मेप मुव्ह करणे या सारख्या गोष्टी करण्यासाठी ग्राफिक्स हार्डवेअर असणे गरजेचे आहे.

fb_ops या स्ट्रक्चर मध्ये आपण एक्सेलीरेटेड मेथड ची लिस्ट पहिली आहेच.

यामध्ये ग्राफिक्स कार्ड चे स्पेशल सुविधा आणि सुधारणांचा वापर करून अधिक चांगले चित्र स्क्रीनवर पाहता येते.

fb_imageblit() मेथड डिस्प्लेवर इमेज तयार करते जर आपल्या सिस्टीम मध्ये ग्राफिक्स कार्ड नसेल तर फेम बफर ड्रायव्हर cfb_imageblit() हे त्याच मेथड साधे फंक्शन रन करतो.

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

fb_copyarea() हे फंक्शन स्क्रीनचा काही भाग एका भागाकडून दुसरीकडे कॉपी करण्यास वापरले जाते. fb_fillrect()हे फंक्शन स्कीनचा काही भाग पिक्सेल रेषांनी भारावला जातो.

फ्रेमबफर कडून डायरेक्ट मेमरी एक्सेस :

DMA इंजिन सिस्टीम मेमरीवरून फ्रेमचा डाटा घेवून प्रोसेसर मार्फत प्रोसेस करून तो ग्राफिक्स डाटा स्क्रीनवर दाखवला जातो.

डिस्प्ले च्या रिफ्रेश रेट वर DMA चा रेट अवलंबून असतो.

फ्रेमबफर कोहरंट DMA अक्सेस राखून ठेवल्यासाठी myfb_probe()फंक्शन मध्ये dma_alloc_coherent()मेथड वापरली जाते.

myfb_set_par() मेथडने DMA चा अड्रेस कंट्रोलरच्या DMA_REG या रेजिस्टंर मध्ये लिहिला जातो .

जेंव्हा ड्रायव्हर myfb_enable_controller() फंक्शन वापरून DMA चालू करतो तेंव्हा कंट्रोलर डायरेक्ट मेमरी अक्सेस चा वापर करून पिक्सेल डाटा फ्रेमबफर कडून घेऊन डिस्प्लेवर दाखवतो.

कॉन्ट्रास्ट आणि ब्राईटनेस :

एल सी डी कंट्रोलर CONTRAST_REG रेजिस्टर चा वापर करून  कॉन्ट्रास्ट कंट्रोल करतो.

प्रोसेसर जनरल पर्पज इन्पुट आउटपुट लाईन चा वापर करून ब्राईटनेस कंट्रोल करतो.

backlight_device_register() या रेजिस्टर चा वापर करून बेक लाईट कंट्रोल करता येते.

डिस्प्ले ड्रायव्हरवर पुढे अभ्यास करण्यासाठी पुढील लिंकला भेट द्या.:

  • लिनक्स फ्रेमबफर प्रोजेक्ट ची लिंक:
    •  www.linux-fbdev.org
    • आपल्या लिनक्स सिस्टिम मधील फ्रेमबफर ड्रायव्हर चे लोकेशन:
      •  drivers/video/*fb.c
      • फ्रेमबफर स्केलेटन ड्रायव्हर:
      • linux/drivers/video/skeletonfb.c

डिस्प्ले ड्रायव्हर सारांश:

कर्नेल इंटरफेस साठी लागणारी डिस्प्ले डिव्हाईस ड्रायव्हर ची फंक्शन्स पुढीलप्रमाणे:

register_framebuffer() फ्रेमबफर डिव्हाईस रजिस्टर करणे.
unregister_framebuffer() फ्रेमबफर डिव्हाईस मोकळे करणे.
framebuffer_alloc() fb_info स्ट्रक्चर साठी मेमरी अलोकेट करणे.
framebuffer_release() अलोकेट केलेली मेमरी मोकळी करणे.
fb_alloc_cmap() कलर मँप अलोकेट करणे.
fb_dealloc_cmap() कलर मँप मोकळा करणे
dma_alloc_coherent() DMA चे मँपिंग करून मेमरी अलोकेट करणे.
dma_free_coherent() DMA बफर ची मेमरी मोकळी करणे.

 

अशा तऱ्हेने आपण डिस्प्ले डिव्हाईस ड्रायव्हर बेसिक कन्सेप्ट शिकला आहात आता आपण सर्व बेसिक डिव्हाईस ड्रायव्हर शिकला आहत आता आपणस प्रोग्रमिंग चा उत्साह नक्कीच आला असेल…

अशा तऱ्हेने आपण लिनक्स डिव्हाईस ड्रायव्हर चे १० भाग पूर्ण केले आहेत आता तुम्हाला सर्व डिव्हाईस ड्रायव्हर नक्कीच समजले असतील यात शंका नाही.

या भागाने मी बेसिक लिनक्स डिव्हाईस ड्रायव्हर मराठीतून या प्रकल्पाची सांगता करत आहे.यापुढे सखोल लिनक्स बद्दल लिहणार आहे. आपला असाच उत्स्फूर्त प्रतिसाद राहो ही इच्छा.

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

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

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

भाग २]लिनक्सची जान आणि शान टर्मिनलची ओळख आणि 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