版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 嵌</b></p><p><b> 入</b></p><p><b> 式</b></p><p><b> Linux</b></p><p><b> 課</b></p>&
2、lt;p><b> 程</b></p><p><b> 設(shè)</b></p><p><b> 計 </b></p><p> 課題:嵌入式Linux下的圖形化窗口QT的移植與研究</p><p><b> 姓名:</b></p>
3、;<p> 專業(yè)班級:電子信息工程2班</p><p><b> 學(xué)號:</b></p><p><b> 指導(dǎo)老師: </b></p><p><b> 一.前言</b></p><p> 隨著嵌入式的技術(shù)的飛速發(fā)展,嵌入式已經(jīng)得到了越來越廣泛的應(yīng)用。
4、應(yīng)用領(lǐng)域涉及無線、網(wǎng)絡(luò)、消費(fèi)娛樂、影像、汽車電子、安全應(yīng)用及存儲裝置。如今越來越多的嵌入式需要一個圖形用戶界面(GUI),它是計算機(jī)與其使用者之間的對話接口,是嵌入式的重要組成部分。本文重要針對嵌入式開發(fā)平臺中Qt移植的過程進(jìn)行詳細(xì)的分析和研究,并且通過一個控制嵌入式開發(fā)平臺的led數(shù)</p><p> 碼燈的Qt應(yīng)用程序?qū)嵗齺碚f明移植和實現(xiàn)的過程。</p><p><b>
5、 1.系統(tǒng)平臺組成</b></p><p> 根據(jù)設(shè)計需要,本文目的是實現(xiàn)一個具有圖形接口</p><p> 界面的嵌入式顯示終端,改系統(tǒng)使用嵌入式設(shè)計技術(shù)。</p><p> 硬件上,采用基于Samsung$3C2410[1]CpU的目標(biāo)板;在</p><p> 軟件上,選擇嵌入式Linux為操作系統(tǒng)。整個系統(tǒng)軟件由&l
6、t;/p><p> 引導(dǎo)程序(ViVi公司的boot loader)、設(shè)備驅(qū)動(包括幀緩</p><p> 存frame buffer)、嵌入式Linux內(nèi)核、文件系統(tǒng)(cramfs)、</p><p> 基j:QT/Embedded L21和Qtopia的用戶圖形界面以及應(yīng)用程</p><p><b> 序組成.</b&
7、gt;</p><p><b> 2. Qt的移植</b></p><p> 2.1開發(fā)環(huán)境的建立</p><p> 本文采用的開發(fā)環(huán)境是Pc機(jī)+CygWin+arm-Linux-Qt。</p><p> 2.1.1 Cygwin的建立</p><p> 從網(wǎng)站http://WWw.cy
8、gwin.com上下載并安裝最新版本Cygwin,本文采用的是Cygwinl.5.1的版本。需要注意的是,Cygwin的安裝目錄必須位于硬盤的NTFS分區(qū),否則會影響文件的屬性和權(quán)限操作。本文安裝Cygwin的路徑為F:\cygwin。</p><p> 2.1.2編譯器安裝</p><p> 下載arm-linux-gcc-3.4.1.tar.bz2至1]/usr/local下,生成
9、的編譯工具會在目錄/usr/10cal/arm/3.4.i/bin下,然后修改/etc/profile文件,重新啟動Cygwin就可以直接運(yùn)行arm—l inux~gcc。</p><p> 2.1.3 Lj nux的安裝</p><p> 從官方網(wǎng)站fttp://www.1inux.org-F載linux安裝包,本文采用的inux-2.4.18版本。2.2安裝與建立0t桌面運(yùn)行環(huán)境&
10、lt;/p><p> 從官方網(wǎng)站ftp://ftp.trolltech.com下載以下文件:</p><p> qt—xl l一2.3.2.tar.gz</p><p> qt—embedded一2.3.7.tar.bz2</p><p> tmake—1.1 1.tar.gz QTOPIA—free一1.7.0.tar.gz</p
11、><p> 解壓這三個文件到/usr/local/gui/qt,設(shè)置環(huán)境變量:</p><p> export TMAKEDIR=</p><p> lusr/local/gui/qt/tmake/lib/qws/cygwin—a]mrg++</p><p> export QTDIR=</p><p> ?。痷s
12、r/local/gui/qt/qt—X1 I-2.3.2</p><p> export QTEDIR=</p><p> ?。痷sr/local/gui/qt/qt—embedded一2.3.7</p><p> export QPEDIR=</p><p> /usr/local/gui/qt/OTOPIA—free一1.7.0&l
13、t;/p><p> 分別編譯上面的文件最后生成所需的編譯器moc.ere(定義用戶的信號和槽是所用)、uic.exe(Qt中的用戶界面編譯器)、tmaRe.exe(生成makefile文件)progen.exe(生成工程管理文件)和在開發(fā)平臺上運(yùn)行程序的所需的函數(shù)庫。</p><p> 2.3制作帶0t的根文件系統(tǒng)(Root F.1e System)根文件系統(tǒng)是Linux系統(tǒng)的核心部分,包
14、含系統(tǒng)使用的軟件和庫,以及所有用來為用戶提供支持架構(gòu)和用戶使用的應(yīng)用軟件,并作為存儲數(shù)據(jù)讀/寫結(jié)果的區(qū)域。在Linux系統(tǒng)啟動時,首先完成內(nèi)核安裝及環(huán)境初始化,之后會尋找一個文件系統(tǒng)作為根文件系統(tǒng),并</p><p> 將其加載。嵌入式系統(tǒng)中通??梢赃x擇的根文件系統(tǒng)有:ronfs、cramfs、ramfS、jffs2、ext2等。</p><p> 文件系統(tǒng)包括以下目錄:/bin(應(yīng)用
15、程序存放目錄)/sbin(存放系統(tǒng)管理員服務(wù)程序)/1ib(存放程序運(yùn)行所需的動態(tài)庫)/proc(系統(tǒng)狀態(tài)文件目錄)/dev(驅(qū)動程序存放路徑)/etc(系統(tǒng)配置文件及用戶數(shù)據(jù)存放目錄)/mnt(用于設(shè)備安裝的目錄)/usr(用于存放用戶程序和配置文件的目錄)/qt(存放QTOPIA運(yùn)行文件)。使用燒寫工具mkcramfs將其專成一個映像文件。</p><p> 2.4在9TOPIA中增加應(yīng)用程序</p&
16、gt;<p> QTOPIA是為基于Linux的PDA、智能電話和其他移動設(shè)備設(shè)計的一個全面的,可以用戶化的應(yīng)用程序平臺和用戶界面。當(dāng)編寫好QTOPIA應(yīng)用程序源文件(在本文中的源文件為led.cpp led.h main.cpp,存放路徑/home/led)安下面的命令就可以生成arm板子上跑的程序:</p><p> cd/home/l ed</p><p> pr
17、ogen—n led一0 led.pro</p><p> tmake hello.pro一0 makefi le</p><p><b> make</b></p><p> cp led/usr/10cal/root/qt/bin</p><p> 然后在/usr/local/root/qt/apps/App
18、lications下</p><p> 添力Hled.desktop(啟動后可以在屏幕上顯示led程序),</p><p> 最后用mkcramfs燒寫就可以了。</p><p> 交叉編譯Qt/Embedded庫</p><p> 當(dāng)有了ARM的linux編譯器后,就可以使用這個編譯器進(jìn)行交叉編譯Qt/Embedded庫的源代碼,從
19、而產(chǎn)生一個以ARM為目標(biāo)代碼的Qt/Embedded庫。具體過程如下:</p><p> (1)解壓0t,Embedded</p><p> 在Linux命令模式下運(yùn)行如下命令:</p><p> #tar xfz qt—embedded-2.3.7.tar.gz</p><p> (2)配置Qt/Embedded的安裝</p&
20、gt;<p> #cd qt一2.3.7</p><p> #export QrfDIR=$PWD</p><p> #exportQTEDIR=$QTDIR</p><p> #.cp,配置文件所在路徑,/qconfig-local.h</p><p> /src/tools</p><p>
21、 #make clean</p><p> #/cofigure –xplatform linux—arm—g++ 一</p><p> shared—debug</p><p> —qconfig local—qvfb—depths 4,8,16,32</p><p><b> #make</b></p
22、><p> Qt/Embedded的安裝選項有很多個,可以直接輸入“”來運(yùn)行配置。Qt/Embedded的安裝選項還允許自己定制一個配置文件,來有選擇的編譯Q忱,llbedded庫,這個安裝選項是“-qconfig—local”;當(dāng)指定這個選頊時,Qr/Embedded庫中安裝過程會尋找qt一2.3.7/src/tools,qconfig—local.h這個文件來編譯鏈接Qt/Embedded庫。在定制中添加了對觸
23、摸屏顯示的支持。</p><p> 3.linux下的I ed的設(shè)備驅(qū)動程序的實現(xiàn)在Linux下,設(shè)備驅(qū)動程序可以看成Linux內(nèi)核與外部設(shè)備之間的接口。設(shè)備驅(qū)動程序向應(yīng)用程序屏蔽了硬件實現(xiàn)得應(yīng)用程序可以像操作普通文件一樣來操作外部設(shè)備,可以使用和操作文件中相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口函數(shù)來完成對硬件設(shè)備的打開、關(guān)閉、讀寫和i/o控制操作,而驅(qū)動程序的主要任務(wù)也就是要實現(xiàn)這些系統(tǒng)調(diào)用函數(shù)。本系統(tǒng)平臺使用的嵌入式a
24、rmLinux系統(tǒng)在內(nèi)核主要功能上與Linux操作系統(tǒng)沒本質(zhì)區(qū)別,所以驅(qū)動程序要實現(xiàn)的任務(wù)也一樣,只要編譯時使用的編譯器、部分頭文件和庫文件等要涉及到具體處理器體系結(jié)構(gòu),這些都可以在Makefile文件中具體指定。</p><p> LED一0N.ALL=OxOf點亮所有的led數(shù)碼生成窗體類的頭文件和實現(xiàn)文件</p><p> 界面文件使用uic工具產(chǎn)生出窗體類的頭文件和實現(xiàn)文件,例
25、如hell0.ui節(jié)目文件產(chǎn)生hello窗體類的頭文件和實現(xiàn)文件,具體方法如下:</p><p> #cd qt一2.3.7/bin</p><p> #uic—o hello.h hello.ui</p><p> #uic—o hello.cpp—impl he1lo.h helIo.ui</p><p> 這樣我們就得到hell
26、o窗體類的頭文件hello.h和實現(xiàn)文件hello_cppo接下來根據(jù)我們要實現(xiàn)的具體功能,在hello.cpp文件里添加相應(yīng)的代碼。</p><p> 3.1編寫主函數(shù)main()</p><p> 一個Qt/Embedded應(yīng)用程序應(yīng)該包含一個主函數(shù),主函數(shù)所在的文件名是main.cpp。主函數(shù)是應(yīng)用程序執(zhí)行的入口點。</p><p><b>
27、3.2編輯工程文件</b></p><p> 在工程文件中添加窗體類的頭文件、實現(xiàn)文件和主函數(shù)交件。</p><p> QT/Embedded</p><p> QT/Embedded是著名的QT庫開放商正在進(jìn)行的面向</p><p> 嵌入式系統(tǒng)的QT版本。這個版本的主要特點是可移植性較</p><p
28、> 好,許多基于QT的X Window程序可以非常方便地移植到嵌</p><p> 入式版本。QT/Embedded采用兩種方式進(jìn)行發(fā)布:在GPL協(xié)</p><p> 議下發(fā)布的free版與專門針對商業(yè)應(yīng)用的commercial版本。</p><p> 如果你要在商業(yè)中使用這個庫,需要支付昂貴的授權(quán)費(fèi)用。Qt/Embedded是著名的Qt庫開發(fā)商的Tr
29、olltech公司開</p><p> 發(fā)地觀向嵌入式系統(tǒng)的Qt版本。因為Qt是KDE等項目使用</p><p> 的GUl支持庫,許多基于Qt的x window程序因此可以非常</p><p> 方便地移植到Qt/Embedded上。Qt/Embedded同樣是Server/</p><p> client結(jié)構(gòu)。</p>
30、;<p> Qt/Embedded延續(xù)了Qt在X上的強(qiáng)大功能,在底層摒棄</p><p> 了X lib,僅采用framebuffer作為底層圖形接口。同時,將外部</p><p> 輸入設(shè)備抽象為keyboard和mouse輸入事件,底層接口支持</p><p> 鍵盤、GPM鼠標(biāo)、觸摸屏以及用戶自定義的設(shè)備等。Qt/Em—</p>
31、;<p> bedded類庫完全采用c++封裝。豐富的控件資源和較好的</p><p> 可移植性是Qt/Embedded是為優(yōu)秀的一方面。它的類庫接口</p><p> 完全兼容于同版本的Qt—x11,使用X下的開發(fā)工具可以直</p><p> 接開發(fā)基于Qt/Embedded的應(yīng)用程序QUI界面。</p><p>
32、 與前兩種GUI系統(tǒng)不同的是,Qt/Embedded的底層圖形</p><p> 引擎只能采用framebuffer。這就注定了它是針對高端嵌入式</p><p> 圖形領(lǐng)域的應(yīng)用面設(shè)計的。但由于該庫的代碼追求面面俱到,</p><p> 以增加它對多種硬件設(shè)備的支持,造成了其底層代碼比較凌</p><p> 亂、各種補(bǔ)丁較多的問題。
33、</p><p> Qt/Embedded的結(jié)構(gòu)也過于復(fù)雜臃腫,很難進(jìn)行底層的</p><p><b> 擴(kuò)充、定制和移植。</b></p><p> 嵌入式GuI的系統(tǒng)架構(gòu)</p><p> 1.1基于嵌入式Linux的GuI系統(tǒng)底層實現(xiàn)基礎(chǔ)一個能夠移植到多種硬件平臺上的嵌入式GUI系統(tǒng),應(yīng)用至少抽象出兩類設(shè)備
34、:基于圖形顯示設(shè)備(如VGA卡)的圖</p><p> 形抽象層GAL(Graphic Abstract Layer),基于輸入設(shè)備(如鍵</p><p> 盤,觸摸層等)的輸入抽象層IAL(Input Abstract Layer),如圖1所示:</p><p> 抽象層的概念類似Linux內(nèi)核虛擬文件系統(tǒng)的概念,定義了一組不依賴于任何特殊硬件的抽象接口,所
35、有頂層的圖形操作和輸入處理都建立在抽象接口上。GAL層完成系統(tǒng)對具體的顯示硬件設(shè)備的操作,極大程度上陷蔽各種不同硬件的技術(shù)實現(xiàn)細(xì)節(jié),為系統(tǒng)程序開發(fā)人員提供統(tǒng)一的圖形編程</p><p> 接口。IAL層則需要實現(xiàn)對于各類不同輸入設(shè)備的控制操作,提供統(tǒng)一的調(diào)用接口。GAL層與IAL層的設(shè)計概念,可以極大程度地提高嵌入式GUI的可移植性。而用于實現(xiàn)這一抽象接口的底層代碼稱為“圖形引擎”或“輸入引擎”,類似操作系統(tǒng)中
36、的驅(qū)動程序。這實際是一種面向?qū)ο蟮某绦蚪Y(jié)構(gòu)。越)I編程接口</p><p> 嵌入式GUIGAL層¨L層設(shè)備抽象層圖形顯示設(shè)備輸入設(shè)備系統(tǒng)硬件</p><p> 目前應(yīng)用于嵌入式Linux系統(tǒng)中比較成熟,功能也比較強(qiáng)大的GUI系統(tǒng)底層支持庫有SVGAlib、LibGGI、Xwindo、Frame buffer等。</p><p> 1.2底層圖形發(fā)生
37、引擎的介紹</p><p> Linux圖形領(lǐng)域中常見的基礎(chǔ)設(shè)施,是因為這些系統(tǒng)(或者函數(shù)庫)一般作為其他高級圖形或者圖形應(yīng)用程序的基本函數(shù)庫。這些系統(tǒng)(或者函數(shù)庫)主要包括:sVGAlib、LibGGI、windo、Frame buffer等,詳述如下:</p><p> 1.2.1 LibGGI</p><p> LibGGI試圖建立一個一般性的圖形接口,
38、而這個抽象接口連同樣關(guān)的輸入(鼠標(biāo)、鍵盤、游戲桿等)抽象接口一起,可以方便地運(yùn)行在X Windows、SVGALib、FrameBuffer等等之上。建立在“bGGI之上的應(yīng)用程序,不經(jīng)重新編譯,就可以在上述這些底層圖形接口上運(yùn)行。但是現(xiàn)在LibGGI的發(fā)展幾乎停滯。</p><p> 1.2.2 SVGAlib</p><p> SVGAlibj是Linux系統(tǒng)中最早出現(xiàn)的非X圖形支
39、持庫。這個庫從最初對標(biāo)準(zhǔn)VGA兼容芯片的支持開始,一直發(fā)展到對老式SVGA芯片的支持對及對現(xiàn)今流行的高級視頻芯片支持。它為用戶提供了在控制臺上進(jìn)行圖形編程的接口,使用戶可以在PC兼容系統(tǒng)上方便地獲得支持。但該系統(tǒng)有如下不足:</p><p> 1)接口雜亂。SVGALib從初的Vgalib發(fā)展而來,保留下了老系統(tǒng)許多接口,而些接口卻不能良好地迎合新顯示芯片的圖形能力。</p><p>
40、 2)未能較好地隱藏硬件細(xì)節(jié)。許多操作不能自動使用顯示芯片的加速能力支持。</p><p> 3)可移植性差。SVGALib目前只能運(yùn)行在x86平臺上,對其他平臺的支持較差。</p><p> 4)發(fā)展緩慢,sVGALib作為一個老的圖形支持庫,目前的應(yīng)用范圍越來越尤其在Linux內(nèi)核增加了Frame Buffer驅(qū)動支持之后,有逐漸被其他圖形庫替代的跡象。</p>&l
41、t;p> 5)對應(yīng)用的支持能力較差。SVGALib作為一個圖形庫對高級圖形功能的支持,比如直線和曲線等,不能令人滿意。1.2.3 Frame BufferFrame Buffer是出現(xiàn)在</p><p> 2.2xx內(nèi)核中的一種驅(qū)動程序接口,將顯示設(shè)備抽象為幀緩沖區(qū).可以將它看成顯示內(nèi)存的一個映像,將其映射到進(jìn)程地址空間之后,就可以直接進(jìn)行讀寫</p><p> 操作,而寫操作
42、可以立即反應(yīng)在屏幕上.Frame Buffer設(shè)備還提供了若干ioctl命令,通過這些命令,可以獲得顯示設(shè)備一些固定信息(如顯示內(nèi)存大小)與顯示模式相關(guān)的可變信息(如分辨率、象素結(jié)構(gòu)、每掃描線的字節(jié)寬度)、當(dāng)前內(nèi)核支持的加速顯示卡的類型(通過固定信息得到,這種類型通常是和特</p><p> 定顯示芯片相關(guān)的),以及偽彩色模式下的調(diào)色信息等。但Frame Buffer只是一個提供顯示內(nèi)存和顯示芯片寄存器從物理內(nèi)
43、存映射到進(jìn)程地址空間中的設(shè)備。所以,對于應(yīng)用程序而言,如果希望在Frame Buffer之上進(jìn)行圖形編程,還需</p><p> 要完成其他許多工作。</p><p><b> 2</b></p><p> 現(xiàn)有嵌入式GUI的敘述</p><p> 在Linux之上進(jìn)行(實時)嵌入式系統(tǒng)開發(fā)的廠商,一般選擇如下幾
44、種GUI系統(tǒng):緊縮的X Window系統(tǒng)、MiniGUI、MicroWindows、QT/Embedded等。</p><p> 2.1緊縮的x Window系統(tǒng)</p><p> X Window是Linux以及其他類UNIX系統(tǒng)的標(biāo)準(zhǔn)GUI.</p><p> x window系統(tǒng)采用標(biāo)準(zhǔn)的客戶/服務(wù)器體系結(jié)構(gòu),具有可擴(kuò)展性好、可移植性好等優(yōu)點;但該系統(tǒng)的
45、龐大、累贅和低效率。為了獲得應(yīng)用程序的可移植性,許多廠家都試圖通過對XWindow系統(tǒng)的緊縮開發(fā),使之能夠在嵌入式系統(tǒng)上運(yùn)行。國</p><p> 外已經(jīng)開發(fā)出了大小約為800K的X服務(wù)器。這對西方國家來說基本能夠滿足嵌入式系統(tǒng)的需求了。但該系統(tǒng)的源代碼尚不開放,從而很難進(jìn)行本地化開發(fā)。</p><p> 2.2 MicrOWindOws</p><p> M
46、icroWindows是一個開放源碼的項目,目前由美國一家公司在主持開發(fā).該項目的開發(fā)非?;钴S,國內(nèi)也有人參與了其中的開發(fā),并編寫了GB2312等字符集的支持.該項目的主要特色在于提供了比較完善的圖形功能,包括一些高級的功</p><p> 能,比如Alpha混合,三維支持,TrueType字體支持等.但作為一個窗口系統(tǒng),該項目提供的窗口處理功能還需要進(jìn)一步完善,比如控件或構(gòu)件的實現(xiàn)還很不完備,鍵盤和鼠標(biāo)等驅(qū)動
47、還很不完善.</p><p> 2.3 QT/Embedded</p><p> QT/Embedded是著名的QT庫開放商正在進(jìn)行的面向嵌入式系統(tǒng)的QT版本。這個版本的主要特點是可移植性較好,許多基于QT的X Window程序可以非常方便地移植到嵌入式版本。QT/Embedded采用兩種方式進(jìn)行發(fā)布:在GPL協(xié)議下發(fā)布的free版與專門針對商業(yè)應(yīng)用的commercial版本。如果你要
48、在商業(yè)中使用這個庫,需要支付昂貴的授權(quán)費(fèi)用。</p><p> 2.4 MiniGUI簡介</p><p> MiniGUI是一種面向嵌入式系統(tǒng)或者實時系統(tǒng)的圖形用戶界面支持系統(tǒng)。它主要運(yùn)行于Linux控制臺,實際也可以運(yùn)行一種具有POSIX線程支持的POSIX兼容系統(tǒng)上。MiniGUI同時也是國內(nèi)最早出現(xiàn)的幾個自由軟件項目之一。MiniGUI為了得到最大的效率,采用基于線程的多窗口機(jī)
49、制。這種結(jié)構(gòu)對數(shù)控系統(tǒng)這樣任務(wù)單一、實時要求高的系統(tǒng)來講,是最佳解決方案。但如果系統(tǒng)中運(yùn)行的任務(wù)并不是單一的,就有可能因為一個任務(wù)的失效而影響其他任務(wù)。因此,提高GuI系統(tǒng)的健</p><p> 壯性就成為另一個亟待解決的問題。</p><p> 3每個系統(tǒng)設(shè)計優(yōu)點及特色</p><p> 3.1 三種嵌入式GUI系統(tǒng)的分析與比較</p><
50、;p> 3.1-1 Microwindows</p><p> Wicrowindows是一個典型的基于Server/Client體系結(jié)構(gòu)的GUI系統(tǒng),基本分為</p><p> 三層,如圖2所示.最底去是面向圖形顯示和鍵盤、鼠標(biāo)或觸摸屏的驅(qū)動程序;</p><p> 中間層提供底層硬件的抽象接口,并進(jìn)行窗口管理}最高層分別提供兼容于x</p&g
51、t;<p> Window和ECMA APIW(Win32子集)的API。</p><p> Nallo—X API ECMA APIW </p><p><b> 窗口管理</b></p><p><b> 硬件設(shè)備層</b></p><p><b> 顯
52、示硬件輸入設(shè)備</b></p><p> 其中使用Nano—x接口聽API與X接口兼容,但是該接口沒有提供窗口管理,如窗口移動和窗口剪切等高級功能,系統(tǒng)中需要首先啟動nano—X的Server程序nanoxserver和窗口管理程序nanowm.用戶程序連接nano—X的Server獲得自</p><p> 身的窗口繪制操作.使用ECMAAPIW編寫的應(yīng)用程序無需nanox
53、—server和nanowm,可直接運(yùn)行。Microwindows提供了相對完善的圖形功能和一些高級</p><p> 的特性,如Alpha混合、三維支持和TrueType字體支持.該統(tǒng)為了提高運(yùn)行速度,也改進(jìn)了基于socket套接字的X實現(xiàn)模式,采用了基于消息機(jī)制的server/Client傳輸機(jī)制.Mi—crowindows也有一些通用的窗口控件,但其圖形引擎存在許多問題,具體如下:</p>
54、<p> 無任何硬件加速能力,</p><p> *圖形引擎中存在許多低效算法,如在圓弧函數(shù)的逐點</p><p><b> 判斷剪切的問題。</b></p><p> 2003年Microwindows推出版本O.90后,該項目的發(fā)展</p><p><b> 開始陷于停滯狀態(tài)。</
55、b></p><p> 三種嵌入式GUI的比較與分析</p><p> 比較上述幾個嵌入式GUI系統(tǒng),可以知道目前比較成熟</p><p> 同時得到最多開發(fā)人員認(rèn)可的有QT/Embedded、MiniGUI、</p><p> MicroWimdows等。MiniGUI和Microwimdows均為自由軟</p>
56、<p> 件,前者遵循LGPL條款,后者遵循MPL條款。這兩個系統(tǒng)的</p><p> 技術(shù)路線也有所不同。MiniGUI的策略是首先建立在比較成</p><p> 熟的圖形引擎之上,比如SVGALib和LibGGI,開發(fā)的重點在</p><p> 于窗口系統(tǒng)、圖形接口之上;MicroWimdows目前的開發(fā)重點</p><p
57、> 則在底層的圖形引擎之上,窗口系統(tǒng)和圖形接口方面的功能</p><p> 比較欠缺。例如MiniGUI有一套用來支持多字符集和多編碼</p><p> 的函數(shù)接口,可以支持各種常見的字符集,包括GB、BIG5、U—</p><p> NICODE等,而MicroWimdows在多字符的支持上尚沒有統(tǒng)</p><p> 一接口
58、。QT/Embedded系統(tǒng)則是針對高性能手持設(shè)備和移動</p><p> 設(shè)備設(shè)計,對系統(tǒng)的各種要素要求很高,也是目前商業(yè)化應(yīng)用</p><p> 最多的一款商業(yè)收費(fèi)嵌入式GUI系統(tǒng)。</p><p> 1inux下的led的設(shè)備驅(qū)動程序的實現(xiàn)</p><p> 在Linux下,設(shè)備驅(qū)動程序可以看成Linux內(nèi)核與外部設(shè)備之間的接口
59、。設(shè)備驅(qū)動程序向應(yīng)用程序屏蔽了硬件實現(xiàn)了的細(xì)節(jié),使得應(yīng)用程序可以像操作普通文件一樣來操作外部設(shè)備,可以使用和操作文件中相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口函數(shù)來完成對硬件設(shè)備的打開、關(guān)閉、讀寫和i/o控制操作,而驅(qū)動程序的主要任務(wù)也就是要實現(xiàn)這些系統(tǒng)調(diào)用函數(shù)。本系統(tǒng)平臺使用的嵌入式armLinux系統(tǒng)在內(nèi)核主要功能上與Linux操作系統(tǒng)沒本質(zhì)區(qū)別,所以驅(qū)動程序要實現(xiàn)的任務(wù)也一樣,只要編譯時使用的編譯器、部分頭文件和庫文件等要涉及到具體處理器體系結(jié)
60、構(gòu),這些都可以在Makefile文件中具體指定。LED一0N.ALL=OxOf點亮所有的led數(shù)碼燈</p><p> LED—OFF—ALL=Ox00熄滅所有的led數(shù)碼燈,其中,LEDl、LED2、LED3、LED4分別接$3C2410的r/oC3GPF4、GPF5、GPF6、GPF7可以通過讀寫GPF I/O來控制L叻數(shù)碼燈的狀態(tài)。外部硬件電路圖如圖3所示。</p><p> 圈
61、3 LED幻硬件電路圈對于led數(shù)碼燈,其驅(qū)動程序中需要提供基本的I/O</p><p> 操作接口函數(shù)open、read、write、close的實現(xiàn),本文中的led數(shù)碼燈的亮滅是通過write函數(shù)來實現(xiàn)的。</p><p> 3.2應(yīng)用程序的實現(xiàn)</p><p> 為了控制led數(shù)碼燈需要在應(yīng)用程序中加載一下的</p><p>&l
62、t;b> 頭文件:</b></p><p> #include<sys/stat.h></p><p> #include<sys/types.h></p><p> #include<fcntl.h></p><p> 本文中設(shè)計的qt[3J程序通過四個led數(shù)碼燈來模擬開發(fā)板
63、上的led數(shù)碼燈的顯示模式,非常贏觀的實現(xiàn)了led數(shù)碼燈的顯示過程,可以以跑馬燈的形式顯示,還可以單個控制數(shù)碼燈的顯示控制led數(shù)碼燈程序?qū)崿F(xiàn)過程,打開led設(shè)備,led在</p><p> 系統(tǒng)中對應(yīng)的設(shè)備文件為/dev/led/O,采用系統(tǒng)調(diào)用函數(shù)led—fd=open(。/dev/led/O。,o RDwR),led—fd是設(shè)備打開后返回的文件描述符(打開錯誤</p><p>
64、返回-I),以后的系統(tǒng)調(diào)用函數(shù)就可使用它來對設(shè)備文件進(jìn)行操作了。接著,利用write(1ed-fd,&val,1)函數(shù)向GPIO寫控制字。</p><p> (3)uic(user interface compiler)</p><p> uic是從xML文件生成代碼的用戶界面編譯器,用來將file.ui文件生成file.h和6le.cpp文件(命令如:uic—o file.h
65、 nle.ui uic_0 file.cppfile.ui),但生成的這兩個文件不是標(biāo)準(zhǔn)的純C++代碼,通常稱為Qt的c++擴(kuò)展,因為Qt的對象間運(yùn)用了信號和插槽的通信機(jī)制,在文件中用Q_oBjECT宏來標(biāo)識。</p><p> (4)moc(元對象編譯器)</p><p> moc用來解析一個c++文件中的類聲明并且生成初始化對象的c++代碼,moc在讀取c++源文件,如果發(fā)現(xiàn)其中一
66、個或多個類的聲明中含有Q_0BJEcT宏,就給出這個使用Q—OBJECT宏的類生成另外一個包含元對象代碼的c++元文件;元對象代碼對信號插槽機(jī)制、運(yùn)行時的類型信息和動態(tài)屬性系統(tǒng)是需要的。</p><p> 2.3 Qt/Embedded支持觸摸屏顯示</p><p> Qr/Embedded 2.x系列中,觸摸屏設(shè)備和鍵盤設(shè)備需要根據(jù)具體的驅(qū)動程序接口中Qt/ErIlbedded中設(shè)備
67、實現(xiàn)對應(yīng)的設(shè)備操作類。其中</p><p> 對應(yīng)于鼠標(biāo)類設(shè)備的實現(xiàn)位于”以erne】/qwsnlouse-qws.cpp中。</p><p> 在文件qwsmouse_qws.cpp中添加對觸摸</p><p> 屏的支持。具體修改如下:</p><p><b> (</b></p><p&
68、gt; 1)定義和Linux內(nèi)核文件driver/input,tsdev.c中數(shù)據(jù)結(jié)構(gòu)t8一event相一致的TS_EvENT數(shù)據(jù)結(jié)構(gòu),定義如下:</p><p> #if defined(Q711_QwSjPAQ)</p><p> typedef stmct{</p><p> short pressure;</p><p>&l
69、t;b> short x:</b></p><p><b> short y;</b></p><p> shon miHi8ec8:</p><p> J rI's—EVENT;</p><p> (2)修改校準(zhǔn)文件的位置</p><p> 在函數(shù)void
70、OCalibratedM0useHandleE:</p><p> writeCalibration()和</p><p> void QC礎(chǔ)bratedMouseHandleE:</p><p> readcalibration()中修改如下:</p><p> Qstring calFik=“Am∥pointercal”;<
71、/p><p> (3)對打開的設(shè)備文件進(jìn)行修改</p><p> 在函數(shù)QTPanelHandlerPrivate::</p><p> Q即anelHandlerPrivate中,修改如下:</p><p> mouseFD =open (“陽e以npu伉sO”,</p><p> O—RDONLY O—NDE
72、LAY);</p><p> (4)由于內(nèi)核Ts_EVENT結(jié)構(gòu)中,當(dāng)觸摸屏</p><p> 按下時對pressure的設(shè)置為l,因此在void</p><p> OTPanelHandlerPrivate::readMouseData()函數(shù)中</p><p><b> 把</b></p>&l
73、t;p> if (data 一>pressure >2</p><p> QT_QWS-TP—PRESSUREJHRESHOLD)</p><p><b> 修改為:</b></p><p> i“data一>pressure)</p><p> 2.4移植Qt/Enlbedded庫&l
74、t;/p><p> 在ARM板的根文件系統(tǒng)的tmp目錄下創(chuàng)</p><p> 建新目錄qt,在qt目錄下創(chuàng)建新目錄lib。把交</p><p> 叉編譯后生成的Qt/EIllbedded庫拷貝到ARM</p><p> 板上的根文件系統(tǒng)下的/tmp,qt/lib目錄下。在使</p><p> 用QT庫之前要設(shè)置環(huán)
75、境變量。命令如下:</p><p> #e。pon QTDIR=_/tmp/qt</p><p> ≠圯xpon LD—uBRARY—PATH=$QTDIR/lib:$LD—UBRARY—-PⅣI’H</p><p> 這樣Ot/Enlbedded應(yīng)用程序就可以在</p><p> ARM板上移植了。3 O泥mbedded應(yīng)用程序的開
76、發(fā)開發(fā)一個Qt應(yīng)用程序的流程如下</p><p> 3.1生成一個工程文件(.pr0文件)</p><p> 一個應(yīng)用通常對應(yīng)一個工程文件,生成一個工程文件,并對它做一些簡單的編輯,然后使用一個專門的工具(例如tmake)處理這個工程文件,就可以生成一個Make6le文件。產(chǎn)生一個工程文件的其中一個方法是使用pmgen命令(progen程可以在tmake的安裝路徑下找到)。下面是使用p
77、mgen產(chǎn)生一個名為</p><p> hello的工程文件的命令:progen—t app^—o hello,pro產(chǎn)生的hello.pm工程文件并不完整,開發(fā)者還需手動往里添加工程所包含的頭文件,源文</p><p><b> 件等信息。</b></p><p><b> 3.2新建一個窗體</b></p&
78、gt;<p> 在qt一2.3.2的安裝路徑的bin目錄下運(yùn)行“.,desigller”命令,就啟動了一個Qt圖形編輯器。點擊編輯器的“new”菜單,彈出了一個“new</p><p> F0rm”對話框,在這個對話框里我們選擇“widget”,然后點擊“0K”按鈕,這樣我們就新建了一個窗體:接著,我們可以對這個窗體進(jìn)行設(shè)</p><p> 置。設(shè)置完成后,將其保存為h
79、ello,ui文件,這個文件就是pmject窗體的界面存儲文件。</p><p> 3.3生成窗體類的頭文件和實現(xiàn)文件</p><p> 界面文件使用uic工具產(chǎn)生出窗體類的頭文件和實現(xiàn)文件,例如hell0.ui節(jié)目文件產(chǎn)生hello窗體類的頭文件和實現(xiàn)文件,具體方法如</p><p><b> 下:</b></p><
80、;p> #cd qt一2.3.7/bin</p><p> #uic—o hello.h hello.ui</p><p> #uic—o hello.cpp—impl h£1lo.h helIo.ui</p><p> 這樣我們就得到hello窗體類的頭文件</p><p> hello.h和實現(xiàn)文件hello_cppo接下
81、來根據(jù)我們要實現(xiàn)的具體功能,在hello.cpp文件里添加相應(yīng)的代碼。</p><p> 3.4編寫主函數(shù)main()</p><p> 一個Ot/Embedded應(yīng)用程序應(yīng)該包含一個主函數(shù),主函數(shù)所在的文件名是main.cpp。主函數(shù)是應(yīng)用程序執(zhí)行的入口點。</p><p><b> 3.5編輯工程文件</b></p>&
82、lt;p> 在工程文件中添加窗體類的頭文件、實現(xiàn)文件和主函數(shù)交件。</p><p> 3.6生成Mal(e6le文件</p><p> 編譯器是根據(jù)Makefile文件內(nèi)容來進(jìn)行編譯的,所以需要生成Makefile文件。Ot提供的tmake工具可以幫助我們從一個工程文件(.砸。文件)中產(chǎn)生Makefile文件。從工程文件生成一個Make6le文件的具體做法如下:把環(huán)境變量卵MA
83、KEPATH所指的目錄設(shè)置為arm編譯器的配置目錄,把當(dāng)前QTDIR環(huán)境變量指向QtEmbedded的安裝路徑,這樣就可以使用tmake來生成Makefile文件。</p><p> #export TMAKEPATH-/tmake安裝路徑,</p><p> qws/linux—a瑚一g++</p><p> #export QTDIR?/qt一2.3.7&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式Linux系統(tǒng)下QT圖形界面開發(fā).pdf
- 基于Linux嵌入式操作系統(tǒng)的圖形化界面的研究和實現(xiàn).pdf
- 實時嵌入式軟件圖形化建模方法研究.pdf
- 嵌入式Linux圖形開發(fā)的研究與應(yīng)用.pdf
- 嵌入式Linux的移植與實時優(yōu)化.pdf
- 嵌入式linux的圖形用戶接口中窗口管理等技術(shù)研究與實現(xiàn).pdf
- 基于Qt的嵌入式圖形用戶界面研究與實現(xiàn).pdf
- 基于Linux嵌入式GUI的移植與研究.pdf
- LINUX嵌入式系統(tǒng)移植與應(yīng)用.pdf
- 嵌入式Linux系統(tǒng)移植與實現(xiàn).pdf
- MiniGUI在嵌入式Linux的移植.pdf
- 嵌入式linux圖形系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 嵌入式linux系統(tǒng)的圖形用戶界面
- 基于嵌入式linux圖形渲染系統(tǒng)的研究與實現(xiàn)
- 基于ARM的嵌入式Linux移植與裁剪研究.pdf
- 基于ARM的嵌入式LINUX移植研究與實現(xiàn).pdf
- 基于LabVIEW的圖形化嵌入式系統(tǒng)開發(fā)技術(shù)研究.pdf
- 嵌入式軟件的圖形化測試用例生成系統(tǒng)設(shè)計與實現(xiàn).pdf
- 嵌入式Linux下IPSec的研究與實現(xiàn).pdf
- 基于PDA的嵌入式Linux移植技術(shù)的研究.pdf
評論
0/150
提交評論