国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Qt的嵌入式GUI開發(fā)平臺的搭建

2010-07-25 08:43:54彭均鍵史步海劉洋
微型電腦應(yīng)用 2010年2期
關(guān)鍵詞:環(huán)境變量開發(fā)板觸摸屏

彭均鍵,史步海,劉洋

0 引言

GUI的廣泛應(yīng)用是當(dāng)今計算機(jī)發(fā)展的重大成就之一,它極大地方便了非專業(yè)用戶的使用。而嵌入式 GUI本身具有著輕型、占用資源少、高性能、高可靠性、便于移植、可配置等特點(diǎn),具有強(qiáng)大的發(fā)展?jié)摿?。作為主流之一的Linux嵌入式系統(tǒng),主要的 GUI開發(fā)應(yīng)用軟件包括 GTK(GIMP Toolkit)、Qt和wxWidgets這3大GUI框架。其中Qt是挪威的 Trolltech公司的旗艦產(chǎn)品,作為跨平臺的應(yīng)用程序框架,是開源左面系統(tǒng)KDE的基石。因此,本文將介紹以此為基礎(chǔ)的嵌入式 GUI開發(fā)平臺的搭建,并且結(jié)合深圳優(yōu)龍公司所提供的FS2410DEV開發(fā)套件進(jìn)行詳細(xì)講解。

1 開發(fā)平臺的搭建

1.1 基于Qt的嵌入式GUI開發(fā)平臺搭建的主要流程

首先在進(jìn)行開發(fā)的PC機(jī)上建立Linux編譯環(huán)境,然后根據(jù)目標(biāo)機(jī)的硬件總類對Qt應(yīng)用程序源碼包進(jìn)行定制,進(jìn)而交叉編譯,生成相關(guān)的函數(shù)庫。接著就是制作根文件系統(tǒng),下載到目標(biāo)板中。至此,平臺的搭建工作就算完成。

1.2 操作系統(tǒng)的選擇與安裝

為了在用于開發(fā)的PC主機(jī)上得到Linux的開發(fā)環(huán)境,我們選擇在Windows操作系統(tǒng)中安裝VMware虛擬機(jī)軟件,再在其中安裝我們需要的Linux操作系統(tǒng)。使用虛擬機(jī)的一大好處是,當(dāng)在Linux因為不熟悉而遇到問題的時候,可以很容易的回到 Windows中尋求解決方案,避免了在雙系統(tǒng)中來回重啟切換的麻煩。虛擬機(jī)的版本盡量選擇當(dāng)前的最新版,因為Linux系統(tǒng)的發(fā)展迅速,如果安裝在舊版的虛擬機(jī)當(dāng)中,不能保證有很好的兼容性,有關(guān)VMware虛擬機(jī)軟件的信息,可以登陸 http://www.vmware.com/進(jìn)行了解。虛擬機(jī)安裝完成之后,就可以開始安裝Linux操作系統(tǒng)了,比較常見的版本有Red Hat Linux、Fedora Core、Ubuntu、SUSE Linux等等,這里我們采用的是Fedora Core 7。

1.3 Qt應(yīng)用開發(fā)軟件的編譯

要進(jìn)行Qt應(yīng)用程序的開發(fā),需要qt-x11-free-3.3.8.tar.gz和qt-embdedded-free-3.3.8.tar.gz,這兩個源碼包,可以登陸http://www.qtopia.org.cn/下載。版本可以自己選擇,但兩者最好保持一致。此外,還需要一個交叉編譯器,這里選用的是arm-linux-gcc-3.4.1.tar.gz編譯器。

在下載完上述3個源碼包后,把它們放在同一個目錄下面就可以開始編譯了。

第一步,首先是解壓安裝包并設(shè)置環(huán)境變量,用到的命令如下:

對于交叉編譯器arm-linux-gcc-3.4.1來說,只需要解壓并設(shè)置環(huán)境變量即可使用,不需要對其進(jìn)行編譯,而上述命令中把解壓出來的 Qt/Embedded目錄改名成"qt-embedded-host",是為了區(qū)分下面要講到的交叉編譯。上述環(huán)境變量的設(shè)置是非常重要的,因為它關(guān)系到能否正確的安裝及編譯這些安裝包。

