第七章LCD液晶顯示器_第1頁(yè)
第七章LCD液晶顯示器_第2頁(yè)
第七章LCD液晶顯示器_第3頁(yè)
第七章LCD液晶顯示器_第4頁(yè)
第七章LCD液晶顯示器_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第七章LCD液晶顯示器

7.1LCD顯示器概述LCD它是一種數(shù)字顯示技術(shù),可以通過(guò)液晶和彩色過(guò)濾器過(guò)濾光源,并在平面面板上產(chǎn)生圖像。與傳統(tǒng)的陰極射線管(CRT)相比,LCD占用空間小、低功耗、低輻射、無(wú)閃爍、降低視覺(jué)疲勞,具有很大的發(fā)展?jié)摿?。第一?yè),共五十五頁(yè)。1.LCD顯示器的分類扭曲向列型(TN-TwistedNematic);超扭曲向列型(STN-SuperTN);雙層超扭曲向列型(DSTN-Double-layerSuper-TwistedNematic);薄膜晶體管型(TFT-ThinFilmTransistor)。第二頁(yè),共五十五頁(yè)。2.LCD的常用指標(biāo)PPI與分辨率PPI是指每平方英寸所擁有的像素(Pixel)數(shù)目??梢?jiàn),PPI數(shù)值越高就意味著顯示屏能夠以更高的密度顯示圖像。顯示的密度越高,擬真度也就越高。目前通用的TFT液晶顯示屏大部分只有100PPI,如果擁有高一倍的顯示畫質(zhì)(200PPI),顯示效果會(huì)更好。第三頁(yè),共五十五頁(yè)。分辨率標(biāo)準(zhǔn)目前市面上的分辨率標(biāo)準(zhǔn)多種多樣,主要有VGA、SVGA、UXGA和SXGA+。其中SXGA+所代表的顯示分辨率為1400x1050。Quad-VGA是三菱公司的一種新分辨率標(biāo)準(zhǔn),它所代表的分辨率1280x960,與一般標(biāo)準(zhǔn)XGA的1280x1024顯示分辨率比較,Quad-VGA會(huì)較為扁平一點(diǎn)。第四頁(yè),共五十五頁(yè)。尺寸標(biāo)示LCD顯示器跟CRT顯示器除顯示方式不同以外,最大的區(qū)別就是尺寸的標(biāo)示方法不一樣。例如,CRT顯示器在規(guī)格中標(biāo)為17英寸,但實(shí)際可視尺寸達(dá)不到17英寸,只有15英寸多些;而對(duì)于LCD顯示器,如果標(biāo)示為15.1英寸,那么可視尺寸就是15.1英寸。第五頁(yè),共五十五頁(yè)。解析度LCD液晶顯示器不像CRT顯示器,它只支持“真實(shí)解析度”,通常等價(jià)于一般CRT顯示器的最高解析度。其主要差別在于,LCD液晶顯示器只有在“真實(shí)解析度”下才能表現(xiàn)最佳影像效果。解析度低于真實(shí)解析度時(shí),影像可以被呈現(xiàn),但影像無(wú)法如真實(shí)解析度般得到優(yōu)化。第六頁(yè),共五十五頁(yè)。7.2嵌入式處理器的LCD控制器7.2.1 LCD控制器的接口因?yàn)楣ぷ髟聿煌?,液晶的顯示接口時(shí)序可以分為STN和TFT兩種。目前,一些嵌入式處理器可以同時(shí)支持STN和TFT的LCD顯示器。以STN顯示為例,從圖7.1可以看出片內(nèi)集成的LCD控制器可以產(chǎn)生必要的控制信號(hào),如VFRAME、VLINE、VCLK和VM等。傳輸顯示數(shù)據(jù)。LCD控制器的接口定義如表7-1示。第七頁(yè),共五十五頁(yè)。圖7.1 LCD控制器的結(jié)構(gòu)圖第八頁(yè),共五十五頁(yè)。信號(hào)描述功能VFRAMELCD控制器和LCD驅(qū)動(dòng)器的幀同步信號(hào)控制LCD的幀顯示,LCD控制器在一個(gè)完整的幀被顯示后發(fā)送此信號(hào)VLINELCD控制器和LCD驅(qū)動(dòng)器的行同步信號(hào)LCD控制器通過(guò)它將水平移位寄存器中的內(nèi)容顯示到LCD上,LCD控制器一整行數(shù)據(jù)被傳輸?shù)絃CD驅(qū)動(dòng)器后發(fā)送VLINEVCLK刷新時(shí)鐘它是LCD控制器與LCD驅(qū)動(dòng)器之間的像素時(shí)鐘信號(hào),LCD控制器在此信號(hào)上升沿發(fā)送數(shù)據(jù),LCD驅(qū)動(dòng)器則在下降沿采樣數(shù)據(jù)VMLCD驅(qū)動(dòng)器的交流信號(hào)LCD驅(qū)動(dòng)器用此信號(hào)來(lái)改變行和列的電壓極性以控制像素的顯示與否VD[7:0]數(shù)據(jù)線LCD像素輸出端口表7-1LCD控制器的接口第九頁(yè),共五十五頁(yè)。7.2.2 LCD控制器的設(shè)置

