久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

以文本方式查看主題

-  曙海教育集團(tuán)論壇  (http://www.rfoamep.cn/bbs/index.asp)
--  Linux驅(qū)動(dòng)開(kāi)發(fā)  (http://www.rfoamep.cn/bbs/list.asp?boardid=33)
----  Linux液晶屏驅(qū)動(dòng)開(kāi)發(fā)  (http://www.rfoamep.cn/bbs/dispbbs.asp?boardid=33&id=1729)

--  作者:wangxinxin
--  發(fā)布時(shí)間:2010-11-24 11:24:26
--  Linux液晶屏驅(qū)動(dòng)開(kāi)發(fā)

隨著高性能嵌入式處理器的普及和硬件成本的不斷降低,尤其是arm 系列處理器的推出,嵌入式系統(tǒng)的功能越來(lái)越強(qiáng)。單色LCD也因?yàn)樯蕟握{(diào),存儲(chǔ)信息小,處理速度慢而不能符合人們的需求。

  在多媒體應(yīng)用的推動(dòng)下,彩色LCD越來(lái)越多地應(yīng)用到了嵌入式系統(tǒng)中 如新一代手機(jī)和掌上電腦多采用TFT顯示器件,該顯示器件支持彩色圖形界面和視頻媒體播放。Linux作為開(kāi)放源代碼的操作系統(tǒng)也在市場(chǎng)中占據(jù)了一席之地。由于Linux成本低廉,源代碼開(kāi)放,因此成為國(guó)內(nèi)外廠商極力發(fā)展的操作系統(tǒng)。在應(yīng)用需求的推動(dòng)下,Linux下也出現(xiàn)了許多圖形界面軟件包,如MiniGUI、Trolletech公司的Embedded QT等,其圖形界面及開(kāi)發(fā)工具與Windows CE不相上下。在圖形軟件包的開(kāi)發(fā)和移植工作中都牽涉到底層LCD的驅(qū)動(dòng)問(wèn)題。筆者有幸參與了Linux操作系統(tǒng)下LCD部分的開(kāi)發(fā),其主要功能是點(diǎn)亮液晶屏,將在攝像頭上采集的BMP圖片在液晶屏上顯示并將BMP 格式壓縮成JPEG格式,使得存儲(chǔ)量減少。因此筆者就在開(kāi)發(fā)過(guò)程中遇到的問(wèn)題一一闡述。


   背景知識(shí)


   在切入正題之前,先來(lái)了解在做驅(qū)動(dòng)過(guò)程中需要預(yù)先知道的知識(shí)。


   1 硬件平臺(tái)


   MC9328MX1(以下簡(jiǎn)稱MX1)是Motorola 公司基于ARM核心的第一款MCU,主要面向高端嵌入式應(yīng)用。內(nèi)部采用arm920T內(nèi)核,并集成了SDRAM/Flash、LCD,USB、藍(lán)牙.多媒體閃存卡(MMC/SD、Memory Stick)和CMOS攝像頭等控制器。


   LCD控制器的功能是產(chǎn)生顯示驅(qū)動(dòng)信號(hào),驅(qū)動(dòng)LCD顯示器。用戶只需要通過(guò)讀寫(xiě)一系列的寄存器,完成配制和顯示控制。MX1中的LCD控制器可支持單色/彩色LCD 顯示器。支持彩色TFT時(shí),可提供4/8/12/16位顏色模式,其中16位顏色模式下可以顯示64k種顏色。配置LCD控制器重要的一步是指定顯示緩沖區(qū),顯示的內(nèi)容就是從緩沖區(qū)中讀出的,其大小由屏幕分辨率和顯示顏色數(shù)決定。在本例中,采用KYocera 公司的KCS057QV1AJ液晶屏,在240×320分辨率下可提供8位彩色顯示,即最大256色位圖。


   2.Linux下的設(shè)備驅(qū)動(dòng)


   在Linux操作系統(tǒng)下有兩類主要的設(shè)備文件類型,一種是字符設(shè)備,另一種是塊設(shè)備。字符設(shè)備和塊設(shè)備的主要區(qū)別是在對(duì)字符設(shè)備發(fā)出讀/寫(xiě)請(qǐng)求時(shí),實(shí)際的硬件I/O一般就緊接著發(fā)生了,塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作緩沖區(qū),當(dāng)用戶進(jìn)程對(duì)設(shè)備請(qǐng)求讀/寫(xiě)時(shí),它首先察看緩沖區(qū)的內(nèi)容,如果緩沖區(qū)的數(shù)據(jù)能滿足用戶的要求,就返回請(qǐng)求的數(shù)據(jù),如果不能,就調(diào)用請(qǐng)求函數(shù)來(lái)進(jìn)行實(shí)際的I/O操作。


   Linux的設(shè)備管理是和文件系統(tǒng)解密結(jié)合的,各種設(shè)備都以文件的形式存放在/dev目錄下,稱為設(shè)備文件。應(yīng)用程序可以打開(kāi)、關(guān)閉和讀寫(xiě)這些設(shè)備文件,完成對(duì)設(shè)備的操作,就像操作普通的數(shù)據(jù)文件一樣。為了管理這些設(shè)備,系統(tǒng)為設(shè)備編了號(hào),每個(gè)設(shè)備號(hào)又分為主設(shè)備號(hào)和次設(shè)備號(hào)。主設(shè)備號(hào)用來(lái)區(qū)分不同種類的設(shè)備,而次設(shè)備號(hào)標(biāo)識(shí)使用同一個(gè)設(shè)備驅(qū)動(dòng)程序的不同的硬件設(shè)備,比如有兩個(gè)軟盤(pán),就可以用從設(shè)備號(hào)來(lái)區(qū)分它們。設(shè)備文件的主設(shè)備號(hào)必須與設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請(qǐng)的主設(shè)備號(hào)一致,否則用戶進(jìn)程將無(wú)法訪問(wèn)到驅(qū)動(dòng)程序。幀緩沖設(shè)備為標(biāo)準(zhǔn)字符設(shè)備,主設(shè)備號(hào)為29,次設(shè)備號(hào)則從0到31。


   3.Linux的幀緩沖設(shè)備


   幀緩沖區(qū)是出現(xiàn)在Linux 2.2.xx及以后版本內(nèi)核當(dāng)中的一種驅(qū)動(dòng)程序接口,這種接口將顯示設(shè)備抽象為幀緩沖區(qū)設(shè)備區(qū)。它允許上層應(yīng)用程序在圖形模式下直接對(duì)顯示緩沖區(qū)進(jìn)行讀寫(xiě)操作。這種操作是抽象的、統(tǒng)一的,用戶不必關(guān)心物理顯存的位置、換頁(yè)機(jī)制等具體細(xì)節(jié)。這些都由Framebufer設(shè)備驅(qū)動(dòng)來(lái)完成。幀緩沖設(shè)備對(duì)應(yīng)的設(shè)備文件為/dev/fb*,如果系統(tǒng)有多個(gè)顯示卡,Linux下還可支持多個(gè)幀緩沖設(shè)備,最多可達(dá)32個(gè),分別為/dev/fb0到/dev/fb31,而/dev/fb則為當(dāng)前缺省的幀緩沖設(shè)備,通常指向/dev/fb0。當(dāng)然在嵌入式系統(tǒng)中支持一個(gè)顯示設(shè)備就夠了。在使用Framebufer時(shí),Linux是將顯卡置于圖形模式下的.在應(yīng)用程序中,一般通過(guò)將Frame-Buffer設(shè)備映射到進(jìn)程地址空間的方式使用,對(duì)于幀緩沖來(lái)說(shuō),可以把它看成是一段內(nèi)存,用于讀寫(xiě)內(nèi)存的函數(shù)均可對(duì)這段地址進(jìn)行讀寫(xiě),只不過(guò)這段內(nèi)存被專門用于放置要在LCD上顯示的內(nèi)容,其目的就是通過(guò)配置LCDC寄存器在一段指定內(nèi)存與LCD 之間建立一個(gè)自動(dòng)傳輸?shù)耐ǖ馈_@樣,任何程序只要修改這段內(nèi)存中的數(shù)據(jù),就可以改變LCD 上的顯示內(nèi)容。


   FrameBuffer設(shè)備驅(qū)動(dòng)基于linux/include/linux/fb.h和linux/drivers/video/fbmem.c這兩個(gè)文件,下面就詳細(xì)分析這兩個(gè)文件。


   首先分析linux/include/linux/fb.h文件,幾乎主要的結(jié)構(gòu)都是在這個(gè)文件中定義的。這些結(jié)構(gòu)包括:


   fb_var_screeninfo 這個(gè)結(jié)構(gòu)描述了顯示卡的特性,記錄了幀緩沖設(shè)備和指定顯示模式的可修改信息。其中變量xres定義了屏幕一行所占的像素?cái)?shù),yres定義了屏幕一列所占的像素?cái)?shù),bits_per_pixel定義了每個(gè)像素用多少個(gè)位來(lái)表示。
   fb_fix_screeninfon 這個(gè)結(jié)構(gòu)在顯卡被設(shè)定模式后創(chuàng)建,它描述顯示卡的屬性,并且系統(tǒng)運(yùn)行時(shí)不能被修改;比如FrameBuffer內(nèi)存的起始地址。
   struct fb_info Linux為幀緩沖設(shè)備定義的驅(qū)動(dòng)層接口。它不僅包含了底層函數(shù),而且還有記錄設(shè)備狀態(tài)的數(shù)據(jù)。每個(gè)幀緩沖設(shè)備都與一個(gè)fb_info結(jié)構(gòu)相對(duì)應(yīng)。其中成員變量modename為設(shè)備名稱,fontname為顯示字體,fbops為指向底層操作的函數(shù)的指針。
   fb_cmap描述設(shè)備無(wú)關(guān)的顏色映射信息。可以通過(guò)FBIOGETCMAP 和FBIOPUTCMAP 對(duì)應(yīng)的ioctl操作設(shè)定或獲取顏色映射信息。然后分析fbmem.h文件。

    幀緩沖設(shè)備屬于字符設(shè)備,采用“文件層-驅(qū)動(dòng)層”的接口方式。在文件層為之定義了以下數(shù)據(jù)結(jié)構(gòu):

 


    
    其成員函數(shù)都在Linux/driver/video/fbmem.c中定義,其中的函數(shù)對(duì)具體的硬件進(jìn)行操作,對(duì)寄存器進(jìn)行設(shè)置,對(duì)顯示緩沖進(jìn)行映射。


   對(duì)于/dev/fb,對(duì)顯示設(shè)備的操作主要有以下幾種:


   讀/寫(xiě)(read/write)/dev/fb 相當(dāng)于讀/寫(xiě)屏幕緩沖區(qū)。
   映射(map)操作 由于Linux工作在保護(hù)模式和每個(gè)應(yīng)用程序里都有自己的虛擬地址空間,在應(yīng)用程序中是不能直接訪問(wèn)物理緩沖區(qū)地址的。因此,Linux在文件操作file_operations結(jié)構(gòu)中提供了mmap函數(shù),可將文件的內(nèi)容映射到用戶空間。對(duì)于幀緩沖設(shè)備,則可通過(guò)映射操作,可將屏幕緩沖區(qū)的物理地址映射到用戶空間的一段虛擬地址中,之后用戶就可以通過(guò)讀寫(xiě)這段虛擬地址訪問(wèn)屏幕緩沖區(qū),在屏幕上繪圖。
   I/O控制 對(duì)于幀緩沖設(shè)備,對(duì)設(shè)備文件的ioctl操作可讀取/設(shè)置顯示設(shè)備及屏幕的參數(shù),如分辨率、顯示顏色數(shù)和屏幕大小等。ioctl的操作是由底層的驅(qū)動(dòng)程序來(lái)完成的。
   在應(yīng)用程序中,操作/dev/fb的一般步驟為首先打開(kāi)/dev/fb設(shè)備文件,然后用ioctl操作取得當(dāng)前顯示屏幕的參數(shù),如屏幕分辨率,每個(gè)像素點(diǎn)的比特?cái)?shù),根據(jù)屏幕參數(shù)可計(jì)算屏幕緩沖區(qū)的大小。接下來(lái),將屏幕緩沖區(qū)映射到用戶空間。最后,映射后就可以直接讀寫(xiě)屏幕緩沖區(qū),進(jìn)行繪圖和圖片顯示了。典型程序段如下:

   

 


    
    由于準(zhǔn)備在LCD 上顯示一幅256色BMP圖片,關(guān)于BMP 圖片方面的知識(shí)請(qǐng)見(jiàn)相關(guān)鏈接。


   4.幀緩沖驅(qū)動(dòng)的縮寫(xiě)


   了解了上述知識(shí)后,在編寫(xiě)驅(qū)動(dòng)的時(shí)候就簡(jiǎn)單多了。源程序共將程序分為初始化幀緩沖模塊fb_init(),調(diào)色板獲取色彩模塊get_cmap(),圖片顯示模塊display_bmp(),main函數(shù)4個(gè)函數(shù)。其中調(diào)色板獲取色彩模塊的功能是從文件中獲得圖像顯示色彩,重置系統(tǒng)調(diào)色板,使圖像能正確的顯示色彩。


  

 


    
    圖片顯示函數(shù)部分重要代碼為:
    
   

 


    
    在主函數(shù)中,建立一個(gè)進(jìn)程調(diào)用圖片顯示函數(shù)
    
   

 


    
    至此LCD的驅(qū)動(dòng)程序就編寫(xiě)完成了,經(jīng)過(guò)調(diào)試,編譯鏈接,然后用串口下載到實(shí)驗(yàn)板上,一幅256色BMP圖片就可以出現(xiàn)在液晶屏幕上了。

 

  5.應(yīng)用價(jià)值


   液晶屏點(diǎn)亮了,這只是第一步,我們可以在此基礎(chǔ)上進(jìn)一步進(jìn)行應(yīng)用程序的開(kāi)發(fā),比如筆者將此應(yīng)用在一個(gè)視頻監(jiān)控系統(tǒng)中。在這個(gè)視頻監(jiān)控系統(tǒng)中,圖像處理占很大的比重,基本的圖像處理構(gòu)成如下:


   圖像采集模塊圖像采集模塊需要兩種裝置,一種是將光信號(hào)轉(zhuǎn)換成電信號(hào)的物理器件,如攝像機(jī);另一種是能夠?qū)⒛M電信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)的器件,如圖像采集卡。
   圖像處理模塊對(duì)圖像的處理一般可用算法的形式描述,但是對(duì)于特殊的問(wèn)題需要特殊的解決方法,圖像處理模塊中不但包含了對(duì)圖像的一般處理方法,也包括一些特殊的算法處理。
   圖像顯示模塊對(duì)于采集得到的圖像,經(jīng)過(guò)處理以后,最終需要顯示給用戶看。在系統(tǒng)的實(shí)時(shí)采集部分中,需要對(duì)展開(kāi)的圖像進(jìn)行滾屏顯示:在圖像編輯部分中,需要瀏覽所要拼接的圖像。所以圖像顯示對(duì)于系統(tǒng)來(lái)說(shuō)非常重要。
   圖像儲(chǔ)存模塊由于圖像中包含有大量的信息,并且由于系統(tǒng)所采用8位真彩色格式,因此需要大量的空間。因此,在本系統(tǒng)中需要大容量和快速的圖像存儲(chǔ)器。
   圖像通信模塊隨著網(wǎng)絡(luò)的建設(shè)和發(fā)展,圖像通信傳輸也得到極大的重視。另外,圖像傳輸可以使不同的系統(tǒng)共享圖像數(shù)據(jù)資源,快速地將結(jié)果反映到遠(yuǎn)處系統(tǒng),所以極大推動(dòng)了圖像在各個(gè)方面的應(yīng)用。
   在這五步中,首先在點(diǎn)亮液晶屏之后,才能做下一步工作。比如說(shuō)筆者能夠在LCD顯示一幅圖畫(huà),但由于這幅圖是BMP格式的,它的存儲(chǔ)量非常驚人,一幅320×240的BMP格式就有320×240×8/8=76800,也就是77KB,這對(duì)于系統(tǒng)資源相對(duì)短缺的嵌入式設(shè)備來(lái)說(shuō)占用系統(tǒng)RAM 太大了,因此我們就要將BMP格式的圖片壓縮成占用系統(tǒng)資源少的圖片格式,比如JPEG 格式或PNG格式,可以有效地減少存儲(chǔ)量。


   由于篇幅所限,不可能把完整的源代碼均做一番解釋,但主要的過(guò)程就是這些,在此拋磚引玉。隨著液晶屏在嵌入式設(shè)備中的用途越來(lái)越廣,會(huì)有很大的空間值得我們?nèi)パ芯俊?/p>

 


