沈學銀
摘要:Framebuffer驅動程序在Linux顯示器上面具有抽象的特點。當前科學技術的持續(xù)性發(fā)展,使得很多MCU-LCD嵌入式的設備在支持上要應用更好的UI界面來實現(xiàn)其良好的視覺效果呈現(xiàn)。但由于MCU-LCD常使用在早期的單片機內,若仍舊使用Framebuffer架構將會對內核產(chǎn)生較差的影響。通過分析Framebuffer自身的結構能更好的比對出RGB以及MCU的不足之處,然后設計對應的linux幀緩沖設備驅動程序,滿足內核中Framebuffer對MCU-LCD的支持。
關鍵詞:LCD;FrameBuffer驅動;研究與實現(xiàn)
中圖分類號:TP311.11 文獻標識碼:A 文章編號:1007-9416(2017)03-0063-02
嵌入式的LCD屏幕中能支持的兩大硬件接口,其中一種接口是較為常見的RGB接口,另外一種是MCU接口。MCU-LCD早期是針對單片機領域使用而得名的,所以在使用的時候就多在低端的手機中獲得較大的應用,特點是整體價格低廉。MCU——LCSD接口標準的術語是interfac80,所以在文檔中就要使用I80代替MCU-LCD屏。
1 linux下FramBuffer
1.1 FrameBuffer機制研究
FrameBuffer可以被翻譯為幀緩沖,這是一種基礎類的圖形設備,經(jīng)常出現(xiàn)在linux2.2的版本內核中,它作為一種驅動型的程序接口而存在的,主要是其他程序的函數(shù)數(shù)據(jù)模式。這類接口多顯示為抽象或者幀緩沖區(qū),作為用戶使用該應用程序不需要對底層的驅動程序有著細致的了解,可以將其看成是內存的一種映像反映,無需做深入了解,更無需關注其物理顯存的位置或者換頁的機制等細節(jié)內容,只有將所有的映射引入到空間內,然后再開展讀和寫的操作,并且所有的操作細則都能在屏幕上直觀的呈現(xiàn)出來。
1.2 FramBuffer設備驅動研究
FramBuffer主要是實現(xiàn)不同的功能平臺控制圖,且在控制的時候要讓兩者能更好的綁定在一起。FramBuffer的優(yōu)點是能支持不同類型的硬件,并能支持新設備開發(fā)過程中產(chǎn)生的巨大工作量。它們的關系如圖1示。
FrameBUffer的驅動主要是是現(xiàn)在重點文件接口處,要求所有的層次機構都要講數(shù)據(jù)寄存在I/O內存層。
1.2.1 文件層次接口層
使用幀緩沖設備的時候能實現(xiàn)不同的數(shù)據(jù)處理,處理中設備的不同操作流程也有所不同。比如進行內存映射的時候,文件的開關以及底層文件的函數(shù)都可以作為基礎內容而封存,這樣就能滿足對文件的內存控制,并能合理的調用接觸口的讀寫函數(shù),這些函數(shù)的提取能滿足其內核的使用需求。
1.2.2 驅動層次接口層
受到現(xiàn)實設備的特殊性影響,驅動層接口處保護的內容有底層函數(shù)、記錄設備狀態(tài)數(shù)據(jù)。linux最為緩沖的幀設備,主要是在驅動層的出口處進行結構定義,通過定義現(xiàn)實當前的顯示卡的具體工作情況,從而反應出內核的情況。但由于嵌入式系統(tǒng)整體操作比較簡單,能夠涉及到的結構成員很少。
2 驅動程序設計
2.1 驅動程序初始化函數(shù)設計
函數(shù)的設計中要先創(chuàng)建FramBuffer設備的結構體然后使用函數(shù)獲取對應的LCD屏來匹配初始化的數(shù)據(jù)源,其中初始化的內容主要是對其固定的信息、可變的信息和顯示的模式開展初始化處理。然后可以在s3c2410fbs info結構中映射出有關s3c2410fbs ops的指針,并在內核中申請連續(xù)空間,將這部分空間看成是緩存的處理階段,把顯示器的地址直接添加到s3c2410fbs infl中的DMA傳輸?shù)刭|中,這樣就能直接顯示出顯示器的物理地址。
2.2 位圖顯示API設計
BMP主要的文件構成形式是:文件頭、位圖信息、顏色信息和圖形數(shù)據(jù)這些內容。BMP文件頭主要是顯示BMP的文件類型,所有的文件其起始位置和大小等信息都可以在BMP文件類型中可查;BMP的位圖信息主要的工作內容是通過說明圖片的大小和性質,對圖片的信息有簡單的了解,顏色表直接表明圖片的顏色,其實圖片顏色的表項較多,任何一個表項都有著獨有的類型結構,可以定義其中的一種顏色。位圖數(shù)據(jù)圖與傳統(tǒng)數(shù)據(jù)庫有著異曲同工之處,即能收錄每個像素值,然后所有的記錄順序是按照從左到右的順序排列,所有的掃描行排列則是按照從下到上的順序排列。
2.3 位位圖函數(shù)設計
載入的位圖,主要的目的是為進行正確的圖位分化,先要從信息頭角度考慮問題,從圖中我們能熟悉要分配多少給內存的位圖,這樣就能將位圖全部加載進來,然后為位圖創(chuàng)設調色板。
(1)讀取位圖文件頭結構信息。檢測不同的文件類型是不是“BM”,如若不是,就說明一點即文件不是位圖文件或者位圖的文件已經(jīng)遭到了破壞。若位圖標示為“BM”那么文件大小的讀取以及位圖陣列的排列相對于文件而言有很多的偏移量,這樣就方便位圖數(shù)據(jù)開辟緩沖區(qū)域。
(2)讀取位圖信息頭位置。通過讀取位圖的信息頭結構能夠獲悉到位圖的寬度、高度和每一個像素所處的位數(shù),其中包括于圖像中數(shù)據(jù)的大小等相關信息,這樣能讓位圖的讀圖信息和顏色更加鮮亮,進而就能將其使用在位圖的數(shù)據(jù)內。
(3)讀取位圖顏色表。通過對位圖的大小和結構進行了解能清晰的認識到位圖信息頭結構位置,然后在計算顏色后了解到位圖的文件起始位置出現(xiàn)偏移,借此判斷位圖的文件指針方向。結合位圖的大小或者位圖的寬度和高度等數(shù)據(jù)變化,我們能看到開辟緩沖區(qū)域位圖的顏色表內容對提升位圖的顏色表信息有著積極的影響。
(4)讀取位圖數(shù)據(jù)信息。根據(jù)位圖的圖陣列以及文件頭的偏移量或者位圖的顏色以及大小能清晰的計算出位圖數(shù)據(jù)信息,也能根據(jù)現(xiàn)有的數(shù)據(jù)信息了解到位圖能出現(xiàn)的偏移量,以及地址上的量偏移,這樣就能定位文件的指針方向,通過開辟緩沖區(qū)來讀取位圖的現(xiàn)有數(shù)據(jù)信息。
2.3.1 漢字及字符現(xiàn)實的API設計
16*16點陣漢字設計:第一步,漢字讀取的時候要將漢字串成一串,能讀取漢字從內碼進入到內緩存區(qū)域中,可以將漢字對應的內碼對應的3個字符直接轉換為兩個字符,創(chuàng)建完漢字直字串緩沖區(qū)域。第二步,打開16*16的點陣字庫,目的是要通過讀取漢字的字模數(shù)據(jù)庫,了解到漢字進行轉換以后內碼是否要依次的進行計算,了解每個漢字在字庫中的偏移量,這將漢字的字模直接在緩沖區(qū)內顯示出來。第三步,使用掃描法可以將漢字的字摸點進行點陣,若該點不為零,就要通過畫點的方式結合漢字的顏色和坐標位置在LCD上畫出該點,完成后可以持續(xù)到漢字掃描完畢在進行漢字下一個坐標的橫坐標標注,然后在進行掃描再次畫出下一個漢字。其中需要注意一點,若漢字的坐標在橫坐標的范圍以外,那么就要改變漢字的橫豎坐標值,換行畫出漢字。
2.3.2 Framebuffer設備的應用
無線的網(wǎng)絡視頻監(jiān)控系統(tǒng)中,人機接口是視頻的關鍵部位。其實在本實驗中,就要從人機界面的角度考慮問題,我們在人機界面開設期間先使用MiniGUi,這其實是一種嵌入式的設備,該設備能支持整個界面的輕視量級操作,通過具體的頁面操心系統(tǒng)我們能清晰的了解到設備應用的環(huán)境。使用MinIGUI的圖形口主要支持的是framebuffet設備的具體應用。
由于MiniGUI主要是使用獨有的體系化結構,在原理使用上通過分層設計的方法,在不同的層次上開展其他針對性的措施,也通過不同應用措施的改造或者重新改寫,做好基礎設施建設,頂層的API主要是給用戶提供編程接口,中間的MiniGUI主要是涉及不同的系統(tǒng)模塊,在最底層GAL和lAL主要是為MInIGUI提供底層圖形支持系統(tǒng),這樣可以方便這些系統(tǒng)機型設備的輸入和輸出,然后進行鼠標的具體驅動。
GAL主要的作用是將不同的圖形設備抽象為一個邏輯的設備,然后提供繪圖的功能導向,為上層模塊提供統(tǒng)一接口,在建立FrameBuffer上,盡量避免修改上層的所屬模塊系統(tǒng)。這樣能再次更改或者顯示對應屏的驅動程序中,讓MiniGUI移植到ADSP-BF561。移植過程可以從從三個階段出發(fā):第一個階段,開發(fā)和調試階段,這一階段主要是以ADSP-BF561平臺的精簡系統(tǒng)為具體的Framebuffet驅動性程序,其中調試階段就要使用圖形進行引擎調試。這應該是整個過程的關鍵性實施階段。第二,制定或者調試設備引擎的時候,先要做好設備引擎的輸入和輸出,然后通過使用開放程序,做好交叉的編譯和配置,讓整個MiniGUI的使用效果達到最優(yōu),從而實現(xiàn)圖形的界面設定。
3 結語
在FrameBuffer的機制基礎上,先要以MCU-LCD為基礎設立單片機,由于這個時代主要是使用通用顯示器的時代,在通用顯示器使用時要借助于嵌入式的平臺進行Linu驅動程序的設計,這樣能較好的解決有關通用MCU接口處LCD的驅動現(xiàn)實。該設計主要是嵌入流行的QT和MINIGUI移植工作,并為其提供基礎,使開發(fā)的二次界面能取得較好的效果。
參考文獻
[1]封岸松,楊柳,王慶輝.基于Framebuffer的DSP平臺LCD驅動程序的實現(xiàn)與應用[J].計算機系統(tǒng)應用,2011,(09):12-13.
[2]程杰,方攀,張黎明.基于SEP4020的嵌入式Linux Framebuffer驅動程序[J].電子技術,2015,(02):17-19.
[3]蘇哲欣,劉鴻飛,薛曉.嵌入式Linux下的LCD驅動程序設計與實現(xiàn)[J].工業(yè)控制計算機,2011,(09):12-13.
[4]陳渝,康爍,楊曄,曾益.SkyEye模擬器的LCD及TouchScreen模擬模塊的設計、實現(xiàn)與驗證[J].電腦編程技巧與維護,2011,(09):12-13.
[5]劉文飛,李燕燕,廖迎春,蘇兵強.基于嵌入式Linux變壓器監(jiān)測終端LCD驅動程序的設計 [J].南京信息工程大學學報(自然科學版),2015,(02):17-19.