盧愛紅
(蘇州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院,蘇州 215009)
基于ARM的Qt/Embedded嵌入式環(huán)境部署
盧愛紅
(蘇州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院,蘇州215009)
基于ARM的嵌入式產(chǎn)品,因CPU具有較高的主頻、豐富的接口、優(yōu)越的可移植性等性能,能適應(yīng)各種嵌入式要求,得到了廣泛的應(yīng)用。在嵌入式終端設(shè)備中,一般要求具有可視化界面。目前幾種常用的嵌入式界面包括:MiniGUI、MicroWindows、DinX、OpenGUI和Qt/Embedded。由Trolltech公司開發(fā)的Qt/Embedded嵌入式界面開發(fā)環(huán)境,是完全面向?qū)ο笏枷氲腃++開發(fā)軟件,提供應(yīng)用程序開發(fā)者藝術(shù)級(jí)圖形界面設(shè)計(jì)所需要的功能,能編程實(shí)現(xiàn)嵌入式開發(fā)板上各種形式接口,如:網(wǎng)口、串口、I2C、USB、I2S等,應(yīng)用靈活,性能優(yōu)越。由于ARM嵌入式產(chǎn)品的硬件軟件資源與個(gè)人電腦相比是有限的,不能提供在ARM產(chǎn)品上直接編輯、編譯圖形用戶界面(GUI)的功能,需要通過交叉編譯環(huán)境,將Linux發(fā)行版本中調(diào)試好的GUI界面部署到ARM產(chǎn)品。Qt/Embedded是為跨平臺(tái)軟件開發(fā)人員設(shè)計(jì)的,提供了支持Linux發(fā)行版本和Windows的Qt集成開發(fā)環(huán)境(IDE)、持續(xù)更新版本的Qt庫,將交叉編譯生成的Qt庫作為IDE的交叉編譯工具鏈,同時(shí)將Qt庫部署到嵌入式開發(fā)板,可以輕松實(shí)現(xiàn)跨平臺(tái)的GUI設(shè)計(jì)。
本設(shè)計(jì)中基于Qt/Embedded進(jìn)行跨平臺(tái)的GUI設(shè)計(jì)的主要任務(wù)是在Linux發(fā)行版本或Windows的Qt集成開發(fā)環(huán)境中編輯設(shè)計(jì)GUI界面,經(jīng)過交叉編譯后,部署到ARM開發(fā)板中運(yùn)行。具體過程為:在Linux發(fā)行版本Ubuntu中安裝Qt集成開發(fā)環(huán)境Qt Creator和交叉編譯工具鏈arm-linux-g++,再交叉編譯生成版本為Qt4.8.1 的Qt庫,在Qt Creator的 “構(gòu)建和運(yùn)行”中指定Qt庫Qt4.8.1的qmake,并將Qt4.8.1部署到ARM開發(fā)板,如此,Qt Creator中編輯的GUI界面程序就可以在ARM開發(fā)板上運(yùn)行,實(shí)現(xiàn)GUI圖形用戶界面的跨平臺(tái)設(shè)計(jì)。
跨平臺(tái)GUI設(shè)計(jì)的流程[1]如圖1所示。
圖1 跨平臺(tái)GUI設(shè)計(jì)的流程
Qt的集成開發(fā)環(huán)境(IDE)采用Qt Creator應(yīng)用程序,可以在Windows平臺(tái)上運(yùn)行,也可以在各種Linux發(fā)行版本中運(yùn)行。開發(fā)環(huán)境基于Ubuntu平臺(tái)時(shí),集成開發(fā)環(huán)境的配置需要使用root權(quán)限。qt-creator-linuxx86-opensource.bin是Qt Creator的安裝程序,通過Ubuntu的samba共享,拷貝到Ubuntu操作系統(tǒng)中,修改安裝程序的權(quán)限為可執(zhí)行,運(yùn)行qt-creator-linux-x86-opensource.bin,自動(dòng)安裝Qt Creator應(yīng)用程序到Ubuntu操作系統(tǒng)中。具體命令如下:#chmod u+x qtcreator-linux-x86-opensource.bin;#./qt-creator-linuxx86-opensource.bin。
安裝Qt Creator之后,新建項(xiàng)目工程仍不具備Application GUI應(yīng)用,需要安裝Qt庫文件Qt4.8.1,并配置Qt編譯環(huán)境qmake。用Ubuntu操作系統(tǒng)的root賬戶安裝Qt Sdk,下載Qt Sdk源代碼包qt-everywhere-opensource-src-4.8.1.tar.gz,將其解壓縮到/usr/local下,#tar zxvf qt-everywhere-opensource-src-4.8.1.tar.gz-C/usr/ local。安裝Qt Sdk依賴的軟件包:libX11-dev、libXextdev、libXtst-dev。執(zhí)行Qt Sdk中的配置文件configure,在/usr/local/qt-everywhere-opensource-src-4.8.1下執(zhí)行#./configure;#make;#make install。至此,Qt Sdk安裝完成,生成的Qt Sdk庫文件在/usr/local/Trolltech/Qt4.8.1/目錄下。再在Qt Creator應(yīng)用程序中配置Qt Sdk,選擇QT creator->tools->option菜單,選擇“構(gòu)建和運(yùn)行”,在Qt版本中指定手動(dòng)設(shè)置的/usr/local/Trolltech/Qt4.8.1/ bin/qmake,并在工具鏈中確認(rèn)檢測到GCC工具鏈。配置完成后,新建Qt工程時(shí),就會(huì)出現(xiàn)Application菜單中的Qt GUI應(yīng)用。
交叉編譯生成能被ARM開發(fā)板的文件系統(tǒng)識(shí)別的Qt GUI界面設(shè)計(jì)的可執(zhí)行文件,需要交叉編譯Qt庫文件Qt4.8.1,并配置 Qt的交叉編譯環(huán)境 armqmake。執(zhí)行Qt Sdk中的配置文件configure,在/usr/local/qt-everywhere-opensource-src-4.8.1下執(zhí)行#cd qteverywhere-opensource-src-4.8.1;#echo yes|./configure -prefix/opt/Qt4.8-opensource-embedded arm-xplatform qws/linux-arm-g++-no-webkit-qt-libtiff-qtlibmng-qt-mouse-tslib-qt-mouse-pc-no-mouse-linuxtp-no-neon。上面的主要參數(shù)含義說明如下:-embedded arm:表示將編譯針對(duì)arm平臺(tái)的embedded版本;-xplatform qws/linux-arm-g++:表示使用arm-linux交叉編譯器進(jìn)行編譯;-qt-mouse-tslib:表示將使用tslib來驅(qū)動(dòng)觸摸屏;-prefix/opt/Qt4.8:表示Qt4.8最終的安裝路徑是/opt/Qt4.8,布置到ARM開發(fā)板時(shí),需要將Qt4.8拷貝到此路徑。執(zhí)行以下命令進(jìn)行編譯并安裝Qt4.8:#make;#make install。安裝完成后,在Qt Creator的“構(gòu)建和運(yùn)行”中指定qmake和交叉編譯工具鏈Linux ICC為arm-linux-g++和arm-linux-gdb。配置完成,新建Qt工程,在“項(xiàng)目”菜單欄可以指定交叉編譯的qmake和 Linux ICC工具鏈。編譯輸出的就是能被ARM開發(fā)板的文件系統(tǒng)識(shí)別的Qt GUI界面設(shè)計(jì)的可執(zhí)行文件。
將Qt4.8部署到ARM開發(fā)板時(shí),根據(jù)Qt4.8庫文件交叉編譯時(shí)-prefix參數(shù)指定的目錄,將Qt4.8庫文件安裝在/opt/Qt4.8目錄下,在Ubuntu上將Qt4.8打包,再解壓到ARM開發(fā)板上的/opt目錄下:@#cd/opt;@# tar xvzf Qt4.8.tgz-C/opt。
要在ARM開發(fā)板上正確運(yùn)行Qt的GUI程序,除了要求安裝Qt4.8庫文件外,還需要編寫一個(gè)腳本setqt4env,這個(gè)腳本用于設(shè)置Qt程序所需要的環(huán)境變量。腳本文件的位置是/bin/setqt4env。輸入以下命令創(chuàng)建 并 編 寫 腳 本/bin/setqt4env:@#vi/bin/setqt4env;@#chmod+x/bin/setqt4env。文件具體要修改的內(nèi)容:export set QTDIR=/opt/Qt4.8;export set QPEDIR=/opt/ Qt4.8;export set QWS_MOUSE_PROTO="TSLIB:/dev/ event1 MouseMan:/dev/mouse0"。
選用主CPU為S3C2440的開發(fā)板,并已燒錄好內(nèi)核和文件系統(tǒng)。開發(fā)環(huán)境選用Ubuntu12.04版本,安裝Qt Creator2.5.1,Qt庫文件選用Qt4.8.1,交叉編譯工具鏈選用4.3.4版本。
以一個(gè)簡單的基于網(wǎng)絡(luò)的服務(wù)器和客戶端信息傳輸?shù)腝t GUI程序?yàn)槔f明Qt的嵌入式開發(fā)環(huán)境部署的流程。一般來說,基于ARM的嵌入式產(chǎn)品,以ARM開發(fā)板作為網(wǎng)絡(luò)的服務(wù)器,負(fù)責(zé)監(jiān)控現(xiàn)場數(shù)據(jù)的采集、存儲(chǔ)和傳輸,以PC機(jī)作為客戶端,客戶端主動(dòng)連接服務(wù)器,并查詢現(xiàn)場數(shù)據(jù),向服務(wù)器發(fā)送執(zhí)行操作的指令。在ARM開發(fā)板上運(yùn)行服務(wù)器程序,需要在ARM開發(fā)板的文件系統(tǒng)中部署Qt的嵌入式環(huán)境,服務(wù)器程序經(jīng)過交叉編譯后,燒錄到ARM開發(fā)板,在PC機(jī)上運(yùn)行的客戶端程序采用非交叉編譯的方法編譯,最終,在服務(wù)器和客戶端設(shè)備保證網(wǎng)絡(luò)連通的基礎(chǔ)上,實(shí)現(xiàn)通信。
Qt提供了完全使用類封裝的socket,用戶不需要接觸底層的各種結(jié)構(gòu)體。socket的類封裝,采用Qt本身的信號(hào)-槽機(jī)制,使編寫的程序更容易理解。在pro文件中添加network模塊QT+=network。Qt使用socket類提供的QTcpServer和QTcpSocket進(jìn)行TCP網(wǎng)絡(luò)編程。QTcpServer類負(fù)責(zé)TCP建立 (監(jiān)聽端口),QTcpSocket負(fù)責(zé)TCP會(huì)話(管理客戶通信數(shù)據(jù))。涉及頭文件包括:監(jiān)聽端口的QTcpServer、客戶連接管理的QTcpSocket、事件驅(qū)動(dòng)的句柄監(jiān)聽類文件QSocketNotifier。
基于面向?qū)ο笏枷氲姆?wù)器端Qt程序流程圖[2]如圖2所示。
圖2 服務(wù)器端Qt程序流程圖
客戶端跟服務(wù)器端的區(qū)別在于不要進(jìn)行端口監(jiān)聽,使用QTcpSocket類的connectToHost函數(shù)連接服務(wù)器即可,其它實(shí)現(xiàn)與服務(wù)端一致。
服務(wù)器端程序交叉編譯后,部署到ARM開發(fā)板,可以與Ubuntu主機(jī)中的客戶端程序?qū)崿F(xiàn)穩(wěn)定流暢的通信。
本設(shè)計(jì)主要實(shí)現(xiàn)了Qt的嵌入式環(huán)境的部署,實(shí)現(xiàn)了Qt的IDE開發(fā)環(huán)境Qt Creator的交叉編譯條件和非交叉編譯條件的配置,ARM開發(fā)板上的文件系統(tǒng)中的Qt庫文件的部署,并在ARM開發(fā)板上用腳本程序setqt4env配置Qt運(yùn)行的環(huán)境變量,最終將交叉編譯后的Qt程序拷貝到ARM開發(fā)板后,能夠順利啟動(dòng)。本設(shè)計(jì)在Qt設(shè)計(jì)環(huán)境中,以網(wǎng)絡(luò)傳輸?shù)姆?wù)器和客戶端程序?yàn)槔?,提供了以完全面向?qū)ο蟮乃枷朐O(shè)計(jì)Qt的GUI程序的思路,實(shí)驗(yàn)證明Qt嵌入式環(huán)境部署的方法能夠很好地適應(yīng)各種Linux開發(fā)環(huán)境和ARM開發(fā)板的版本,具有很好的魯棒性。本系統(tǒng)的設(shè)計(jì)為ARM開發(fā)板的Qt的GUI應(yīng)用提供了較完整的解決方案和系統(tǒng)化的設(shè)計(jì)思路,但是功能相對(duì)簡單,在實(shí)際企業(yè)應(yīng)用中,需在此框架設(shè)計(jì)的基礎(chǔ)上,進(jìn)一步優(yōu)化細(xì)節(jié)。
[1]盧愛紅.基于Qt/Embedded的水務(wù)數(shù)據(jù)監(jiān)測系統(tǒng).計(jì)算機(jī)時(shí)代[J],2014(12):22.
[2]田磊.嵌入式Linux系統(tǒng)中基于QT庫的應(yīng)用程序設(shè)計(jì).實(shí)驗(yàn)室研究與探索[J],2014,33(5):84.
[3]陳敬,向偉.基于嵌入式Linux的QT/Embedded移植與應(yīng)用開發(fā).電腦與信息技術(shù)[J],2013,21(1):57.
[4]吳子平,徐愛鈞.基于Qt/Embedded的嵌入式GUI的研究與構(gòu)建.電腦開發(fā)與應(yīng)用[J],2012,25(1):13.
[5]盧愛紅,劉中原,馮蓉珍.基于ARM的自助出票機(jī)便攜式終端設(shè)計(jì).計(jì)算機(jī)時(shí)代[J],2013(9):28.
[6]MICHAEL Owens.The Definitive Guide to SQLite[M].US:Apress,2006.
Random Sampling;JavaScript;Program Design
A Random Sampling Program Design Based on JavaScript
XU Peng1,XU Qing-yuan2
(1.The 5th Electronics Research Institute of MII,Guangzhou 510610;2.Department of Electronic Communication&Software Engineering,Nanfang Colloge,Sun Yat-sen University,Guangzhou 510970)
1007-1423(2015)33-0054-03
10.3969/j.issn.1007-1423.2015.33.015
盧愛紅(1981-),女,江蘇南通人,講師,在讀博士研究生,研究方向?yàn)闊o線通信、物聯(lián)網(wǎng)應(yīng)用技術(shù)
2015-11-14
2015-11-20
嵌入式ARM產(chǎn)品對(duì)GUI設(shè)計(jì)的質(zhì)量要求日益提高,本設(shè)計(jì)提供在ARM開發(fā)板上部署Qt/Embedded嵌入式環(huán)境的方法,詳細(xì)描述Qt/Embedded的集成開發(fā)環(huán)境的配置過程、Qt的庫文件Qt4.8的交叉編譯和非交叉編譯的方法、ARM開發(fā)板的文件系統(tǒng)環(huán)境配置流程,最后以Qt環(huán)境下網(wǎng)絡(luò)通信的服務(wù)器和客戶端程序的設(shè)計(jì)部署為例,驗(yàn)證該設(shè)計(jì)方法。實(shí)驗(yàn)證明,基于完全面向?qū)ο笏枷氲腝t嵌入式GUI界面嵌入式環(huán)境部署的可實(shí)現(xiàn)性和優(yōu)越性,為ARM嵌入式產(chǎn)品的界面設(shè)計(jì)提供了一種有競爭力的解決方案。
Qt/Embedded;GUI;ARM;嵌入式環(huán)境
In daily life,one or more data is often needed to be randomly selected from a certain amount of data.Introduces a method to design a random sampling program based on JavaScript.The program flow chart is designed,analyzes the key points of programing,by an example,demonstrates the implementation effect of the random sampling program.