《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實(shí)踐》課件第13章_第1頁(yè)
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實(shí)踐》課件第13章_第2頁(yè)
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實(shí)踐》課件第13章_第3頁(yè)
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實(shí)踐》課件第13章_第4頁(yè)
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實(shí)踐》課件第13章_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第13章Qt圖形應(yīng)用程序設(shè)計(jì)13.1圖形用戶界面系統(tǒng)(GUI)13.2Qt和Qt/Embedded簡(jiǎn)介13.3Qt/Embedded體系結(jié)構(gòu)13.4Qt編程入門13.5Qt和Qt/E開發(fā)環(huán)境的建立和移植本章小結(jié)

13.1圖形用戶界面系統(tǒng)(GUI)

圖形用戶界面系統(tǒng)(GUI)是系統(tǒng)級(jí)的底層軟件,它可以和文件系統(tǒng)、操作系統(tǒng)內(nèi)核等一起構(gòu)成一個(gè)完整的操作系統(tǒng)。GUI為用戶提供了與應(yīng)用系統(tǒng)交互的可視化通道,同時(shí)GUI為程序員提供了一種編程模式,即GUI負(fù)責(zé)系統(tǒng)的可視化界面的生成、管理以及系統(tǒng)與用戶之間的信息交互,而程序員只需專注于對(duì)實(shí)際應(yīng)用的分析。

13.2Qt和Qt/Embedded簡(jiǎn)介

Qt就是基于C++語(yǔ)言的一種專門用來開發(fā)GUI界面的程序,它里面包括了:button、label、frame…等很多的可以直接調(diào)用的東西。

1.?Qt是基于C++?的一種語(yǔ)言

Qt可以被稱作是一種C++?的延伸。Qt中有數(shù)百個(gè)類(class)都是用C++?寫出來的,這也就是說,Qt本身就具備了C++?的快速、簡(jiǎn)易、面向?qū)ο缶幊?Object-OrientedProgramming)等優(yōu)點(diǎn)。

2.?Qt具有非常好的可移植性

Qt不只是可以在Linux中運(yùn)作,也同樣可以運(yùn)行在MicrosoftWindows中。這也就意味著,利用Qt編寫出來的程序,在幾乎不用修改的情況下,就可以同時(shí)在Linux和MicrosoftWindows中運(yùn)行。Qt的應(yīng)用非常廣泛,從Linux到Windows,從x86到Embedded都有Qt的影子。

13.3Qt/Embedded體系結(jié)構(gòu)

13.3.1交叉開發(fā)平臺(tái)

Qt是用于本地化跨平臺(tái)應(yīng)用開發(fā)的領(lǐng)先性框架。Qt所有平臺(tái)的API是一致的。這就意味著在一種平臺(tái)上寫的應(yīng)用程序,在新的平臺(tái)上經(jīng)過重新編譯和連接便能運(yùn)行于該新平臺(tái)上。因此,軟件開發(fā)者通過開發(fā)和維護(hù)一種平臺(tái)的應(yīng)用源碼來用于多種平臺(tái)的開發(fā)。同樣,嵌入式Qt也可以移植基于Qt的軟件到嵌入式Linux中。Qt可提供的平臺(tái)如圖13-1所示。圖13-1Qt可提供的平臺(tái)13.3.2Qt/E的窗口系統(tǒng)

Qt/E的窗口系統(tǒng)采用一種客戶/服務(wù)器體系結(jié)構(gòu)。如圖13-2所示。一個(gè)典型的嵌入式Qt窗口系統(tǒng)一般包括一個(gè)服務(wù)器進(jìn)程、一個(gè)或多個(gè)客戶進(jìn)程(簡(jiǎn)稱服務(wù)器和客戶)。服務(wù)器負(fù)責(zé)為客戶和其本身分配顯示區(qū)域、生成鼠標(biāo)和鍵盤事件。客戶則通過與服務(wù)器通信來申請(qǐng)顯示區(qū)域、接收鼠標(biāo)和鍵盤事件??蛻艨梢灾苯釉L問所分配的顯示區(qū)域,以便為用戶提供GUI服務(wù)。服務(wù)器和客戶通過共享內(nèi)存的方式來傳遞所有分配顯示區(qū)域上的信息。圖13-2Qt/E的窗口系統(tǒng)的客戶/服務(wù)器體系結(jié)構(gòu)13.3.3Qt/E圖形引擎的實(shí)現(xiàn)

