• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Qt/Embedded在S3C2440平臺上的移植與開發(fā)*

      2010-03-14 09:04:34代少升
      電視技術(shù) 2010年10期
      關(guān)鍵詞:鍵入源碼應(yīng)用程序

      唐 浩,代少升

      (重慶郵電大學(xué) 信號與信息處理重點(diǎn)實(shí)驗(yàn)室,重慶 400065)

      1 引言

      21世紀(jì)是后計(jì)算機(jī)時(shí)代,人們每天都會接觸很多的嵌入式產(chǎn)品,手機(jī)、PDA等手持式信息設(shè)備發(fā)展迅速。這些設(shè)備的關(guān)鍵在于人機(jī)交互技術(shù)的體現(xiàn),所以一個(gè)十分友好的圖形用戶界面(GUI)是必不可少的。

      目前嵌入式Linux的主流GUI系統(tǒng)主要有MiniGUI,MicroWindows,OpenGUI,Qt/Embedded 等[1],這些 GUI 在接口定義、體系結(jié)構(gòu)、功能特性等方面存在很大差別。MiniGUI具有良好的軟件架構(gòu),通過抽象層將其上層和底層操作系統(tǒng)隔離開來,開發(fā)的重點(diǎn)在于窗口系統(tǒng),但由于支持力量比較薄弱,其維護(hù)和再開發(fā)成本不可預(yù)計(jì)。MicroWindows以較小的資源消耗、通用的幀緩沖(FrameBuffer)技術(shù)、靈活的分層設(shè)計(jì)模式和豐富的API支持等特點(diǎn)獲得廣泛的關(guān)注,但其圖形引擎無任何硬件加速能力,算法低效,代碼質(zhì)量較差。OpenGUI基于用匯編語言實(shí)現(xiàn)的X86圖形內(nèi)核,提供了高層的C/C++圖形/窗口接口,它的資源消耗小,但可移植性差,不支持多進(jìn)程。

      Qt/Embedded[2]是一個(gè)多平臺的C++圖形用戶界面應(yīng)用程序框架,易擴(kuò)展,可移植性好,支持多個(gè)GUI平臺的交互開發(fā)。從個(gè)人消費(fèi)電子到工業(yè)控制設(shè)備,Qt/Embedded被廣泛地應(yīng)用于各種嵌入式產(chǎn)品和設(shè)備中。

      2 Qt/Embedded的移植與開發(fā)

      2.1 總體流程

      Qt/Embedded是著名的Qt庫開發(fā)商Trolletch公司(2008年6月被諾基亞公司收購)開發(fā)的圖形化界面開發(fā)工具Qt的嵌入式版本。Qt/Embedded采用Server/Client結(jié)構(gòu),延續(xù)了Qt在X上的強(qiáng)大功能,在底層摒棄了Xlib,僅采用FrameBuffer作為底層圖形接口。同時(shí)將外部輸入設(shè)備抽象為keyboard和mouse輸入事件,底層接口支持鍵盤、鼠標(biāo)、觸摸屏以及用戶自定義的設(shè)備等[3]。

      Qt/Embedded的類庫完全采用C++封裝,控件資源豐富,可移植性較好,開放的源碼使得開發(fā)人員可以在GPL許可協(xié)議下自由地進(jìn)行嵌入式GUI應(yīng)用程序的移植與開發(fā)。Qt/Embedded移植與開發(fā)總體流程如圖1所示。

      2.2 系統(tǒng)平臺的介紹

      筆者采用廣州友善之臂公司設(shè)計(jì)的Micro2440開發(fā)板作為硬件平臺,該開發(fā)板由核心板與底板組成。核心板上集成了三星公司400MHz的微處理器S3C2440,64Mbyte的SDRAM,64Mbyte NAND Flash以及2Mbyte NOR Flash。底板上則集成了一些常規(guī)外設(shè)接口。在軟件方面,使用Linux-2.6.13穩(wěn)定內(nèi)核的操作系統(tǒng),根文件系統(tǒng)為缺省安裝的文件系統(tǒng),采用基于arm-linuxgcc-3.4.1的函數(shù)庫。

      整個(gè)系統(tǒng)軟件由引導(dǎo)裝載程序(U-Boot)、設(shè)備驅(qū)動(dòng)(包括幀緩沖)、嵌入式 Linux內(nèi)核、文件系統(tǒng)(YAFFS)以及基于 Qt/Embedded的應(yīng)用程序組成[4]。系統(tǒng)平臺結(jié)構(gòu)如圖2所示。

      3 Qt/Embedded開發(fā)環(huán)境的搭建及其移植[5-7]

      搭建編譯平臺是嵌入式GUI的必要工作。Qt/Embedded的軟件開發(fā)環(huán)境主要包括嵌入式Linux操作系統(tǒng)、軟件開發(fā)工具鏈以及相關(guān)源碼包。本文的開發(fā)環(huán)境是在個(gè)人PC上安裝VMware Workstation 6.5.1和Red Hat Linux 9.0操作系統(tǒng),內(nèi)核版本是2.6.13,與目標(biāo)板上運(yùn)行的版本一致。采用的交叉編譯器為armlinux-gcc-3.4.1,源碼包為qt-embedded-linux-opensource-src-4.5.3和 qt-x11-opensource-src-4.5.3。

      3.1 X11虛擬環(huán)境搭建

      在PC機(jī)上編譯好的qt-x11可以生成Qt開發(fā)工具,如用戶界面編譯器(UIC)與虛擬幀緩沖服務(wù)器(QVFB),作為交叉編譯環(huán)境的支持。虛擬環(huán)境搭建過程如下:

      1)在PC平臺文件系統(tǒng)中建立工具包目錄,將源碼包分別用tar命令解壓并放置其中。

      2)進(jìn)入qt-x11目錄,在終端鍵入./configure命令對qt-x11安裝環(huán)境進(jìn)行配置,根據(jù)源碼包配置選項(xiàng)和系統(tǒng)情況生成makefile文件,為make做準(zhǔn)備。

      3)配置完成以后,鍵入make命令,從makefile中讀取指令進(jìn)行編譯,用來創(chuàng)建庫文件,編譯例程和指南,需要等待一段比較長的時(shí)間。

      4)編譯完成之后,進(jìn)入tools目錄下的qvfb目錄,鍵入make對其進(jìn)行編譯。最后回到qt-x11目錄,鍵入make install進(jìn)行安裝。

      5)make install完成之后,會在/usr/local目錄下生成一個(gè)Trolltech目錄,這就是qt-x11-opensource-src-4.5.3安裝后所在目錄。將/usr/local/qt/qt-x11-opensource-src-4.5.3/tools/qvfb目錄下的qvfb相關(guān)文件拷貝到/usr/local/Trolltech/Qt-4.5.3/bin目錄下。至此X11環(huán)境就搭建好了。

      3.2 交叉編譯環(huán)境實(shí)現(xiàn)

      通過qt-x11提供的庫和開發(fā)工具,可以進(jìn)行Qt應(yīng)用程序的開發(fā),但是若需要在目標(biāo)板上運(yùn)行該程序,則還需使用qt-embedded庫對該程序進(jìn)行交叉編譯,才能得到在ARM平臺上運(yùn)行的可執(zhí)行程序。這就需要搭建qt-embedded交叉編譯環(huán)境,其實(shí)現(xiàn)過程如下:

      1)安裝交叉編譯器。工具包目錄中鍵入tar xvzf arm-linux-gcc-3.4.1.tgz-C/,執(zhí)行該命令將arm-linuxgcc安裝到/usr/local/arm/3.4.1。然后設(shè)置路徑變量,修改/etc/profile文件,在最后一行添加export PATH=/usr/local/arm/3.4.1/bin:$PATH。

      2)進(jìn)入qt-embedded目錄,鍵入./configure-embedded arm-xplatform qws/linux-arm-g++-depths 4,8,16,32,配置參數(shù)指定 ARM 平臺,并支持 4,8,16,32 位的顯示顏色深度。

      3)使用make命令進(jìn)行編譯,用來生成qt-embedded庫。

      4)使用make install進(jìn)行安裝。完成后,qt-embe-dded被安裝在/usr/local/Trolltech/QtEmbedded-4.5.3目錄下。

      3.3 移植Qt/Embedded到S3C2440

      Qt/Embedded應(yīng)用程序在S3C2440平臺上的運(yùn)行需要有qt-embedded庫支持。在開發(fā)板的根目錄下新建如下目錄:

      /usr/local/Trolltech/QtEmbedded-4.5.3/bin//安裝運(yùn)行庫文件

      /usr/local/Trolltech/QtEmbedded-4.5.3/lib/fonts//安裝字體庫文件

      把PC上對應(yīng)目錄下交叉編譯后生成的qtembedded庫文件和字體文件,分別拷貝到上述目錄中。注意,運(yùn)行庫文件一般只拷貝libQtGui.so.4,libts-0.0.so.0,libQtCore.so.4,libQtNetwork.so.4,如果文件是到共享庫的鏈接文件,則把該共享庫也要拷貝上,字體庫則需拷貝一種就可以了。設(shè)置開發(fā)板環(huán)境變量:

      export QTDIR=/usr/local/Trolltech/QtEmbbed-4.5.3

      export QPEDIR=/usr/local/Trolltech/QtEmbedded-4.5.3

      export PATH=$QTDIR/bin:$PATH

      export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH

      4 Qt/Embedded應(yīng)用程序開發(fā)實(shí)例

      Qt是一個(gè)創(chuàng)建GUI程序的C++類庫,編寫Qt應(yīng)用程序的主要工作是基于已有的Qt類去編寫用戶類。筆者以發(fā)布一個(gè)圖片瀏覽工具(ImgViewer)為例,簡單地介紹Qt/Embedded應(yīng)用程序的開發(fā)過程。

      4.1 Qt/Embedded開發(fā)工具

      強(qiáng)大的工具支持是進(jìn)行Qt/Embedded圖形用戶開發(fā)的優(yōu)勢所在。除了前面提到的QVFB和UIC工具外,Qt designer(圖形設(shè)計(jì)器)工具為GUI窗口組建,提供了一種可視化的設(shè)計(jì)能力,非常方便高效;qmake工具能為不同平臺的開發(fā)項(xiàng)目創(chuàng)建makefile配置文件;編程助手assistant能隨時(shí)隨地給編程帶來幫助。

      筆者采用Qdevelop4.4.3來編寫Qte程序。Qdevelop是一個(gè)跨平臺集成開發(fā)環(huán)境,完全致力于Qt4的開發(fā)。

      4.2 Qt/Embedded程序文件編寫

      Qt/Embedded源程序一般應(yīng)該包含以下文件:1個(gè)主程序文件(main.cpp)、多個(gè)源程序文件(source.cpp)與對應(yīng)的頭文件(source.h)以及用來生成makefile的項(xiàng)目文件(.pro)。在本次開發(fā)中,并沒有使用Qt designer來進(jìn)行可視化窗口設(shè)計(jì),完全借助Qdevelop純代碼進(jìn)行編寫,這樣能更好地體會Qt/Embedded GUI設(shè)計(jì)的精髓所在。基本操作步驟如下:

      1)編寫頭文件imgviewer.h。在Qdevelop中新建工程imgviewer.pro,并添加頭文件imgviewer.h。頭文件定義了實(shí)例中需要用到的各種窗體控件,包括菜單(QMenu)、工具條(QtoolBar)、動(dòng)作(Qaction)以及各種操作的槽函數(shù)(slots)。

      2)編寫源文件imgviewer.cpp。源文件中設(shè)置了字體,規(guī)定了窗口屬性,并且創(chuàng)建了動(dòng)作、菜單和工具條等一系列的實(shí)現(xiàn)函數(shù)。這里會接觸到Qt最重要的特性:信號與槽機(jī)制(signal&slot)。信號與槽機(jī)制提供了任意兩個(gè)Qt對象之間的通信機(jī)制,信號會在某個(gè)特定情況或動(dòng)作下被觸發(fā),槽是用于接收并處理信號的函數(shù)。其常用格式為 bool QObject::connect(Object1,SIGNAL(signal1),Object2,SLOT(slot)),以及與這個(gè)函數(shù)對應(yīng)的disconnect函數(shù),可以將信號和槽斷開連接。下面介紹一段簡單的程序,該程序設(shè)置了打開單個(gè)文件這一動(dòng)作:

      openFileAction=new QAction(QIcon(":/images/openfile.png"),tr("Open"),this);//創(chuàng)建一個(gè) Open 動(dòng)作,并調(diào)用openfile.png圖標(biāo),圖標(biāo)位于資源庫images文件夾下。

      openFileAction->setStatusTip(tr("Open File"));//設(shè)置該圖標(biāo)的狀態(tài)提示為"Open File"。

      connect(openFile-Action,SIGNAL(triggered()),this,SLOT(slotOpenFile()));//連接信號與槽,觸發(fā) openFileAction這一動(dòng)作時(shí),將進(jìn)行slotOpenFile()這一過程的處理。

      3)編寫主函數(shù)main.cpp。Qt/Embedded應(yīng)用程序應(yīng)該包含一個(gè)主函數(shù),該函數(shù)是應(yīng)用程序的入口點(diǎn)。結(jié)合imgviewer.h和imgviewer.cpp,可以看到所有應(yīng)用程序開發(fā)主函數(shù)main.cpp編寫的框架結(jié)構(gòu):

      #include"imgviewer.h"

      #include

      //QApplication包含了Qt圖形化應(yīng)用程序的各種資源、基本設(shè)置、控制流以及事件處理等。若是Qt的非圖形化應(yīng)用程序,則需包含

      4)生成makefile文件及編譯鏈接生成可執(zhí)行文件。借助qmake工具可以生成makefile文件,實(shí)現(xiàn)過程為:qmake-o Makefile imgviewer.pro。然后在命令行下輸入make命令對整個(gè)工程進(jìn)行編譯,就能生成X86架構(gòu)的二進(jìn)制文件,這便是QVFB能執(zhí)行的應(yīng)用程序。如果再用Qt/Embedded的庫對整個(gè)工程進(jìn)行交叉編譯鏈接,就能得到在S3C2440平臺上運(yùn)行的可執(zhí)行文件。

      4.3 結(jié)果發(fā)布及測試

      將交叉編譯好的可執(zhí)行程序imgviewer拷貝進(jìn)開發(fā)板/usr/local/Trolltech/QtEmbedded-4.5.3/bin目錄下,在終端下鍵入./imgviewer,即可運(yùn)行程序。運(yùn)行結(jié)果見圖3。

      5 小結(jié)

      嵌入式技術(shù)的關(guān)鍵在于人機(jī)交互技術(shù)的體現(xiàn),基于Qt/Embedded的GUI為嵌入式Linux系統(tǒng)用戶提供了良好的使用和交互環(huán)境。筆者通過一個(gè)簡單的應(yīng)用程序,對Qt/Embedded在S3C2440平臺下的移植與開發(fā)進(jìn)行了詳細(xì)介紹,為類似的GUI程序開發(fā)提供了一個(gè)參考。

      [1]AHN S H,SUL D M,CHOI S C,et al.Implementation of lightweight graphic library builder for embedded system[C]//Proc.The 8th International Conference on Advanced Communication Technology.Phoenix,USA: IEEE Press,2006:166-168.

      [2]Trolltech.Online reference documentation[EB/OL].[2010-05-05].http://doc.trolltech.com/.

      [3]梅寬勤.基于Qt/Embedded的圖像用戶界面移植[D].上海:復(fù)旦大學(xué),2007.

      [4]趙拯宇,張雪英,金剛.Qt/Embedded和Qtopia在OMAP5912平臺上的移植及應(yīng)用[J]. 儀器儀表用戶,2009,16(2):108-110.

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

      [6]成潔,盧紫.Linux窗口程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2008.

      [7]BLANCHETTE J,SUMMERFIELD M.C++GUIQt 4編程[M].2版.閆鋒欣,曾泉人,張志強(qiáng),譯.北京:電子工業(yè)出版社,2008.

      猜你喜歡
      鍵入源碼應(yīng)用程序
      基于網(wǎng)頁源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲代碼生成方法
      基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測方法
      企業(yè)如何保護(hù)源碼
      MATLAB 在導(dǎo)數(shù)和積分中的應(yīng)用
      刪除Win10中自帶的應(yīng)用程序
      基于數(shù)據(jù)結(jié)構(gòu)教輔系統(tǒng)的實(shí)驗(yàn)課程改革
      Netstat命令使用實(shí)例解析
      河南科技(2013年6期)2013-11-07 07:45:06
      關(guān)閉應(yīng)用程序更新提醒
      電腦迷(2012年15期)2012-04-29 17:09:47
      三星電子將開設(shè)應(yīng)用程序下載商店
      微軟軟件商店開始接受應(yīng)用程序
      沙河市| 桐梓县| 海晏县| 武鸣县| 红河县| 原阳县| 平武县| 涟水县| 邻水| 宣化县| 贵定县| 方正县| 旺苍县| 荣成市| 新兴县| 建湖县| 外汇| 兖州市| 南丹县| 洛扎县| 邢台县| 招远市| 梁平县| 白银市| 通许县| 肥东县| 凤阳县| 民丰县| 探索| 临海市| 桐城市| 汶上县| 巧家县| 南华县| 江口县| 四会市| 文水县| 河间市| 拉萨市| 化州市| 木兰县|