LCD驅(qū)動(dòng)編寫的主要工作就是正確設(shè)置對(duì)應(yīng)于所用LCD屏的CPU寄存器。表7-2所示為嵌入式處理器S3C2410中與LCD相對(duì)應(yīng)的寄存器,表中給出了各個(gè)寄存器的簡(jiǎn)單描述,如果想了解它們的詳細(xì)設(shè)置,請(qǐng)參考S3C2410的用戶手冊(cè)。第十頁(yè),共五十五頁(yè)。寄存器宏定義地址讀/寫描述復(fù)位LCD控制寄存器1LCDCON10x4d000000讀/寫工作信號(hào)控制寄存器0x0LCD控制寄存器2LCDCON20x4d000004讀/寫LCD水平/垂直尺寸定義0x0LCD控制寄存器3LCDCON30x4d000008讀/寫LCD控制寄存器30x0LCD控制寄存器4LCDCON40x4d00000c讀/寫LCD控制寄存器40x0LCD控制寄存器5LCDCON50x4d000010讀/寫LCD控制寄存器50x0幀緩沖地址寄存器1LCDSADDR10x4d000014讀/寫液晶類型和掃描模式定義0x0幀緩沖地址寄存器2LCDSADDR20x4d000018讀/寫設(shè)定顯示緩沖區(qū)信息0x0幀緩沖地址寄存器3LCDSADDR30x4d00001c讀/寫設(shè)定虛擬屏偏移和頁(yè)面寬度0x0紅色設(shè)置寄存器REDLUT0x4d000020讀/寫定義8組紅色數(shù)據(jù)查找表0x0綠色設(shè)置寄存器GREENLUT0x4d000024讀/寫定義8組綠色數(shù)據(jù)查找表0x0藍(lán)色設(shè)置寄存器BLUELUT0x4d000028讀/寫定義8組藍(lán)色數(shù)據(jù)查找表0x0抖動(dòng)模式寄存器DITHMODE0x4d00004c讀/寫STN抖動(dòng)模式寄存器0x0臨時(shí)調(diào)色板寄存器TPAL0x4d000050讀/寫TFT臨時(shí)調(diào)色寄存器,其值在下一幀時(shí)將變成視頻數(shù)據(jù)0x0LCD中斷掛起寄存器LCDINTPND0x4d000054讀/寫掛起LCD中斷0x0LCD中斷源掛起寄存器LCDSRCPND0x4d000058讀/寫掛起LCD中斷源0x0LCD中斷屏蔽寄存器LCDINTMSK0x4d00005c讀/寫屏蔽LCD中斷源0x3表7-2 LCD控制器相關(guān)的設(shè)置第十一頁(yè),共五十五頁(yè)。1.設(shè)置VM、VFRAME、VLINEVM信號(hào)通過(guò)改變液晶的行列電壓的極性來(lái)控制像素的顯示,VM速率可以配置LCDCON1寄存器的MMODE位及LCDCON2寄存器的MVAL[7:0]。VM速率=VLINE速率/(2×MVAL)第十二頁(yè),共五十五頁(yè)。VFRAME和VLINE信號(hào)可以根據(jù)液晶屏的尺寸及顯示模式,配置LCDCON2寄存器的HOZVAL和LINEVAL值,即:HOZVAL=(水平尺寸/VD數(shù)據(jù)位)-1彩色液晶屏?xí)r:水平尺寸=3×水平像素點(diǎn)數(shù)VD數(shù)據(jù)位:VD=4(4位單/雙掃描模式) VD=8(8位單掃描模式)LINEVAL=垂直尺寸一1(單掃描模式)LINEVAL=(垂直尺寸/2)-1(雙掃描模式)第十三頁(yè),共五十五頁(yè)。2.設(shè)定VCLKVCLK是LCD控制器的時(shí)鐘信號(hào),它的計(jì)算需要先計(jì)算數(shù)據(jù)傳送速率,由此設(shè)定的一個(gè)大于數(shù)據(jù)傳送速率的值為VCLKVAL(LCDCONl[21:12])。數(shù)據(jù)傳送速率=水平只寸×垂直尺寸×幀速率×模式值(MV)第十四頁(yè),共五十五頁(yè)。3.幀速率幀速率可由以下公式得到: VCLK(Hz)=MCLK/(CLKVAL×2),其中LKVAL大于數(shù)據(jù)傳送速率且不小于2幀速率(Hz)=((1/VCLK)*(HOZVAL+1)+(1/MCLK) *(WLH+WDLY+LINEBLANK))*(LINEVAL+1)]-1?LINEBANK:水平掃描信號(hào)LINE持續(xù)時(shí)間設(shè)置(MCLK個(gè)數(shù))。?LINEVAL:顯示屏的垂直尺寸。VCLK的計(jì)算還可以使用以下公式: VCLK(Hz)=(HOZVAL+1)/[(1/(幀速率×(LINEVAL+1))) -((WLH+WDLY+LINEBLANK)/MCLK)]第十五頁(yè),共五十五頁(yè)。4.設(shè)定數(shù)據(jù)幀顯示控制(LCDBASEU、LCDBASEL、PAGEWIDTH、OFFSIZE、LCDBANK)?LCDBASEU設(shè)置顯示掃描方式中的開始地址(單掃描方式)或高位緩存地址(雙掃描方式)。 ?LCDBASEL是設(shè)置雙掃描方式的低位緩存開始地址。可用以下計(jì)算公式:LCDBASEL=LCDBASEU+(PAGEWIDTH+OFFSIZE)*(LINEVAL+1)?PAGEWDTH是顯示存儲(chǔ)區(qū)的可見(jiàn)幀寬度(半字?jǐn)?shù))。 ?OFFSIZE是顯示存儲(chǔ)區(qū)的前行最后半字和后行第一個(gè)半字之間的半字?jǐn)?shù)。 ?LCDBANK是訪問(wèn)顯示存儲(chǔ)區(qū)的地址A[27:22]值,ENVID=1時(shí)該值不能改變。第十六頁(yè),共五十五頁(yè)。7.3 基于Framebuffer的LCD驅(qū)動(dòng)程序?qū)嶋H上,Linux為顯示設(shè)備專門提供了一類驅(qū)動(dòng)程序,叫做幀緩沖(Framebuffer)設(shè)備驅(qū)動(dòng)程序。第十七頁(yè),共五十五頁(yè)。7.3.1Framebuffer驅(qū)動(dòng)結(jié)構(gòu)FrameBuffer的核心是一塊供顯示使用的內(nèi)存。由系統(tǒng)中顯示機(jī)構(gòu)將顯示內(nèi)存中的內(nèi)容顯示到顯示設(shè)備上。幀緩沖驅(qū)動(dòng)本質(zhì)上是一個(gè)字符設(shè)備的驅(qū)動(dòng),但是具有自己的框架。Linux下FrameBuffer驅(qū)動(dòng)的結(jié)構(gòu)和邏輯都不復(fù)雜,主要需要構(gòu)建驅(qū)動(dòng)程序幀緩沖操作的數(shù)據(jù)結(jié)構(gòu)structfb_ops,在其中包含注冊(cè)顯示緩沖實(shí)現(xiàn)函數(shù)的指計(jì)。第十八頁(yè),共五十五頁(yè)。1.FrameBuffer驅(qū)動(dòng)的作用在程序設(shè)計(jì)中、對(duì)顯示的操作即是對(duì)顯示內(nèi)存的操作。在簡(jiǎn)單的操作系統(tǒng)中,可以直接利用寫顯示內(nèi)存的方法,獲得顯示的效果。在Linux操作系統(tǒng)中,提供了一種普遍的顯示接口:FraraeBuffer驅(qū)動(dòng)。使用FrameBuffer驅(qū)動(dòng)可以更方便地完成應(yīng)用程序的開發(fā)和系統(tǒng)的移植。第十九頁(yè),共五十五頁(yè)。如果僅僅是需要讓系統(tǒng)顯示出內(nèi)容.只需要向顯示內(nèi)存中寫入數(shù)據(jù),對(duì)于Linux,只需要切入到內(nèi)核態(tài),對(duì)顯示內(nèi)存進(jìn)行操作即可。從這個(gè)角度來(lái)講,用戶不需要FrameBuffer時(shí)驅(qū)動(dòng)也可以操作顯示。FrameBuffer驅(qū)動(dòng)的優(yōu)點(diǎn)在于,它為顯示程序的開發(fā)提供了一個(gè)框架。一方面,它封裝了一部分對(duì)顯示內(nèi)存的操作,另一方面,它又對(duì)上層提供了統(tǒng)一的接口。開發(fā)者只需要實(shí)觀FrameBuffer驅(qū)動(dòng)對(duì)硬件的移植,就可以在上層使用FrameBuffer驅(qū)動(dòng)方便的接口。Linux中幀緩沖驅(qū)動(dòng)主要涉及的文件是include/linux目錄中的fb.h。第二十頁(yè),共五十五頁(yè)。對(duì)于FrameBuffer驅(qū)動(dòng),不僅為用戶自己的程序調(diào)用,還可以被Linux內(nèi)核和各種GUI系統(tǒng)調(diào)用。由于Linux內(nèi)核集成了很多對(duì)FrameBuffer驅(qū)動(dòng)的操作,很多GUI系統(tǒng)的顯示部分也是基于FrameBuffer驅(qū)動(dòng)。Linux下的FrameBuffer驅(qū)動(dòng)結(jié)構(gòu)如圖7-2所示。第二十一頁(yè),共五十五頁(yè)。用戶程序GUI系統(tǒng)Linux內(nèi)核FrameBuffer驅(qū)動(dòng)硬件(LCD控制器)移植層統(tǒng)一調(diào)用接口圖7-2Linux下的FrameBuffer驅(qū)動(dòng)結(jié)構(gòu)第二十二頁(yè),共五十五頁(yè)。2.FrameBuffer驅(qū)動(dòng)結(jié)構(gòu)Linux的FrmneBuffer驅(qū)動(dòng)從本質(zhì)上,還是一種字符設(shè)備驅(qū)動(dòng)程序,但是它不直接使用字符設(shè)備驅(qū)動(dòng)程序的框架(),而是有自己的另外一套框架。fb_info是一個(gè)描述FrameBuffer屬性的數(shù)據(jù)結(jié)構(gòu),以linux2.6內(nèi)核為例,其定義如下:第二十三頁(yè),共五十五頁(yè)。structfb_info{intnode;intflags;structfb_var_screeninfovar;/*顯示屏變量*/structfb_fix_screeninfofix:/*顯示屏固定量*/structfb_monspecsmonspecs;/*當(dāng)前監(jiān)視器規(guī)格*/structwork_structqueue;/*幀緩沖事件隊(duì)列*/structfb_pixmappixmap;/*圖像硬件映射*/structfb_pixmapsprite;/*硬件光標(biāo)映射*/structfb_cmapcmap;/*當(dāng)前cmap*/structlist_headmodelist;/*模式列表*/structfb_ops*flops;structdevice*device;第二十四頁(yè),共五十五頁(yè)。#ifdefCONFIG_FB_TILEBLITTINGstruetfb_tile_ops*tileops;/*幀緩沖tile操作*/#endifchar__iomem*screen_base;/*虛擬地址*/unsignedlongscreen_size;/*IO重映射VRAM或者0*/void*pseudo_palene;/*為16位顏色的調(diào)色板*/#defineFBINFO_STATE_RUNNING0#defineFBINFO_STATE_SUSPENDED1u32state;/*硬件狀態(tài),例如:掛起*/void*fbcon_par:/*fbcon使用的私有區(qū)域*//*以下為硬件相關(guān)的*/void*par;};第二十五頁(yè),共五十五頁(yè)。在這個(gè)數(shù)據(jù)結(jié)構(gòu)中.最主要的成員為數(shù)據(jù)結(jié)構(gòu)structfb_var_screeninfo,它描述了屏幕的狀態(tài),例如可見(jiàn)顯示分辨率(visibleresolution)、虛擬顯示分辨率(virtualfesolution),虛擬顯示偏移、像索深度等參數(shù)。其定義如下所示:第二十六頁(yè),共五十五頁(yè)。structfb_vat_screeninfo{__u32xres;/*可見(jiàn)分辨率*/__u32yres;__u32xres_virtual;/*虛擬分辨率*/__u32yres_virtual;__u32xoffset;/*虛擬到可見(jiàn)的偏移量*/__u32yoffset;__u32bits_per_pixel;__u32grayscale;/*如果不為0灰度級(jí)代替彩色*/structfb_bitfiedred;/*如果為真色彩代表幀緩沖的位域*/第二十七頁(yè),共五十五頁(yè)。__u32grayscale;/*如果不為0灰度級(jí)代替彩色*/structfb_bitfiedred;/*如果為真色彩代表幀緩沖的位域*/structfb_bitfiedgreen;/*否則只有長(zhǎng)度有意義*/structfb_bitfiedblue;structfb_bitfiedtransp;/*透明度*/__u32nonstd;/*!=0非標(biāo)準(zhǔn)像素格式*/__u32activate;__u32height;/*畫面內(nèi)存映射的高*/__u32width;/*畫面內(nèi)存映射的寬*/__u32accel_flags;/*(廢棄)*/__u32pixclock;/*每秒的像素時(shí)鐘*/第二十八頁(yè),共五十五頁(yè)。__u32left_margin;/*畫面事件同步的值*/__u32right_margin;__u32upper_margin;一u32lower_margin;__u32hsync_len;/*水平同步的長(zhǎng)度*/__u32vsync_len;/*垂直同步的長(zhǎng)度*/__u32sync;__u32vmode;__u32rotate:/*順時(shí)針轉(zhuǎn)動(dòng)角度*/__u32reserved[5];/*為兼容保留*/};第二十九頁(yè),共五十五頁(yè)。在structfb_var_screeninfo中,支持虛擬顯示屏,其概念為,顯示內(nèi)存比實(shí)際可見(jiàn)區(qū)域要大。可見(jiàn)區(qū)域?qū)嶋H上是顯示內(nèi)存中的一個(gè)部分,它是實(shí)際在LCD上顯示的區(qū)域。在顯示內(nèi)存中,涉及的顯示屬性包括虛擬顯存寬度、虛擬顯存高度、定義偏移量x,偏移量y,可見(jiàn)區(qū)域?qū)挾?、可?jiàn)區(qū)域高度。虛擬顯示屏的概念如圖11-6所示。第三十頁(yè),共五十五頁(yè)。虛擬顯存X虛擬顯存Y可見(jiàn)區(qū)域X可見(jiàn)區(qū)域Y偏移量X偏移量Y圖11-6虛擬顯示屏的概念第三十一頁(yè),共五十五頁(yè)。注意:structfb_var_screeninfo定義了一個(gè)功能較為全面的顯示信息,在一般的LCD控制器中,不是每種功能都具有,或者即使LCD控制器有這種功能,但是不實(shí)現(xiàn)也可以完成基本的操作。fb_info的成員structfb_fix_screeninfo定義了顯示輸出設(shè)備的各種屬性,包括顯示緩沖的起始地址、顯示緩沖長(zhǎng)度、顯示緩沖類型等。這參數(shù)在設(shè)置完成后,一般都是只讀的。第三十二頁(yè),共五十五頁(yè)。structfb_fix_screeninfo{charid[16];/*辨識(shí)字符串,例如:“TTBuiltin”*/unsignedlongsmem_start;/*幀緩沖起始地址*//*物理地址*/__u32smem_len;/*幀緩沖內(nèi)存的長(zhǎng)度*/__u32type;__u32type_aux;/*隔行掃描位平面的插入值*/__u32visual;__u16xpanstep;__u16ypanstep;__u16ywrapstep;__u32line_length;/*每行字節(jié)數(shù)*/unsignedlongmmio_start;/*內(nèi)存映射I/0起始地址(物理地址)*/__u32mmio_len;/*內(nèi)存映射I/O的長(zhǎng)度*/__u32accel;/*表示驅(qū)動(dòng)的細(xì)節(jié)*/__u16reserved[3];/*為兼容保留*/};第三十三頁(yè),共五十五頁(yè)。structfb_ops是fb_info另外一個(gè)重要的成員.它定義了各種對(duì)顯示緩沖的操作,這個(gè)數(shù)據(jù)結(jié)構(gòu)由一系列的函數(shù)指針組成。struetfb_ops{/*open/releaseandusagemarking*/structmodule*owner;int(*fb_open)(structfb_info*info,intuser);int(*fb_release)(structfb_info*info,intuser);ssize_t(*fb_read)(structfile*file,char_use*bur,size_tcount,loff_t*ppos);第三十四頁(yè),共五十五頁(yè)。ssize_t(*fb_write)(structfile*charuser*bur,size_tcount,loff_t*ppos);int(*fb_check_var)(structfb_var_screeninfo*var.structfb_info*info);int(*fb_set_par)(structfb_info*info);int(*fb_setcolreg)(unsignedregno,unsignedred,unsignedgreen,unsignedblue.unsignedtransp,structfb_info*info):int(*fb_blank)(intblank,structfb_info*info);int(*fb_pan_display)(structfb_var_screeninfo*var,structfb_info*info);void(*fb_fillrect)(structfb_info*info,conststructfb_fillrect*rect);void(*fb_copyarea)(structfb_info*info,conststructfb_copyarea*region);第三十五頁(yè),共五十五頁(yè)。void(*fb_imageblit)(structfb_info*info,conststructfb_image*image);int(*fb_cursor)(structfb_info*info,structfb_cursor*cursor);void(*fb_rotate)(structfb_info*info,intangle);int(*fb_sync)(structfb_info*info);int(*fb_iocfl)(strectinode*inode.structfile*intcmd,unsignedlongarg,structfb_info*info);int(*fb_compatioctl)(structfile*f,unsignedcmd,unsignedlongarg,structfb_info*infoint(*fb_mmap)(structfb_info*info,structfile*vm_area_struct*vma);};第三十六頁(yè),共五十五頁(yè)。在struetfb_ops主要的成員包括.緩沖的打開fb_open、緩沖的關(guān)閉fb_release、讀fb_read、寫fb_write、控制fb_ioctl、內(nèi)存映射fb_mmap,這些和一般字符設(shè)備驅(qū)動(dòng)程序是對(duì)應(yīng)的。其他操作還包括調(diào)整顯示fb_pan_display、填允矩形fb_fillrect、區(qū)域復(fù)制fb_copyarea等。第三十七頁(yè),共五十五頁(yè)。在應(yīng)用程序中,一種常用的方式是使用mmap操作映射FrameBuffer到內(nèi)存。例如:#defineWidth640#defineHejgIlt480intfd;unsignedchar*FrameBuffer;fd=open(“/dev/fb0”,O_RDWR);FrameBuffer=mmap(NULL,Width*Height,-PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);/*顯示區(qū)域操作*//*……*/close(fd);第三十八頁(yè),共五十五頁(yè)。以上程序是在應(yīng)用程序中清空屏幕,首先將FrameBuffer作為文件打開,接下來(lái),使用庫(kù)函數(shù)mmap將FrameBuffer映射到內(nèi)存,mmap在內(nèi)部會(huì)調(diào)用驅(qū)動(dòng)程序fb_ops。數(shù)據(jù)結(jié)構(gòu)的成員fb_mmap完成內(nèi)存映射。內(nèi)存映射完成后,可以使用各種針對(duì)內(nèi)存的操作控制顯示緩沖區(qū)。顯然,對(duì)顯示區(qū)域的操作還需要知道顯示區(qū)域的像素格式(PixelFormat)。第三十九頁(yè),共五十五頁(yè)。知識(shí)小結(jié)1.FrameBuffer驅(qū)動(dòng)本質(zhì)上是一個(gè)字符驅(qū)動(dòng)程序。2.FrameBuffer驅(qū)動(dòng)的核心數(shù)據(jù)結(jié)構(gòu)是fb_info,它主要提供對(duì)顯示內(nèi)存映射的功能。第四十頁(yè),共五十五頁(yè)。7.3.2虛擬顯示緩沖驅(qū)動(dòng)分析在Linux內(nèi)核中.最為基本的FrameBuffer驅(qū)動(dòng)是虛擬顯示緩沖驅(qū)動(dòng)(vfb),它并不針對(duì)具體的現(xiàn)實(shí)硬件,而是利用內(nèi)存中開辟的虛擬顯示內(nèi)存.模擬對(duì)顯示的操作。因此,實(shí)際上它并不可能完成顯示的功能。vfb實(shí)際上可以作為一個(gè)顯示驅(qū)動(dòng)程序的模塊,利用對(duì)它的更改,可以完成對(duì)顯示硬件的移植。第四十一頁(yè),共五十五頁(yè)。1.虛擬幀緩沖的數(shù)據(jù)結(jié)構(gòu)及初始化在Linux中,“drivers/video目錄的vfb.c文件是vfb驅(qū)動(dòng)程序。其中定義vfb_driver為虛擬幀緩沖的驅(qū)動(dòng)程序結(jié)構(gòu)體,vfb_device是顯示設(shè)備結(jié)構(gòu)體。第四十二頁(yè),共五十五頁(yè)。staticstructdevice_drivervtb_driver={.name=“vfb”,.bus=&platform_bus_type,.probe=vfb_probe,.remove=vfb_remove,};slaticstructplatform_devicevfb_device={.name=“vfb”,.id=0,.dev={.release=vfb_platform_release,}};第四十三頁(yè),共五十五頁(yè)。int__initvfb_init(void){introt=0;#ifndefMODULEchar*option=NULL;if(fb_get_options(“vfb”,&option))return-ENODEV;vfb_setup(option);#endif

第四十四頁(yè),共五十五頁(yè)。if(!vfb_enable)return-ENXI0;ret=driver_register(&vfb_driver);if(!ret){ret=platform_device_register(&rfb_device);if(rot)driver_unregister(&vfb_driver);}returnret;}moduleinit(vib—init);第四十五頁(yè),共五十五頁(yè)。在虛擬顯示緩沖中,vfb_init被注冊(cè)為系統(tǒng)的初始化函數(shù),完成系統(tǒng)的初始化工作。其中,vfb_driver是顯示的驅(qū)動(dòng),vfb_device是顯示的設(shè)備,driver_register()是linux2.6內(nèi)核中對(duì)設(shè)備驅(qū)動(dòng)自動(dòng)注冊(cè)的函數(shù),它調(diào)用設(shè)備驅(qū)動(dòng)數(shù)據(jù)結(jié)構(gòu)(structdevice_driver)中的probe成員完成對(duì)設(shè)備的注冊(cè)。如果注冊(cè)成功,則調(diào)用platform_device_register把平臺(tái)設(shè)備注冊(cè)到平臺(tái)中。第四十六頁(yè),共五十五頁(yè)。!提示在linux2.6中,設(shè)備驅(qū)動(dòng)(對(duì)應(yīng)結(jié)構(gòu)structdevice_driver)的注冊(cè)調(diào)用函數(shù)driver_register(structdevice_driver*),從其參數(shù)中得到probe和remove兩個(gè)成員。這兩個(gè)成員是兩個(gè)函數(shù)指針,分別在設(shè)備驅(qū)動(dòng)的探測(cè)和移除的時(shí)候使用.然后調(diào)用platform_device_register(structplatform_device*)。第四十七頁(yè),共五十五頁(yè)。在VFB設(shè)備驅(qū)動(dòng)中,驅(qū)動(dòng)的檢測(cè)成員在vfb_driver被定義為vfb_probe,因此注冊(cè)驅(qū)動(dòng)的時(shí)候?qū)⒄{(diào)用該函數(shù)完成設(shè)備驅(qū)動(dòng)的注冊(cè)。在vfb_probe函數(shù)的操作中主要工作是完成了對(duì)該顯示緩沖數(shù)據(jù)結(jié)構(gòu)structfb_info*i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論