Qt/E的底層圖形引擎基于幀緩沖(framebuffer)。幀緩沖是標(biāo)準(zhǔn)顯示設(shè)備驅(qū)動(dòng)接口,使用MMAP系統(tǒng)將幀緩存映射到應(yīng)用程序虛擬內(nèi)存空間,這樣應(yīng)用程序可以訪問它。圖13-3信號(hào)與槽的連接

13.4Qt編程入門

13.4.1Qt編程實(shí)例

下面主要以Red

Hat

9.0中的Qt

Designer為例來講述Qt程序的設(shè)計(jì)過程。如果在安裝Red

Hat

9.0時(shí)沒有完全安裝,則Qt

Designer在默認(rèn)情況下是沒有被安裝的,用戶可以從主菜單→系統(tǒng)設(shè)置→添加/刪除應(yīng)用程序中選擇KDE軟件開發(fā),完成Qt

Designer的安裝(如圖13-4所示)。

圖13-4安裝QtDesigner圖13-5New/Open對(duì)話框圖13-6保存文件圖13-7QtDesigner主窗口圖13-8創(chuàng)建一個(gè)新的表單圖13-9更改表單的屬性圖13-10基本完成的GUI圖13-11加法程序界面效果圖圖13-12為Quit按鈕創(chuàng)建關(guān)聯(lián)圖13-13創(chuàng)建新的欄目圖13-14完成連接創(chuàng)建圖13-15創(chuàng)建Add()函數(shù)圖13-16創(chuàng)建Add()函數(shù)代碼圖13-17生成Makefile文件圖13-18測(cè)試程序結(jié)果13.4.2代碼解釋

下面寫一個(gè)簡(jiǎn)單的HelloWorld例子來解釋一下Qt應(yīng)用程序的運(yùn)行原理,讀者可對(duì)照上面的實(shí)例中所自動(dòng)生成的main.cpp(原代碼如圖13-19所示)來理解上面程序的運(yùn)行原理。圖13-19main.cpp代碼

13.5Qt和Qt/E開發(fā)環(huán)境的建立和移植

13.5.1Qt2和Qt2/E開發(fā)環(huán)境的建立

本開發(fā)環(huán)境所要的軟件如下:

tmake-1.13.tar.gz

qt-embedded-2.3.10-free.tar.gz

qt-x11-2.3.2.tar.gz

把這三個(gè)文件通過與Windows下文件共享將其拷貝到/home/mxl/dishisanzhang/train-2410-S-qte目錄中,如圖13-20所示。圖13-20拷貝源文件

1.?Qt開發(fā)環(huán)境的搭建

1)解壓安裝包并設(shè)置環(huán)境變量

2)編譯Qt2.3.2

圖13-21編譯Qt2.3.2成功后的界面

3)編譯Qvfb

圖13-22編譯Qvfb成功后的界面

2.?Qt2/E開發(fā)環(huán)境的搭建

1)編譯Qt2/Embedded

圖13-23編譯Qt2/Embedded成功后的界面

2)查看運(yùn)行結(jié)果

如果上面各步都能夠成功的編譯通過,下面就可以通過運(yùn)行Qt2/Embedded自帶的demo程序來查看運(yùn)行結(jié)果。圖13-24執(zhí)行demo程序圖13-25執(zhí)行l(wèi)auncher程序