久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
奇米777欧美一区二区| 丝袜美腿玉足3d专区一区| 亚洲精品一二三| 中文在线一区二区| 久久精品一区二区| 久久综合色综合88| 久久久综合视频| 国产精品久久三区| 亚洲婷婷综合色高清在线| 中文字幕在线不卡一区二区三区| 国产色一区二区| 亚洲丝袜精品丝袜在线| 成人欧美一区二区三区视频网页 | 日韩一二在线观看| 日韩限制级电影在线观看| 精品国产乱码久久久久久免费| 精品精品国产高清a毛片牛牛 | 神马影院一区二区| 一区二区视频在线免费| 欧洲一区二区三区在线| 欧美精品777| 久久久91精品国产一区二区精品 | 欧美年轻男男videosbes| 欧美一区二区三区播放老司机| 精品国产乱码久久久久久蜜臀| 国产精品久久久久永久免费观看| 中文字幕一区二区三区在线播放 | 久久久久一区二区| 亚洲欧洲精品一区二区| 欧美专区日韩专区| 精品国产免费一区二区三区香蕉| 国产精品入口麻豆九色| 亚洲一区二区av电影| 另类人妖一区二区av| 成人av在线看| 欧美成人dvd在线视频| 色婷婷av一区| 26uuu色噜噜精品一区| 国产精品污www在线观看| 亚洲午夜日本在线观看| 狠狠色2019综合网| 精品产品国产在线不卡| 91福利精品视频| 精品久久久久久综合日本欧美| 中文字幕佐山爱一区二区免费| 麻豆精品一区二区综合av| 不卡的av一区| 欧美三级视频在线播放| 国产精品网站在线观看| 久久精品国产99| 久久久久久高清| 欧美成人一区二区| 午夜激情综合网| 91丝袜脚交足在线播放| 91精品福利视频| 欧美极品aⅴ影院| 极品美女销魂一区二区三区免费 | www.成人av| 欧美日韩一级片网站| 亚洲视频狠狠干| 成人丝袜高跟foot| 欧洲一区二区av| 一区二区在线观看视频在线观看| 成人小视频在线| 中文字幕一区二区三区乱码| 国产日本欧洲亚洲| 国产成人av影院| 色婷婷久久久综合中文字幕| 17c精品麻豆一区二区免费| 国产一区二区三区av电影 | 欧美一区二区三区思思人| 一区二区三区四区av| 波多野结衣视频一区| 中文字幕免费在线不卡| 亚洲色图一区二区三区| 成av人片一区二区| 欧美手机在线视频| 亚洲一二三级电影| 国产伦精品一区二区三区照片| 欧美剧在线免费观看网站| 亚洲伊人伊色伊影伊综合网| 91观看网站| 日韩精品一区二区三区视频播放 | 亚洲欧洲美洲综合色网| 国产成人一级电影| 在线看国产日韩| 亚洲国产日韩在线一区模特 | 久久福利视频一区二区| 蜜桃传媒视频麻豆一区| 久久综合九色综合97婷婷女人| 久久国产日韩欧美精品| 天堂社区 天堂综合网 天堂资源最新版 | 一个色综合av| 国产欧美在线一区二区| 精品久久一区二区| 国产乱码一区二区三区| 欧美在线观看视频一区二区 | 中国色在线观看另类| 99精品在线免费| 欧美一区二区三区四区视频 | ts人妖另类在线| 欧美成人欧美edvon| 国产盗摄一区二区三区| 欧美顶级少妇做爰| 国内精品国产成人| 欧美日韩国产三级| 国产一区二区三区四区五区美女| 欧美亚洲愉拍一区二区| 日韩中文字幕区一区有砖一区| 欧美日韩另类丝袜其他| 亚洲欧美日韩国产综合| 精品日本一区二区| 亚洲人成影院在线观看| 国产视频精品网| 亚洲男人电影天堂| 秋霞久久久久久一区二区| 亚洲精品中文在线影院| 日本一区二区三区www| 一区二区不卡在线播放 | 欧美lavv| 亚洲一区二区三区四区在线 | 成a人片亚洲日本久久| 欧美精品一区二区在线播放| 成人性生交大片免费看中文| 26uuu另类欧美亚洲曰本| 99久久精品无码一区二区毛片| 国产精品亲子乱子伦xxxx裸| 国产一区喷水| 亚洲午夜电影在线观看| 色老汉av一区二区三区| 国产精品99久久久久久久女警| 欧美成va人片在线观看| y111111国产精品久久婷婷| 亚洲人成亚洲人成在线观看图片| 日韩av影视| 久色婷婷小香蕉久久| 欧美一级xxx| 国产欧美在线一区二区| 亚洲第一精品在线| 欧美日韩一区二区三区四区 | 亚洲国产日韩美| 麻豆成人91精品二区三区| 日韩视频一区二区在线观看| 97精品久久久午夜一区二区三区| 国产精品久久久久久久岛一牛影视 | 日日摸夜夜添夜夜添精品视频 | 日韩一区二区三区在线观看| 91老司机福利 在线| 一区二区三区视频在线看| 欧美视频精品在线观看| 99精品视频在线播放观看| 日韩伦理av电影| 欧美亚洲高清一区| 91丨九色丨国产丨porny| 亚洲精品乱码久久久久| 欧美日韩不卡一区| 99久久免费国| 免费成人av资源网| 精品国产123| 亚洲欧美国产一区二区| 国产成人在线免费观看| **网站欧美大片在线观看| 91精品福利视频| 波多野结衣久草一区| 免费一级片91| 欧美韩日一区二区三区四区| 一本久久综合亚洲鲁鲁五月天 | 欧美1o一11sex性hdhd| 国内国产精品久久| 亚洲视频1区2区| 欧美一级片免费看| 色综合电影网| 3d精品h动漫啪啪一区二区| 天天色天天操综合| 国产日韩欧美不卡| 欧美性色综合网| 蜜桃网站成人| 成人性生交大合| 奇米影视一区二区三区| 中文字幕中文在线不卡住| 欧美一区二区三区四区五区| 午夜欧美性电影| 国产高清在线精品一区二区三区| 激情图片小说一区| 亚洲成人你懂的| 中文一区在线播放| 日韩视频123| 欧洲av在线精品| 开心色怡人综合网站| 成人高清视频在线| 美国av一区二区| 亚洲大片一区二区三区| 国产精品免费免费| 26uuu精品一区二区在线观看| 在线观看日韩av先锋影音电影院| 欧美国产视频在线观看| 成人在线免费网站| 成人高清伦理免费影院在线观看| 麻豆国产欧美日韩综合精品二区| 中文字幕在线观看一区二区|