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


曙海教育集團論壇Linux專區Linux驅動開發 → Linux液晶屏驅動開發


  共有9486人關注過本帖樹形打印

主題:Linux液晶屏驅動開發

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
Linux液晶屏驅動開發  發帖心情 Post By:2010-11-24 11:24:26

隨著高性能嵌入式處理器的普及和硬件成本的不斷降低,尤其是arm 系列處理器的推出,嵌入式系統的功能越來越強。單色LCD也因為色彩單調,存儲信息小,處理速度慢而不能符合人們的需求。

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


   背景知識


   在切入正題之前,先來了解在做驅動過程中需要預先知道的知識。


   1 硬件平臺


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


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


   2.Linux下的設備驅動


   在Linux操作系統下有兩類主要的設備文件類型,一種是字符設備,另一種是塊設備。字符設備和塊設備的主要區別是在對字符設備發出讀/寫請求時,實際的硬件I/O一般就緊接著發生了,塊設備則不然,它利用一塊系統內存作緩沖區,當用戶進程對設備請求讀/寫時,它首先察看緩沖區的內容,如果緩沖區的數據能滿足用戶的要求,就返回請求的數據,如果不能,就調用請求函數來進行實際的I/O操作。


   Linux的設備管理是和文件系統解密結合的,各種設備都以文件的形式存放在/dev目錄下,稱為設備文件。應用程序可以打開、關閉和讀寫這些設備文件,完成對設備的操作,就像操作普通的數據文件一樣。為了管理這些設備,系統為設備編了號,每個設備號又分為主設備號和次設備號。主設備號用來區分不同種類的設備,而次設備號標識使用同一個設備驅動程序的不同的硬件設備,比如有兩個軟盤,就可以用從設備號來區分它們。設備文件的主設備號必須與設備驅動程序在登記時申請的主設備號一致,否則用戶進程將無法訪問到驅動程序。幀緩沖設備為標準字符設備,主設備號為29,次設備號則從0到31。


   3.Linux的幀緩沖設備


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


   FrameBuffer設備驅動基于linux/include/linux/fb.h和linux/drivers/video/fbmem.c這兩個文件,下面就詳細分析這兩個文件。


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


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

    幀緩沖設備屬于字符設備,采用“文件層-驅動層”的接口方式。在文件層為之定義了以下數據結構:

 


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


   對于/dev/fb,對顯示設備的操作主要有以下幾種:


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

   

 


    
    由于準備在LCD 上顯示一幅256色BMP圖片,關于BMP 圖片方面的知識請見相關鏈接。


   4.幀緩沖驅動的縮寫


   了解了上述知識后,在編寫驅動的時候就簡單多了。源程序共將程序分為初始化幀緩沖模塊fb_init(),調色板獲取色彩模塊get_cmap(),圖片顯示模塊display_bmp(),main函數4個函數。其中調色板獲取色彩模塊的功能是從文件中獲得圖像顯示色彩,重置系統調色板,使圖像能正確的顯示色彩。


  

 


    
    圖片顯示函數部分重要代碼為:
    
   

 


    
    在主函數中,建立一個進程調用圖片顯示函數
    
   

 


    
    至此LCD的驅動程序就編寫完成了,經過調試,編譯鏈接,然后用串口下載到實驗板上,一幅256色BMP圖片就可以出現在液晶屏幕上了。

 

  5.應用價值


   液晶屏點亮了,這只是第一步,我們可以在此基礎上進一步進行應用程序的開發,比如筆者將此應用在一個視頻監控系統中。在這個視頻監控系統中,圖像處理占很大的比重,基本的圖像處理構成如下:


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


   由于篇幅所限,不可能把完整的源代碼均做一番解釋,但主要的過程就是這些,在此拋磚引玉。隨著液晶屏在嵌入式設備中的用途越來越廣,會有很大的空間值得我們去研究。

 


支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