3)交叉編譯Qt2/E

要將寫好的程序發(fā)布到開發(fā)板上,需要對(duì)Qt/Embedded重新編譯,與前面在宿主機(jī)上編譯類似,步驟如下:圖13-26交叉編譯Qt2/E結(jié)束后的界面圖13-27測(cè)試庫(kù)文件13.5.2Qt2/E程序在博創(chuàng)2410開發(fā)板上的移植

1.修改tmake配置文件

[root@localhostlib]#cdTMAKEDIR/lib/qws/linux-arm-g++

[root@localhostlinux-arm-g++]#vi$TMAKEDIR/

lib/qws/linux-arm-g++/tmake.conf

2.生成可執(zhí)行文件

[root@localhostlinux-arm-g++]#cd$QTEDIR/examples

/progressbar

[root@localhostprogressbar]#ls

[root@localhostprogressbar]#makeclean

[root@localhostprogressbar]#progen–tapp.t–o圖13-28查看progressbar可執(zhí)行程序

3.將相關(guān)的庫(kù)文件復(fù)制到根文件系統(tǒng)的lib目錄下

1)?QT2/E必要的庫(kù)文件

將?/$QTEDIR/lib/(即/home/mxl/dishisanzhang/train-2410-S-qte/qt-2.3.10-target/lib)目錄下面libqte.so、libqte.so.2、libqte.so.2.3、libqte.so.2.3.10四個(gè)文件復(fù)制到根文件系統(tǒng)lib目錄下,即

[root@localhostprogressbar]#

/home/mxl/dishisanzhang/train-2410-S-qte/qt-2.3.10-target/lib/libqte.so*

/home/mxl/dishisanzhang/root/built_rootfs/lib

2)交叉編譯器庫(kù)文件

需要復(fù)制編譯器(本章用的3.4.1版本)中/usr/local/arm/3.4.1

/arm-linux/lib中的某些庫(kù)文件到根文件系統(tǒng)的lib中,最簡(jiǎn)單的辦法是全部復(fù)制過去,即

[root@localhostprogressbar]#/usr/local/arm/3.4.1/arm-linux/lib/*

/home/mxl/dishisanzhang/root/built_rootfs/lib

3)?QT2/E字庫(kù)文件

Qt2/E字庫(kù)放在lib/fonts中,將Qt2/E字庫(kù)文件復(fù)制到根文件系統(tǒng)的lib中,即

[root@localhostprogressbar]#