第二步,下面開始編譯qt-x11安裝包,命令如下:

配置參數(shù)-no-xft是指本次編譯不支持xft,xft主要是為X程序提供了一個客戶端的API,如果不把這一項支持去掉,make的過程中會因為找不到相關(guān)的頭文件而出錯。在這里,我們編譯qt-x11的原因就是為了接下來得到里面的qvfb工具。

第三步,編譯qvfb,命令如下:

cd $QTEDIR/tools/qvfb

make clean

qmake -o Makefile qvfb.pro

make

cp qvfb $QTEDIR/bin/

這里提到的qvfb是為Qt做的一個虛擬frambuffer的應(yīng)用程序,它的最終目的就是把Qt應(yīng)用程序運(yùn)行的結(jié)果顯示在qvfb上(實際中是要通過linux的frambuffer驅(qū)動顯示在目標(biāo)板的 lcd屏上的),并提供鍵盤、鼠標(biāo)的外設(shè)仿真從而提高研發(fā)時的工作效率。

第三步,編譯qt-embedded-host,命令如下:

對于這里的配置選項,可以通過./configure –h命令來查看,根據(jù)自己的需要定制。如果用這一步編譯出來的相關(guān)函數(shù)庫去編譯自己開發(fā)的程序,最后生成的可執(zhí)行文件只能在PC上的 qvfb上運(yùn)行。這就是為什么要在配置中加上 qvfb的支持,以及在第二步里面拷貝qvfb過來的原因了。

第四步,交叉編譯Qt/Embedded,這一步就是要根據(jù)開發(fā)板的硬件配置來定制編譯參數(shù),最終生成合適的函數(shù)庫,再對開發(fā)程序進(jìn)行編譯。下面先退出到一開始存放3個源碼包的目錄,重新解壓qt-embedded-free-3.3.8.tar.gz代碼包并且改名為qt-embedded-target,這個名字表示這個步驟編譯是按照目標(biāo)板定制的,在這里我們需要用到第三步編譯后生成的兩個工具,分別是 moc和 uic,把它們復(fù)制到qt-embedded-target的bin目錄下。

如果缺少這兩個工具將會導(dǎo)致編譯出錯,不能生成我們需要的庫文件。另外,由于我們的優(yōu)龍F(tuán)S2410DEV開發(fā)套件選配的是一個 8寸的液晶觸摸屏,因此在使用 configure命令對makefile進(jìn)行定制的時候要添加觸摸屏支持。但是在開始定制之前,我們需要根據(jù)觸摸屏的種類,對源碼包里面相關(guān)的源文件進(jìn)行修改,這樣才能讓我們編譯出來庫文件支持該觸摸屏。否則,觸摸屏就無法使用了。

需要修改的文件有兩個分別是 qmouselinuxtp_qws.cpp和 qmouselinuxtp_qws.h,這兩個文件所在的目錄是"qt-embedded-target/src/embedded/"。在qmouselinuxtp_qws.cpp文件中查找"/dev/h3600_tsraw"字段并且替換成"/dev/touchscreen/0",這個是開發(fā)板/dev目錄下對應(yīng)的名字;然后在 qmouselinuxtp_qws.h中增加兩個宏定義"#define QT_QWS_IPAQ"和"#define QT_QWS_IPAQ_RAW"。修改完成后,我們就可以開始編譯庫文件了:

定制時的一個embedded參數(shù)表明了我們的目標(biāo)板采用的是arm核心處理器,而最后一個參數(shù)則是添加觸摸屏的支持。在定制的時候可以盡可能的把不需要的支持去掉,因為這樣可以縮減庫文件的大小,節(jié)省開發(fā)板上的存儲空間。編譯順利通過以后,就可以得到 lib目錄下的四個庫文件libqte-mt.so、 libqte-mt.so.3、 libqte-mt.so.3.3、libqte-mt.so.3.3.8,其實前 3個都是指向最后一個文件的連接,我們可以通過file命令來查看libqte-mt.so.3.3.8這個庫文件是否是我們需要的在開發(fā)板上跑的庫。另外,在lib目錄下還有一個fonts文件夾,里面包含Qt程序運(yùn)行時所需要的字體,因此該文件夾也需要添加到根文件系統(tǒng)中。

