基于Qt/Embedded的GUI移植及應用程序開(kāi)發(fā)
基于Qt/Embedded的GUI移植及應用程序開(kāi)發(fā)
Transplantation of GUI and Implementation of Application Based on Embedded Linux
西安電子科技大學(xué) 白玉霞 劉旭輝 孫肖子
摘要:介紹了系統平臺構建;重點(diǎn)分別從主機環(huán)境和XSbase 255嵌入式開(kāi)發(fā)板兩部分介紹Qt/Embedded圖形界面的移植,最后結合實(shí)例闡述了如何開(kāi)發(fā)基于嵌入式Linux的應用程序以及文件系統鏡像的制作。
關(guān)鍵詞:嵌入式Linux;嵌入式GUI;Qt/Embedded;Qtopia
Abstract: This article introduced the system designing , Introduced the transplanting process of host and XSbase 255 embedded platform. Combining with the development experience ,the procedure application development based on embedded linux and filesystem image building was described in detail.
Key words: Embedded linux ;Embedded GUI;Qt/Embedded;Qtopia
隨著(zhù)互聯(lián)網(wǎng)和移動(dòng)通信技術(shù)的日益成熟,兩者相互滲透和融合的步伐正在加快。21世紀被譽(yù)為“移動(dòng)之王”時(shí)代,與此同時(shí),嵌入式linux在手機、PDA(個(gè)人數字助理)等手持信息設備領(lǐng)域的應用出現了一個(gè)強勁的發(fā)展勢頭。手持設備的關(guān)鍵在于人機交互技術(shù)的體現,所以一個(gè)十分友好的圖形用戶(hù)界面(GUI)是必不可少的。
1 系統平臺構建
本文構建的系統是實(shí)現一個(gè)掌上信息處理終端系統,集個(gè)人數字助理應用、網(wǎng)絡(luò )應用、多媒體應用于一身,并成功運行在XSbase255嵌入式開(kāi)發(fā)板上。整個(gè)系統包括四部分:(1)引導裝載程序(BootLoader),這是一段駐留在開(kāi)發(fā)板上的代碼,系統上電后首先被執行,對CPU、內存等進(jìn)行初始化,完成內核映像的裝載和引導;(2)Linux內核,是在官方的2.4.18 linux內核基礎上,加入了相應的硬件驅動(dòng)和新的文件系統而構成的;(3)圖形用戶(hù)界面,采用基于Qt/Embedded的Qtopia桌面環(huán)境;(4)應用程序的編寫(xiě)與添加。本文重點(diǎn)介紹圖形用戶(hù)界面的移植和添加應用程序。表1給出了整個(gè)系統平臺的結構。
表1 系統平臺構建
2 硬件平臺的選擇
采用XSBase255開(kāi)發(fā)板,這是一款比較理想的PDA、手機等等應用的開(kāi)發(fā)系統。采用高性能(400MHz主頻)和低功耗的Intel PXA255 處理器,64Mb SDRAM以及32MB 的FLASH(閃存)組成。640*480分辨率的LG TFT LCD,和觸摸屏驅動(dòng)ADS7843。PXA255處理器是Intel公司新近推出的取代Strong ARM的新一代嵌入式應用處理器,它擁有Thumb壓縮指令、64位長(cháng)乘法指令、擴展型DSP指令等先進(jìn)特性。PXA255具有眾多的擴展接口與無(wú)線(xiàn)接口,可支持PCMCIA、Compact Flash、MMC/SD Card、USB、Bluetooth IF、IrDA等設備。
3嵌入式GUI的移植
3.1Qt/Embedded選取
嵌入式Linux系統的有代表性的GUI系統主要有MiniGUI、MicroWindows、Tiny X以及Qt/Embedded。這些GUI系統在接口定義、體系結構、功能特性等方面存在著(zhù)很大的差別。
Tiny-X,是標準X-windows在嵌入式系統的小巧實(shí)現,作為一個(gè)圖形環(huán)境,X-window是成功的,但由于在體系接口上的原因,限制了它對游戲、多媒體的支持能力。
MicroWindows,其主要特色在于提供了C/S體系結構,同時(shí)也提供了相對完善的圖形功能。但卻無(wú)任何硬件加速能力,圖形引擎中也存在著(zhù)許多未經(jīng)優(yōu)化的低效算法。
MiniGUI,是建立在比較成熟的圖形引擎之上,其特點(diǎn)是小巧精致。它盡量保持與Win32的兼容,這樣在Win CE應用的場(chǎng)合,也可以使用MiniGUI。
Qt/Embedded,是一個(gè)專(zhuān)門(mén)為小型設備提供圖形用戶(hù)界面的應用框架和窗口系統。提供了豐富的窗口小部件(Widgets),并且還支持窗口部件的定制,因此它可以為用戶(hù)提供漂亮的圖形界面。Qt 是 KDE 等項目使用的 GUI 支持庫,所以有許多基于 Qt 的 X Window 程序可以非常方便地移植到 Qt/Embedded 版本上。
最終,在分析和比較了各種GUI的特點(diǎn),我們選用Qt/Embedded作為移植對象。
3.2 Qt/Embedded底層支持分析
Qt/Embedded 以原始 Qt 為基礎,并做了許多出色的調整以適用于嵌入式環(huán)境。Qt/Embedded 通過(guò) Qt API 與 Linux I/O 設施直接交互,成為嵌入式Linux端口。同Qt/X11相比,Qt/Embedded很省內存,因為它不需要一個(gè)X服務(wù)器或是Xlib庫,它在底層撅棄了X lib,采用framebuffer(幀緩沖)作為底層圖形接口。同時(shí),將外部輸入設備抽象為keyboard和mouse輸入事件。Qt/Embedde的應用程序可以直接寫(xiě)內核緩沖幀,這避免開(kāi)發(fā)者使用繁瑣的Xlib/Server系統。
表2 Qt/Embedded與Qt/X11的比較
Qt/Embedded的底層圖形引擎基于framebuffer,framebuffer出現在2.2.x以上內核的版本當中的一種驅動(dòng)程序接口。這種接口采用mmap系統調用,將顯示設備抽象為幀緩沖區。用戶(hù)可以將它看成是顯示內存的一個(gè)映象,將其映射到進(jìn)程地址空間之后,就可以直接進(jìn)行讀寫(xiě)操作了,而寫(xiě)操作可以立即反映在屏幕上。framebuffer驅動(dòng)程序[1]是最重要的驅動(dòng)程序之一,正是這個(gè)驅動(dòng)程序才能使系統屏幕顯示內容。其實(shí)現分為兩個(gè)方面:一是對LCD及其相關(guān)部件的初始化,包括畫(huà)面緩沖區的創(chuàng )建和對DMA通道的設置;二是對畫(huà)面緩沖區的讀寫(xiě),具體到代碼為read、write等系統調用接口。
3.3 Qt/Embedded和Qtopia的移植。
移植過(guò)程中我們采取了宿主機和目標板的開(kāi)發(fā)模式。宿主機是一臺運行Linux 的PC 機,目標板即hybus開(kāi)發(fā)板。先在宿主機上調試通過(guò)后,再移植到目標板上。
3.3.1 宿主機上的移植
前面介紹過(guò)Qt/Embedded直接寫(xiě)入幀緩沖,在宿主機上則是通過(guò)qvfb(vitural framebuffer)來(lái)模擬幀緩沖。qvfb是X窗口用來(lái)運行和測試Qtopia應用程序的系統程序,允許我們在桌面及其上開(kāi)發(fā)Qt嵌入式程序,而不需要在命令臺和X11之間來(lái)回切換。qvfb使用了共享存儲區域(虛擬的幀緩沖)來(lái)模擬幀緩沖并且在一個(gè)窗口中(qvfb)模擬一個(gè)應用來(lái)顯示幀緩沖,顯示的區域被周期性的改變和更新。通過(guò)指定顯示設備的寬度和顏色深度,虛擬出來(lái)的緩沖幀和物理的顯示設備在每個(gè)像素上保持一致。這樣我們在每次調試應用時(shí)不需要總是刷新嵌入式設備的FLASH存儲空間,從而加速了應用的編譯、連接和運行周期。
因此在最初編譯配置嵌入式Linux內核時(shí)必須使其支持幀緩沖。宿主機上的移植需要的工具及環(huán)境變量見(jiàn)表3。其中環(huán)境變量可以直接用export 來(lái)聲明,也可以在~/.bash_profile腳本文件中進(jìn)行設置。
特別指出,在配置qt-2.3.7時(shí),./configure -qconfig -qvfb -depths 4,8,16,32 就是指定Qt嵌入式開(kāi)發(fā)包生成虛擬緩沖幀工具qvfb,并支持4,8,16,32位的顯示顏色深度。運行Qt的虛擬緩沖幀工具的方法是:在Linux圖形模式下運行命令:./qvfb &。如果要把Qt嵌入式應用程序的顯示結果輸出到虛擬緩沖幀時(shí),運行時(shí)需在程序名后加上-qws選項。如./canvas-qws。
Qtopia即QPE(Qt PalmtopEnvironment)是由著(zhù)名的Trolltech公司基于Qt的嵌入式版本Qt/Embedded庫的基礎上,專(zhuān)門(mén)針對PDA、SmartPhone這類(lèi)運行嵌入式Linux的移動(dòng)計算設備和手持設備所開(kāi)發(fā)的開(kāi)放源碼的一套應用程序包和開(kāi)發(fā)庫。Qtopia是基于qt/embedded程序庫編寫(xiě)的應用程序環(huán)境,(Qtopia是Qt在Linux/embedded Linux版本里的一個(gè)application實(shí)現。)界面優(yōu)美。主要應用于高端手機,pda等嵌入式系統,具有廣闊的發(fā)展前景。
表3 宿主機移植所需工具及環(huán)境變量聲明
表4 Qtopla配置編譯及其架構
3.3.2 目標板上的移植
目標板上的移植與宿主機類(lèi)似,只需將編譯參數做一定的修改即可。表4列出了qtopia移植中qtembedded共享庫的支持,環(huán)境變量聲明和關(guān)鍵的編譯配置命令,以及最后目標板上qpe的架構。圖1是在XSbase255開(kāi)發(fā)系統上移植Qt/Embedded和Qtopia的顯示截圖。
圖1 基于XSbase的Qtopia圖形
表5 文件系統組織圖
4添加應用程序到qtopia
如前所述,我們已經(jīng)安裝好了Qtopia應用環(huán)境。下面介紹如何在Qtopia里添加我們編寫(xiě)的應用程序(camera)例子,具體Qt程序的編寫(xiě)不在本文內容之內。
1) 建立camera程序的圖標文件
制作一個(gè)32
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
linux相關(guān)文章:linux教程
評論