嵌入式Linux下Qt/Embedded應用關(guān)鍵技術(shù)研究
隨著(zhù)后PC時(shí)代的到來(lái),嵌入式系統的性能有了大幅度的提高,應用范圍也越來(lái)越廣,當初的一些簡(jiǎn)單的人機交互接口已經(jīng)無(wú)法滿(mǎn)足人們的要求,在嵌入式系統中也逐漸出現了圖形用戶(hù)界面(Graphic User Interface,GUI),特別是在一些消費類(lèi)產(chǎn)品中。嵌入式系統中的GUI就是在嵌入式系統中為特定的硬件設備或環(huán)境而設計的圖形用戶(hù)界面系統,由于受到目前嵌入式系統本身特點(diǎn)的影響,并受其發(fā)展限制,所以嵌入式系統中的GUI應該有如下特點(diǎn)[1]:
1)占用的存儲空間以及運行時(shí)占用資源少。
2)運行速度以及響應速度快。
3)可靠性高。
4)便于移植和定制。
Linux有開(kāi)放的源碼、高效穩定的內核、良好的開(kāi)發(fā)環(huán)境以及支持多種硬件平臺等特點(diǎn),而且由于Linux的可配置性和模塊化,一個(gè)Linux內核經(jīng)過(guò)配置和裁減可以只占用幾百K左右的存儲空間,使其在嵌入式系統中也得到廣泛應用[2]。
QT/Embedded是一個(gè)用于嵌入式系統的圖形用戶(hù)界面系統,能夠高效、穩定地運行于嵌入式 Linux系統下,能為用戶(hù)提供可靠的交互功能。
本文就旨在于對這樣的嵌入式GUI QT/Embedded應用中的一些關(guān)鍵問(wèn)題進(jìn)行研究。
1 嵌入式Linux操作系統
嵌入式操作系統目前主要有Vxwork、pSOS、Palm OS、Neculeus 和 Windows CE。但這些專(zhuān)用操作系統都是商業(yè)化產(chǎn)品,其價(jià)格昂貴,不適合低端嵌入式產(chǎn)品開(kāi)發(fā)。而且,源代碼的封閉性在很大程度上限制了開(kāi)發(fā)者的開(kāi)發(fā)。嵌入式 Linux操作系統彌補了這些不足,Linux操作系統是遵循GPL公約,并且有運行穩定、源碼開(kāi)放的特點(diǎn),被認為是未來(lái)嵌入式操作系統的最佳選擇。
2 QT/Embedded的特點(diǎn)和結構
QT/Embedded是著(zhù)名的QT庫開(kāi)發(fā)商Trolltech公司開(kāi)發(fā)的面向嵌入式系統的Qt版本[3]。許多基于Qt的 X Window程序可以非常方便地移植到Qt/Embedded上,僅采用Framebuffer作為底層圖形接口。Qt/Embedded類(lèi)庫完全采用 C++封裝。豐富的控件資源和較好的可移植性是Qt/Embedded最為優(yōu)秀的一方面,使用X下的開(kāi)發(fā)工具Qt Designer可以直接開(kāi)發(fā)基于Qt/Embedded的UI(用戶(hù)操作接口)界面。下圖為Qt/Embedded的實(shí)現結構。
圖1 Qt/Embedded的實(shí)現結構
Qt/Embedded在代碼設計上,巧妙地利用了C++的面向對象機制,如繼承、多態(tài)、模板等,具體實(shí)現非常靈活。
3 關(guān)鍵技術(shù)
3.1 Qt/Embedded的圖形引擎實(shí)現
Qt/Embedded的底層圖形引擎基于Framebuffer。Framebuffer是在Linux內核架構版本2.2以后新推出的標準顯示設備驅動(dòng)接口。采用mmap系統調用,可以將Framebuffer的顯示緩存映射為可連續訪(fǎng)問(wèn)的一段內存空間。由于目前比較高級的ARM體系的嵌入式 CPU中大多集成了LCD控制模塊,LCD控制模塊一般采用雙DMA控制器組成的專(zhuān)用DMA通道。其中一個(gè)DMA可以自動(dòng)從一個(gè)數據結構隊列中取出并裝入新的參數,直到整個(gè)隊列中的DMA操作都已完成為止。另外一個(gè)DMA與畫(huà)面緩沖區相關(guān)。雖然使用了雙DMA,但這兩個(gè)DMA控制器的交替使用對于CPU來(lái)說(shuō)是不可見(jiàn)的,CPU所獲得只是由兩個(gè)DMA組成的一個(gè)通道而已。
Framebuffer驅動(dòng)程序的實(shí)現分為兩個(gè)方面:一方面是對LCD及其相關(guān)部分的初始化,包括緩沖區的創(chuàng )建和對DMA通道的設置;另外一方面是對畫(huà)面緩沖區的讀寫(xiě),有read、write、lseek等系統調用接口。對于將畫(huà)面緩沖區的內容輸出到LCD顯示屏上,由硬件自動(dòng)完成,對于軟件來(lái)說(shuō)是透明的。當對于DMA通道和畫(huà)面緩沖區設置完成后,DMA開(kāi)始正常工作,并將緩沖區中的內容不斷發(fā)送到LCD上。這個(gè)過(guò)程是基于DMA對于LCD的不斷刷新。
在Qt/Embedded中,Qscreen類(lèi)是抽象出的底層顯示設備基類(lèi),它聲明了對于顯示設備的基本描述和操作方式,如打開(kāi)、關(guān)閉、獲得顯示能力等。另外還有一個(gè)重要的基類(lèi)是QGfx類(lèi),此類(lèi)抽象出對于顯示設備的具體操作接口,如選擇畫(huà)刷、畫(huà)線(xiàn)、畫(huà)矩形等。這兩個(gè)基類(lèi)是Qt/Embedded圖形引擎的底層抽象,其中所有具體函數基本上都是虛函數,Qt/Embedded對于具體的顯示設備,如Linux的Framebuffer、Qt Virtual Framebuffer做的抽象接口類(lèi)全都由此繼承并重載虛函數實(shí)現。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論