Linux液晶屏驅動開發








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
成人国产精品免费观看| 一区二区三区资源| 欧美日韩国产精选| 亚欧精品在线| 一区二区高清视频| 日本道免费精品一区二区三区| 视频一区亚洲| 亚洲亚洲精品三区日韩精品在线视频| 日韩欧美在线一区二区| 一本在线高清不卡dvd| 欧美午夜一区二区| 日韩一级高清毛片| 欧美经典一区二区| 亚洲精品写真福利| 秋霞成人午夜伦在线观看| 国精产品一区一区三区mba桃花| 国产很黄免费观看久久| av在线不卡一区| 日韩一区二区三区高清| 精品婷婷伊人一区三区三| 日韩你懂的电影在线观看| 国产欧美综合色| 亚洲电影在线播放| 国产激情一区二区三区四区| 成人欧美一区二区三区视频xxx| 日本一区二区在线视频| 欧美三级中文字幕在线观看| www亚洲一区| 亚洲精品乱码久久久久久日本蜜臀| 日韩av一二三| 99精品久久只有精品| 日本午夜精品电影| 青草国产精品久久久久久| 国产精品一区不卡| 精选一区二区三区四区五区| 亚洲一区二区三区午夜| 日韩欧美一区二区免费| 1区2区3区国产精品| 老司机精品视频在线| 91色.com| 在线观看成人一级片| 日韩精品在线网站| 亚洲尤物视频在线| 成人av电影免费在线播放| 91福利在线导航| 欧美日韩国产片| 日本成人在线一区| 国产成人av电影免费在线观看| 成人一区二区三区视频在线观看| 精品九九九九| 在线日韩一区二区| 国产精品色在线| 久久99精品久久久久婷婷| 99在线免费观看视频| 色综合网色综合| 日本一区二区三区免费乱视频 | 国产91精品久久久久久久网曝门| 国产综合18久久久久久| 欧美日韩不卡一区| 亚洲综合视频在线| www.日韩在线| 欧美日韩一级大片网址| 亚洲视频小说图片| 99免费精品视频| 欧美色图第一页| 亚洲国产精品久久久久婷婷884| 97久久精品人人做人人爽50路| 伊人久久大香线蕉av一区| **网站欧美大片在线观看| 成人h版在线观看| 欧美日韩视频在线一区二区| 亚洲国产va精品久久久不卡综合| 91免费精品国自产拍在线不卡| 欧美偷拍一区二区| 日韩中文字幕91| 欧美日本亚洲| 国内精品视频免费| 一本高清dvd不卡在线观看| 国产精品毛片久久久久久| 国产高清精品在线| 欧美午夜不卡在线观看免费| 亚洲与欧洲av电影| 精品视频一区二区三区四区| 国产日产欧美一区二区三区| 成人免费视频app| 69堂国产成人免费视频| 美女性感视频久久| 中文字幕一区二区三区精彩视频| 亚洲日本成人在线观看| 国产亚洲一区在线播放| 国产日韩欧美a| av不卡免费在线观看| 91.xcao| 麻豆精品在线看| 在线观看一区二区精品视频| 日韩制服丝袜av| 亚洲人成网站在线播放2019| 亚洲男人的天堂一区二区| 国产精品对白刺激久久久| 久久久久久**毛片大全| 91在线看国产| 国产午夜精品理论片a级大结局| 成人av片在线观看| wwww国产精品欧美| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美成人一区二区三区在线观看| 久久se这里有精品| 欧美性大战久久久久久久| 日韩在线播放一区二区| 欧洲精品在线观看| 国模娜娜一区二区三区| 6080日韩午夜伦伦午夜伦| 国产精品主播直播| 精品国产乱码久久久久久老虎| a在线欧美一区| 精品国产91久久久久久久妲己| 国产成人福利片| 亚洲精品在线一区二区| 91gao视频| 亚洲免费在线视频| 亚洲草草视频| 九九精品视频在线看| 欧美一区二区三区四区五区| 波多野结衣中文字幕一区| 久久亚洲综合色| 操人视频欧美| 亚洲与欧洲av电影| 欧美精品国产精品| 99热国产免费| 亚洲综合精品久久| 欧美性色aⅴ视频一区日韩精品| 国产真实精品久久二三区| 精品美女在线播放| 日韩av一区二区三区在线观看| 午夜精品福利一区二区蜜股av| 91久久国产最好的精华液| 成人福利视频网站| 最近日韩中文字幕| 欧美在线视频日韩| 成人av在线播放网址| 1区2区3区欧美| 久久精品午夜一区二区福利| 午夜视频在线观看一区二区三区| 欧美精品 国产精品| 91日韩一区二区三区| 曰韩精品一区二区| 91麻豆精品国产91| 精品日本一区二区| 国内成+人亚洲+欧美+综合在线 | 欧美一区1区三区3区公司 | 中文字幕欧美日韩一区二区三区| 国产成人免费xxxxxxxx| 国产精品无码永久免费888| 一区二区三区四区五区视频| 丁香一区二区三区| 亚洲天堂2014| 欧美一级理论性理论a| 蜜桃日韩视频| 懂色av一区二区在线播放| 一区二区三区在线影院| 欧美日韩卡一卡二| 精品亚洲一区二区三区四区五区高| 蜜桃免费网站一区二区三区 | 蜜桃av一区二区| 久久精品视频在线看| 影音先锋亚洲视频| 成人黄动漫网站免费| 久久超级碰视频| 一区二区三区久久| 亚洲精品一区二区三区在线观看| 亚洲精品视频一区二区三区| 97se在线视频| 国产精品中文字幕一区二区三区| 欧美日韩无遮挡| 国产一区二区三区久久悠悠色av | 亚洲午夜精品网| 国产欧美精品国产国产专区| 欧美日韩久久不卡| 亚洲va韩国va欧美va精四季| 99久免费精品视频在线观看| 美女任你摸久久| 一区二区三国产精华液| 国产日韩欧美麻豆| 欧美成人福利视频| 欧美日韩国产经典色站一区二区三区| 欧美一区二区视频在线| 波多野结衣久草一区| 国产 欧美在线| 毛片一区二区三区| 水野朝阳av一区二区三区| 日韩理论片在线| 国产午夜精品一区二区三区四区| 91麻豆精品国产91久久久| 欧美午夜电影网| 宅男噜噜99国产精品观看免费| 精品在线视频一区二区| eeuss鲁片一区二区三区 | 91精品国产综合久久久久久丝袜| 日韩免费观看高清完整版| 在线精品亚洲一区二区不卡|