1.4 燒寫內(nèi)核和根文件系統(tǒng)

要開發(fā)板運(yùn)行起來,需要把內(nèi)核和根文件系統(tǒng)燒寫進(jìn)去。內(nèi)核,可以使用開發(fā)板自帶的,也可以登陸http://download.chinaunix.net/download/0007000/6156.shtml/下載,然后根據(jù)硬件的實際情況來定制,重新編譯該內(nèi)核,再燒寫到開發(fā)板上。采用新版本的內(nèi)核,可以得到一些新的支持,實現(xiàn)更多的功能。對于根文件系統(tǒng),可以開發(fā)板自帶的作為模板,根據(jù)實際情況裁減,增加自己的庫文件與程序,就可以燒寫到開發(fā)板上,并最終運(yùn)行了。

2 基于Qt的嵌入式GUI程序開發(fā)

2.1 開發(fā)Qt程序的一般流程

在所有的千其準(zhǔn)備工作都順利完成以后,就可以開始根據(jù)用戶的需求來開發(fā)各種各樣的嵌入式 GUI程序了,開發(fā)的主要流程如圖1所示。

圖1 Qt程序一般開發(fā)流程

在開發(fā)過程中,其實可以省掉用qvfb工具測試的步驟,因為最終的程序需要交叉編譯才能放到開發(fā)板上運(yùn)行,但對于界面的設(shè)計,通過qvfb工具進(jìn)行調(diào)試更為直觀、方便,避免了因為一些小的調(diào)整而來回?zé)龑懜募到y(tǒng)。在界面的設(shè)計敲定以后,對于一些關(guān)系到其它硬件資源部分的程序的調(diào)試,qvfb工具也就不能滿足了,這時候就需要真正把交叉編譯好的程序下載到開發(fā)板上進(jìn)行運(yùn)行調(diào)試了。

最后值得注意的是,在利用之前的qt-embedded-host和qt-embedded-target里面的函數(shù)庫,對應(yīng)用程序代碼進(jìn)行編譯之前,必須先設(shè)置好PATH、QTDIR、LD_LIBRARY_PATH等相應(yīng)的環(huán)境變量。

2.2 "hello world"實例

下面通過Qt/Embedded本身自帶的"hello world"例子,演示一個Qt界面程序分別在qvfb和開發(fā)板上運(yùn)行的情況。首先是在qvfb上運(yùn)行,先把編譯host程序的環(huán)境變量設(shè)置好,然后進(jìn)入qt-embedded-host中的example目錄,再進(jìn)入hello文件夾,該例子的源程序和可執(zhí)行文件都在這個文件夾中。接著先啟動 qvfb,再運(yùn)行可執(zhí)行文件hello。運(yùn)行后的結(jié)果如圖2所示:

圖2 "hello"在qvfb上運(yùn)行

接下來就是把文件放到跟文件系統(tǒng),燒寫在板上運(yùn)行,這里用到的是qt-embedded-target的可執(zhí)行文件。假設(shè)Qt的交叉編譯庫放在根文件系統(tǒng)的/usr/lib目錄下,程序的可執(zhí)行文件放在了根目錄下,然后就可以用開發(fā)板自帶的DNW工具用命令行登陸到板上,設(shè)置一下環(huán)境變量:

然后就可以運(yùn)行根目錄下的可執(zhí)行文件"hello"了,運(yùn)行結(jié)果如圖3所示。

圖3 "hello"在開發(fā)板上運(yùn)行

3 結(jié)束語

本文講述了如何利用Qt這款GUI開發(fā)軟件,在PC機(jī)上搭建一個嵌入式的 GUI開發(fā)平臺,并且結(jié)合優(yōu)龍公司的FS2410DEV(v6.0)開發(fā)套件給出了實際例子。對于嵌入式GUI開發(fā)來說,雖然應(yīng)用程序的代碼編寫直接關(guān)系到一個工程的成功與否,但在編寫代碼之前,開發(fā)環(huán)境的搭建往往更為重要,只有在有了一個完好的開發(fā)平臺以后,才可以真正開始應(yīng)用程序的開發(fā)。

