闡述了Linux在嵌入式系統(tǒng)上的實(shí)現(xiàn)方法,針對(duì)嵌入式圈形用戶(hù)界面QtE進(jìn)行了簡(jiǎn)要介紹,并簡(jiǎn)單描述了Linux操作平臺(tái)的建立,著重分析了qtopia移植到S3C2410的過(guò)程。
1、Qt/Embedded簡(jiǎn)介
??? Qt/Embedded(簡(jiǎn)稱(chēng)QtE)是一個(gè)專(zhuān)門(mén)為嵌入式系統(tǒng)設(shè)計(jì)的圖形用戶(hù)界面(Graphical Uset Interface簡(jiǎn)稱(chēng)Gin)的工具包。Qt是挪成Trolltech軟件公司的產(chǎn)品,它為各種系統(tǒng)提供圖形用戶(hù)界面的工具包,QtE是嵌入式版本。
??? QtE擁有同Qt一樣的API,開(kāi)發(fā)者只需了解Qt的API,不用關(guān)心程序所用到的系統(tǒng)和平臺(tái)。QtE是模塊化和可剪裁的,它的結(jié)構(gòu)很好的優(yōu)化了內(nèi)存和資源的利用。同時(shí)它擁有自己的窗口系統(tǒng),可以直接對(duì)底層的圖形驅(qū)動(dòng)進(jìn)行操作。QtE可以應(yīng)用在所有主流平臺(tái)和CPU上,支持所有主流的嵌入式Linux,對(duì)于在Linux上的QtE的基本要求只不過(guò)是Frame Buffer設(shè)備和一個(gè)C++編譯器。而且QtE還提供壓縮字體俄格式,即使在很小的內(nèi)存中,也可以提供一流的字體支持,支持多種的硬件和軟件的輸入,支持Unicode、反鋸齒文本和Alpha混合的圖片。
2 Qtopia簡(jiǎn)介
??? Qtopia是Trolltech公司在QtE的基礎(chǔ)上開(kāi)發(fā)的一個(gè)應(yīng)用環(huán)境,這個(gè)應(yīng)用環(huán)境特為移動(dòng)和手持設(shè)備開(kāi)發(fā),其特點(diǎn)就是擁有完全的、美觀(guān)的GUI,同時(shí)它也提供可上百個(gè)應(yīng)用程序用于管理用戶(hù)信息、辦公、娛樂(lè)、Internet交流等。
??? Qtopia是一種全方位的應(yīng)用開(kāi)發(fā)平臺(tái),它可用于基于嵌入式linux的PDA,移動(dòng)電話(huà),web pads,以及其他移動(dòng)計(jì)算設(shè)備。Qtopia構(gòu)建于Qt/Embedded之上,是專(zhuān)為基于linux的消費(fèi)電子產(chǎn)品提供和創(chuàng)建圖形用戶(hù)界面而設(shè)計(jì)的。常見(jiàn)的有兩種版本:
?? Qtopia Phone版:專(zhuān)為基于linux的智能電話(huà)和多功能電話(huà)設(shè)計(jì)。
???Qtopia PDA版:專(zhuān)為基于linux的PDA設(shè)計(jì) ;
?? Qtopia的特點(diǎn)是,視窗操作系統(tǒng);同l步窗口;開(kāi)發(fā)環(huán)境;本地化支持;游戲和多媒體.PIM應(yīng)用程輸入法;個(gè)性化選項(xiàng);intemet應(yīng)用程序;java集成;無(wú)線(xiàn)支持。
3、Ot/Embedded開(kāi)發(fā)
?? QT/Embedded通過(guò)Qt API與LinuxI/O設(shè)施直接交互,成為嵌入式linux端口。同Qt/Xl 1相比,QT/Embedded很節(jié)省內(nèi)存,其不需要一個(gè)X服務(wù)器或是Xlib庫(kù),它在底層擯棄了xⅡb,采用framebuffer(幀緩存)作為底層圖形接口。
??? 同時(shí), 將外部輸入設(shè)備抽象為keyboard和mouse輸入事件。 QT/Embedded的應(yīng)用程序可以直接寫(xiě)內(nèi)核緩沖幀,這可避免開(kāi)發(fā)者使用繁瑣的Xlib/Server系統(tǒng)。
??? 嵌入式軟件開(kāi)發(fā)通常都采用交叉編譯的方式進(jìn)行,基于Qt/Embedded;fIJ Qtopia的GUI應(yīng)用開(kāi)發(fā)也采用這樣的模式。先在宿主機(jī)上調(diào)試應(yīng)用程序,調(diào)試通過(guò)后,經(jīng)過(guò)j交叉編譯移植到目標(biāo)板上。
Qt/Embedded直接寫(xiě)入幀緩存,在宿主機(jī)上則是通過(guò)q v f b (v i r t u a 1 .framebuffer)來(lái)模擬幀緩存。qvfb是x窗J口用來(lái)運(yùn)行和測(cè)試Qtopia應(yīng)用程序的系統(tǒng)程序。qvfb使用了共享內(nèi)存存儲(chǔ)區(qū)域(虛擬的幀緩存)來(lái)模擬幀緩存并且在一個(gè)窗口中模擬一個(gè)應(yīng)用程序來(lái)顯示幀緩存,顯f示的區(qū)域被周期性的改變和更新。
4、建立Linux操作平臺(tái)
4.1安裝交叉編譯器
??? 由于Linux內(nèi)核對(duì)交叉編譯器有很大的依賴(lài),所以不同版本的Linux需要相應(yīng)的編譯器,在這里所用的是Redhat 9,內(nèi)核是2.4的,用cross一2.95.3是可以的。利用SSH工具~gWindows下的交叉編譯器的安裝包拷到Linux的/usr/local/arm下,如果沒(méi)有則需要新逢目錄。進(jìn)入該目錄輸入以下命令進(jìn)行加壓安裝:
# tar jxvf croSS 2.95.3.tar.bz2
解壓完后新建路徑,輸入:
# export PATH=$PATH :/usr/
local/arm/2.95.3/bin
因?yàn)榫幾gQT需要更高版本的編譯器,所以這里再安裝cross一3.3.2方法同上。
4.2編譯內(nèi)核
??? 在根目錄下新建$3C2410,把內(nèi)核源碼拷到該目錄下,解壓,生成目錄2。4.18一rmk7,進(jìn)入該目錄,配置內(nèi)核,一般用的較多的是菜單配置,輸入:
# make menuconfig
配置完以后選擇默認(rèn)保存,輸入以下命令進(jìn)行編譯:
# make dep (建立依賴(lài)關(guān)系,如果要重新編譯,則需用make clean命令)
# make zImage
編譯完后在2.4.18-rmk7/arch/arm/boot下生成zlmage鏡像文件,燒寫(xiě)到板子Flash的1分區(qū)中。
4.3 Bootloader
Bootloader簡(jiǎn)單的說(shuō)就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一小段程序,通過(guò)這小段程序我們可以初始化硬件設(shè)備,建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),其主要任務(wù)是將內(nèi)核映像從硬盤(pán)讀到ARM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即開(kāi)始啟動(dòng)操作系統(tǒng)。在這里所用的Bootloader是U—boot-1.1.4。
把U boot—1.1.4.tar.bz2拷到根目錄的S3C2410中,解壓后生成u—boot一1.1.4目錄,進(jìn)入該目錄,進(jìn)行編譯。輸入:
# make smdk2410 config
# make cross—C0MPILE=armlinux一(由于已經(jīng)能夠生成路徑,如果編譯不通則輸入完整路徑:m a k ecross COMPILE=/usr/local/arm/bin/arm—linux )
生成U boot.bin文件燒制到ARM板子里。
5、移植qtopia
5.I所用資源
硬件:恒豐HFRK 24i 0B,三星$3C2410 ARM 920t
軟件:cross-2.95.3.tar.bz2
cross-3.3.2.切r.bz2
Linux 2.4.18.tar.gz
qt—xl1—2.3.2.tar.gz
qt—embedded一2.3.7.tar.gz
qtopia free一1.7.0.tar.gz
tmake一1.11.tar.gz
jpegsrc.v6b.tar.gz
e2fsprogs 1.35.tar.gz
5.2移植qtopia
以上創(chuàng)建了Linux操作平臺(tái),可以移植QT了,首先在根目錄下新建一個(gè)目錄這里假設(shè)為Q T,可以利用S S H 遠(yuǎn)實(shí)現(xiàn)windows和Linux下的文件按共享,上傳和下載資料和文件,假設(shè)所用源文件已經(jīng)下載flwindows中,從SSH拷貝fIJLinux/Qt下,在Qt下建立兩個(gè)新目錄。
mkdir qt——x86
mkdir qt—am
qt—x86存放宿主機(jī)上虛擬Qt環(huán)境,qt—arm存放目標(biāo)板Qt環(huán)境。
5.2.1宿主機(jī)移植所需工具及環(huán)境變量聲明
①Tmake一1.1l 生成Makefile文件環(huán)境變量:T M A K E D I R /TMAKEPATH/PATH
②Qt—xl1—2.3.2 Qvfb一虛擬幀緩存工具器
Uic一用戶(hù)界面編輯器
Designer Qt圖形設(shè)計(jì)器
環(huán)境變量:LD— LIBRARY— PATH一/PATH
③Qt—embedded一2.3.7 Qt庫(kù)支持libqte.so
環(huán)境變量:Q T E D I R /LD— — LIBRARY— — PATH— — /PATH
④Qtopia free一1.7.0 應(yīng)用程序開(kāi)發(fā)包、桌面環(huán)境
環(huán)境變量:Q P E D I R /LD— LIBRARY— PATH/PATH
5.2.2建立宿主機(jī)上Qt虛擬環(huán)境
(1)解壓qt—xl1 2.3.2.tar.gZ并將生成的qt一2.3.2一xll文件改名為qt
cd /Qt/qt——x86
tar zxvf../qt—xl 1-2.3.2.tar.gz
mv qt-2.3.2 qt
解壓qt-embedded 2.3.7.tar.gz并將生成的文件改名為qte
tar zxvf ../ qt-embedded 2.3.7.tar.gz
mv qt-embedded一2.3.7 qte
解壓qtopia—fre 1.7.0.tar.gz,并改名為qpe
tar zxvf ../qtopia free—1.7.0.切r.gz
mv qtopia—free一1.7.0 qtp
解壓tmake-1.11.tar.gz,并改名為tmake
tar zxvf../tmake-1.11.切r.gz
mv tmake 1.I1 tmake
交叉編譯jpegsrc.v6b.tar.gz得到libuuid
tar zxvf../jpegsrc.v6b.tar.gz. /configure
m ake
make install
交叉編譯e2fsprogs一1.35.tar.gz,生成libjpeg.8o
. /configure
make
得到libtools程序
. /configure
修改生成的Makefle文件:
prefix = /arm——target/qte
C C /usr/local/arm/2.95.3/bin/arm—linux-gcc
AR= /usr/local/arm/2.95.3/bin/arm—linux -ar rc
AR2= /usr/local/arm/2.95.3/bin/arm—linux-ranlib
cp jconfig.doc jconfig.h
mkdir -p /arm——targetqte/man/man1
make
cpⅡbjpeg.so/usr/local/arm /2.95.3/arm linux/lib
(2)設(shè)置環(huán)境變量
cd /Qt/qt——x86
export QTDIR=$PWD/qt
export QTEDIR=$PWD/qte
export QPEDIR--$PWD/qpe
export PATH=$QPEDIR/bin:$QTEDIR/bin:$QTDIR/bin:$PATH
expert PATH=$QTEDIR/tmake/bin:$PATH
export TMAKEPATH=QTEDIR/tmake/lib/qws/linux-generic-g++
e x P o r tLD LIBRARY—PATH=$QPEDIR/lib:$QTEDIR/lib:
$QTDIR/lib:$LD—LIBRARY—PATH
(3)編譯
① qt
cd$QTDIR
ls
運(yùn)行configure文件,中間提示,輸入yes即可,可用以下命令跳過(guò)echo yes I./configure(后面可以加一些參數(shù))
make
生成運(yùn)行qvfb的tools
make—C tools/qvfb
mv tools/qvfb/qvfb bin
cp bin/uic$QTEDIR/bin
cd ..
② qte
export QTDIR=$QTEDIR
export QTEDIR=$QTEDIR
export QPEDIR=$QPEDIR
cd $QTEDIR
cp $QPEDIR/src/qt/qconfig—qpe.h
src/tools/
echo yes I./configure-qconfig qpe
— — system——jpeg ——gif——qvfb ——thread
depths\ 4,8,16,32
make sub-src
③ qpe
expo rt QTDIR=$REAL—QTEDIR
expo rt QTEDIR=$REAL—QTEDIR
expo rt QPEDIR=$REAL—QPEDIR
cd $QPEDIR/sre
./configure
make
以上就完成宿主機(jī)上的虛擬環(huán)境構(gòu)建,啟動(dòng)一下虛擬幀緩存,在sheH里運(yùn)行:
cd QTDIR/bin
. /qvfb depth 32 width 640一height 480
就可以調(diào)出xl l下虛擬鎮(zhèn)緩沖的設(shè)備。其中一depth32參數(shù)表示顏色深度為32位,一width 640一height 480參數(shù)表示鎮(zhèn)緩沖分辨率為640(寬) 480(高)。
. /qpe
5.2.3移植
cd/Qt/qt-arm
tar zxvf../qt-embedded一2.3.7.tar.gz
mv qt-2.3.7 qt
tar zxvf ../qtopia—free 1.7.0.tar.gz
mv qtopia-fre-1.7.0 qpe
tar zxvf ../tmake-1.11.tar.gz
mv tmake-1.11 tmake
export QTDIR=$PWD/at
export QPEDIR=$PW D/qpe
expo rt TMAKEDIR=$PW D/tmake
e x P o r t TM AKEPATH=$TMAKEDIR/lib/aws/linux arm—g++
export PATH=SQTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
e x P o r t? LD LIBRARY— PATH=$QPEDIR/lib:$QEDIR/lib:$LD LIBRARY—PATH
cD bin/uic $REAL—QTEDIR/bin
cd SQTDIR
cp$QPEDIR/src/qt/qconfig qpe.hsrc/tools/
make sub-src
移植QT中的相關(guān)設(shè)備接El、鼠標(biāo)、觸摸屏、移植qtopia相關(guān)設(shè)備接口。
編譯Qtopia
cd/Qt/qt——arm
expo rt QTDIR=$PWD/qte
expo rt QPEDIR二$PWD/(Ⅱ)e
expo rt
PATH=$QPEDIR/bin:$QTDIR/bin:/home/mic/control—project/daq—roodule/tools/bin:$PATH
export PATH $QTDIR/tmake/bin:$PATH
export TMAKEPATH=$QTDIR/tmake/lib/qws/linux—arm—g++
e x P o r tLD— LIBRARY PATH:$QPEDIR/lib:$QTDIR/lib:$LD—LIBRARY—PATH
cd$QPEDIR/src
. /configure
make
進(jìn)人qtopia—free一1.7.0目錄下,將目錄apps,bin,etc,il8n,lib,pics,plugin拷貝到根文件系統(tǒng)的/qtdemo下,增加環(huán)境變量
export QTDIR-/qtdemo
將qt embedded和qtopia的庫(kù)拷貝到/qtdemo/lib目錄下,將字體目錄fonts拷貝到/qtdemo/lib目錄下,就可以運(yùn)行/qtdemo/bin目錄下的qpe。
6 結(jié)束語(yǔ)
??? 嵌入式系統(tǒng)已經(jīng),一泛的應(yīng)用到電子產(chǎn)業(yè)中,它的開(kāi)源、模塊化和可剪裁極大的節(jié)l省了資源,QtE作為嵌入式GUI也倍受青!睞,它不但延續(xù)了Qt桌面系統(tǒng)的所有功能,而且節(jié)省空間和內(nèi)存。qtopia專(zhuān)為linux的消費(fèi)電子產(chǎn)品提供和創(chuàng)建圖形用戶(hù)界面而設(shè)計(jì)的,具有美觀(guān)的GUI。本文主要介紹了它移植到S3C2410-ARM9開(kāi)發(fā)板的過(guò)程,利用宿主機(jī)搭建的虛擬環(huán)境,再對(duì)qtopia進(jìn)行編譯,完成到三星HFRK2410 j的移植。Qtopia良好的圖形用戶(hù)界面和它緊湊的模塊化結(jié)構(gòu)在電子產(chǎn)品界一定會(huì)得到迅速的發(fā)展。
評(píng)論
查看更多