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