另外,以上所采用的Qt/Embedded版本是3.3.8,在實際的開發(fā)過程中,會遇到有極為少數(shù)的類,例如"QTextEdit",能夠編譯生成可執(zhí)行文件,并且在qvfb上成功運(yùn)行,但下載到開發(fā)板上卻不能顯示,同時也沒有任何的錯誤信息。通過試驗可以發(fā)現(xiàn),如果采用 Qt/Embedded4.0以上的版本,這些在3.3.8里面不能使用的類,也可以在開發(fā)板上正確顯示。因此,在開發(fā)板的性能允許的情況下,應(yīng)該使用版本較新的Qt軟件來進(jìn)行開發(fā)平臺的搭建,以獲得最好的效果。

本文作者創(chuàng)新點(diǎn):文中以Qt/Embedded這種國內(nèi)外比較流行的嵌入式 GUI軟件作為研究對象,結(jié)合優(yōu)龍公司的FS2410DEV(v6.0)開發(fā)套件,講述了如何搭建一個完整的Qt嵌入式GUI開發(fā)環(huán)境,并列舉了一個具體的運(yùn)行例子。在開發(fā)平臺搭建完成以后,就可以十分便利的讓廣大用戶在此基礎(chǔ)上進(jìn)行各種各樣的嵌入式GUI開發(fā)。

[1] 段鵬,金敏.嵌入式Linux組態(tài)軟件圖形界面設(shè)計實現(xiàn)[J] .微計算機(jī)信息,2008,(5): 50,54-55.

[2] 孫瓊.嵌入式Linux應(yīng)用開發(fā)詳解[M] .北京:人民郵電出版社,2006:107-124.

[3] 尤盈盈,孟利民. 構(gòu)建嵌入式Linux交叉編譯環(huán)境[J] .計算機(jī)與數(shù)字工程,2006,34(6):31-33.

[4] 何劍鋒,鄔文彪等.嵌入式Linux系統(tǒng)的Qt/Embedded圖形界面開發(fā)[J] .電子工程師,2007,33(7):46-48.

[5] 張方輝,王建群.Qt/Embedded在嵌入式Linux上的移植[J] .計算機(jī)技術(shù)與發(fā)展,2006,16(7):65-67.

[6] 陳文星,張輝宜.嵌入式 Linux操作系統(tǒng)的特性[J] .計算機(jī)技術(shù)與發(fā)展,2006,16(3):21-24.

猜你喜歡
環(huán)境變量開發(fā)板觸摸屏
從桌面右鍵菜單調(diào)用環(huán)境變量選項
PLC和觸摸屏在衛(wèi)生間控制系統(tǒng)的應(yīng)用
徹底弄懂Windows 10環(huán)境變量
皮膚“長”出觸摸屏
Microchip最新推出兩款PIC32 Curiosity開發(fā)板
淺析單片機(jī)開發(fā)板的設(shè)計與制作
電子制作(2017年22期)2017-02-02 07:10:14
基于三階段DEA—Malmquist模型的中國省域城鎮(zhèn)化效率測度及其收斂分析
基于三階段DEA—Malmquist模型的中國省域城鎮(zhèn)化效率測度及其收斂分析
Mouser為您呈上開發(fā)關(guān)鍵之STMicroelectronics Nucleo開發(fā)板
Arduino和Atmel發(fā)布Arduino Zero開發(fā)板
通江县| 松桃| 修水县| 确山县| 南安市| 剑河县| 伊春市| 新龙县| 丰镇市| 祁门县| 泰和县| 保康县| 盐源县| 西安市| 阿克陶县| 许昌县| 荆门市| 德州市| 揭西县| 盘山县| 阿勒泰市| 景洪市| 武宁县| 固安县| 两当县| 临邑县| 延边| 赤水市| 白城市| 始兴县| 门源| 衢州市| 定日县| 台州市| 丹棱县| 吉木萨尔县| 万宁市| 和硕县| 馆陶县| 库车县| 梁平县|