/home/mxl/dishisanzhang/train-2410-S-qte/qt-2.3.10-target/lib/fonts/*

/home/mxl/dishisanzhang/root/built_rootfs/lib

4.重新制作可寫根文件系統(tǒng)

1)把tmp目錄制作為ramfs文件系統(tǒng)

(1)編譯BusyBox。配置BusyBox及編譯方法和第9章內(nèi)容一樣。

(2)創(chuàng)建linuxrc文件。linuxrc文件放在根目錄下,linuxrc文件內(nèi)容:

#!/bin/sh

echo“mount/tmpasramfs”

/bin/mount-tramfsramfs/tmp

exec/sbin/init

(3)創(chuàng)建inittab文件。inittab文件是init的初始化配置文件,是系統(tǒng)啟動(dòng)后第一個(gè)訪問的腳本文件,后續(xù)的啟動(dòng)文件是由它指定的。

inittab文件放在根目錄etc目錄下,inittab文件內(nèi)容:

::askfirst:-/bin/sh

::sysinit:/etc/init.d/rcS

(4)創(chuàng)建/etc/init.d文件夾和rcS文件。/etc/init.d/rcS是BusyBox中系統(tǒng)啟動(dòng)時(shí)默認(rèn)的配置腳本。需要啟動(dòng)的進(jìn)程和需要進(jìn)行的設(shè)置可以放到這個(gè)文件里面,并在其中加入必要的初始化工作。

在rcS中添加:

#!/bin/sh

echo“StartingSystem”

hostnameuptech-s3c2410

/bin/mount-a

/bin/mount-tprocproc/proc

/sbin/ifconfigeth0

(5)創(chuàng)建fstab文件。fstab文件是mount文件系統(tǒng)的配置文件。它指定了系統(tǒng)掛載塊設(shè)備和目錄的關(guān)系,需要和實(shí)際的系統(tǒng)相配合。inittab文件放在根目錄etc目錄下,fstab文件內(nèi)容:

none/tmpramfsdefaults00

(6)創(chuàng)建profile文件。這個(gè)文件主要是為系統(tǒng)添加環(huán)境變量。

inittab文件放在根目錄etc目錄下,profile文件內(nèi)容:

(7)?cramfs文件系統(tǒng)映像的制作。cramfs文件系統(tǒng)映像的制作和第9章內(nèi)容一樣。

(8)下載cramfs根文件系統(tǒng)映像到開發(fā)板。下載cramfs根文件系統(tǒng)映像到開發(fā)板和第9章內(nèi)容一樣。

這里要注意的是,因?yàn)镼t的庫(kù)較大,所以根文件系統(tǒng)占用Flash的空間較大,第7章對(duì)Flash的分區(qū)將不合適,要重新分區(qū),將存放根文件系統(tǒng)的區(qū)間分為24MB大小。分區(qū)命令如下:

vivi>bonpart0128k192k2240k26816k:m65536k回車圖13-29重新分區(qū)后的Flash分區(qū)信息圖13-30新制作的cramfs根文件系統(tǒng)啟動(dòng)結(jié)果

(9)測(cè)試新制作的cramfs根文件系統(tǒng)。為了測(cè)試tmp目錄是不是ramfs文件系統(tǒng),可進(jìn)入?/tmp目錄,創(chuàng)建新的目錄是否成功,若能創(chuàng)建,且系統(tǒng)重啟后?/tmp目錄新創(chuàng)建的目錄將不存在,則可證明tmp目錄是ramfs文件系統(tǒng)。具體過程如下:

/#cdtmp

/tmp#mkdirmxl

/tmp#ls圖13-31/tmp是否是ramfs文件系統(tǒng)

2)制作yaffs2根文件系統(tǒng)

因?yàn)?.6.14內(nèi)核配置菜單里沒有yaffs2文件系統(tǒng)選項(xiàng),如果要讓內(nèi)核支持yaffs2文件系統(tǒng)功能,則需要添加如下三方面的內(nèi)容:

(1)?MTD分區(qū)的支持。

(2)給linux-2.6.14內(nèi)核打補(bǔ)丁(添加YAFFS2選項(xiàng))。下載yaffs2.tar.gz源碼包,解壓源碼,并進(jìn)入目錄執(zhí)行:

#./patch-ker.sh/linux-/

(3)添加devfs。

5.測(cè)試Qt2/E程序(采用tmp目錄制作為ramfs文件系統(tǒng)的方法)

當(dāng)系統(tǒng)啟動(dòng)進(jìn)入根文件系統(tǒng)后,進(jìn)入progressbar所在的目錄中:

/#cd/mnt

執(zhí)行:

/mnt#ln–sf/dev/fb/0/dev/fb0

進(jìn)行文件的連接;如果不連接,會(huì)出現(xiàn)如下提示信息:

can’topenframebufferdevice/dev/fb0

can’topenframebufferdevice/dev/fb0

drivercannotconnect

執(zhí)行:

/mnt#exportQTDIR=進(jìn)行Qt目錄環(huán)境變量的設(shè)置;如果不連接,會(huì)出現(xiàn)如下提示信息:

Cannotfindfontdefinitionfile/usr/local/qt-embedded/lib/fonts/fontdir-is$QTDIRsetcorrectly?

最后執(zhí)行progressbar程序:

/mnt#./progr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論