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