亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        唐 浩,代少升

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

        1 引言

        21世紀(jì)是后計(jì)算機(jī)時(shí)代,人們每天都會(huì)接觸很多的嵌入式產(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),通過(guò)抽象層將其上層和底層操作系統(tǒng)隔離開(kāi)來(lái),開(kāi)發(fā)的重點(diǎn)在于窗口系統(tǒng),但由于支持力量比較薄弱,其維護(hù)和再開(kāi)發(fā)成本不可預(yù)計(jì)。MicroWindows以較小的資源消耗、通用的幀緩沖(FrameBuffer)技術(shù)、靈活的分層設(shè)計(jì)模式和豐富的API支持等特點(diǎn)獲得廣泛的關(guān)注,但其圖形引擎無(wú)任何硬件加速能力,算法低效,代碼質(zhì)量較差。OpenGUI基于用匯編語(yǔ)言實(shí)現(xiàn)的X86圖形內(nèi)核,提供了高層的C/C++圖形/窗口接口,它的資源消耗小,但可移植性差,不支持多進(jìn)程。

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

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

        2.1 總體流程

        Qt/Embedded是著名的Qt庫(kù)開(kāi)發(fā)商Trolletch公司(2008年6月被諾基亞公司收購(gòu))開(kāi)發(fā)的圖形化界面開(kāi)發(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的類庫(kù)完全采用C++封裝,控件資源豐富,可移植性較好,開(kāi)放的源碼使得開(kāi)發(fā)人員可以在GPL許可協(xié)議下自由地進(jìn)行嵌入式GUI應(yīng)用程序的移植與開(kāi)發(fā)。Qt/Embedded移植與開(kāi)發(fā)總體流程如圖1所示。

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

        筆者采用廣州友善之臂公司設(shè)計(jì)的Micro2440開(kāi)發(fā)板作為硬件平臺(tái),該開(kāi)發(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ù)庫(kù)。

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

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

        搭建編譯平臺(tái)是嵌入式GUI的必要工作。Qt/Embedded的軟件開(kāi)發(fā)環(huán)境主要包括嵌入式Linux操作系統(tǒng)、軟件開(kāi)發(fā)工具鏈以及相關(guān)源碼包。本文的開(kāi)發(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開(kāi)發(fā)工具,如用戶界面編譯器(UIC)與虛擬幀緩沖服務(wù)器(QVFB),作為交叉編譯環(huán)境的支持。虛擬環(huán)境搭建過(guò)程如下:

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

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

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

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

        5)make install完成之后,會(huì)在/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)

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

        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 平臺(tái),并支持 4,8,16,32 位的顯示顏色深度。

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

        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平臺(tái)上的運(yùn)行需要有qt-embedded庫(kù)支持。在開(kāi)發(fā)板的根目錄下新建如下目錄:

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

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

        把PC上對(duì)應(yīng)目錄下交叉編譯后生成的qtembedded庫(kù)文件和字體文件,分別拷貝到上述目錄中。注意,運(yùn)行庫(kù)文件一般只拷貝libQtGui.so.4,libts-0.0.so.0,libQtCore.so.4,libQtNetwork.so.4,如果文件是到共享庫(kù)的鏈接文件,則把該共享庫(kù)也要拷貝上,字體庫(kù)則需拷貝一種就可以了。設(shè)置開(kāi)發(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)用程序開(kāi)發(fā)實(shí)例

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

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

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

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

        4.2 Qt/Embedded程序文件編寫

        Qt/Embedded源程序一般應(yīng)該包含以下文件:1個(gè)主程序文件(main.cpp)、多個(gè)源程序文件(source.cpp)與對(duì)應(yīng)的頭文件(source.h)以及用來(lái)生成makefile的項(xiàng)目文件(.pro)。在本次開(kāi)發(fā)中,并沒(méi)有使用Qt designer來(lái)進(jìn)行可視化窗口設(shè)計(jì),完全借助Qdevelop純代碼進(jìn)行編寫,這樣能更好地體會(huì)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ù)。這里會(huì)接觸到Qt最重要的特性:信號(hào)與槽機(jī)制(signal&slot)。信號(hào)與槽機(jī)制提供了任意兩個(gè)Qt對(duì)象之間的通信機(jī)制,信號(hào)會(huì)在某個(gè)特定情況或動(dòng)作下被觸發(fā),槽是用于接收并處理信號(hào)的函數(shù)。其常用格式為 bool QObject::connect(Object1,SIGNAL(signal1),Object2,SLOT(slot)),以及與這個(gè)函數(shù)對(duì)應(yīng)的disconnect函數(shù),可以將信號(hào)和槽斷開(kāi)連接。下面介紹一段簡(jiǎn)單的程序,該程序設(shè)置了打開(kāi)單個(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)位于資源庫(kù)images文件夾下。

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

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

        3)編寫主函數(shù)main.cpp。Qt/Embedded應(yīng)用程序應(yīng)該包含一個(gè)主函數(shù),該函數(shù)是應(yīng)用程序的入口點(diǎn)。結(jié)合imgviewer.h和imgviewer.cpp,可以看到所有應(yīng)用程序開(kāi)發(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)過(guò)程為:qmake-o Makefile imgviewer.pro。然后在命令行下輸入make命令對(duì)整個(gè)工程進(jìn)行編譯,就能生成X86架構(gòu)的二進(jìn)制文件,這便是QVFB能執(zhí)行的應(yīng)用程序。如果再用Qt/Embedded的庫(kù)對(duì)整個(gè)工程進(jìn)行交叉編譯鏈接,就能得到在S3C2440平臺(tái)上運(yùn)行的可執(zhí)行文件。

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

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

        5 小結(jié)

        嵌入式技術(shù)的關(guān)鍵在于人機(jī)交互技術(shù)的體現(xiàn),基于Qt/Embedded的GUI為嵌入式Linux系統(tǒng)用戶提供了良好的使用和交互環(huán)境。筆者通過(guò)一個(gè)簡(jiǎn)單的應(yīng)用程序,對(duì)Qt/Embedded在S3C2440平臺(tái)下的移植與開(kāi)發(fā)進(jìn)行了詳細(xì)介紹,為類似的GUI程序開(kāi)發(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平臺(tái)上的移植及應(yīng)用[J]. 儀器儀表用戶,2009,16(2):108-110.

        [5]孫瓊.嵌入式Linux應(yīng)用程序開(kāi)發(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)頁(yè)源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲代碼生成方法
        基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測(cè)方法
        企業(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
        三星電子將開(kāi)設(shè)應(yīng)用程序下載商店
        微軟軟件商店開(kāi)始接受應(yīng)用程序
        久久综合加勒比东京热| 性色av闺蜜一区二区三区| 亚洲av无码精品色午夜| 亚洲中文字幕无码卡通动漫野外| 欧洲无码一级毛片无遮挡| 亚洲一区二区日韩精品| 免费久久99精品国产| 亚洲av综合a色av中文| 国产又黄又猛又粗又爽的a片动漫 亚洲精品毛片一区二区三区 | 97无码人妻一区二区三区蜜臀| 中文字幕亚洲永久精品| 久久国内精品自在自线| 国产丶欧美丶日本不卡视频| 八戒网站免费观看视频| 欧美成人网视频| 日韩av在线手机免费观看| 丝袜人妻一区二区三区 | 久久精品99久久香蕉国产色戒 | 久久免费精品日本久久中文字幕 | 波多野结衣一区二区三区免费视频| 亚洲女同恋中文一区二区| 激情文学婷婷六月开心久久| 日本大骚b视频在线| 国产成人av一区二区三区在线| 久久久精品2019免费观看| 男女互舔动态视频在线观看| 久久久久久av无码免费网站下载| 亚洲人成未满十八禁网站| 国产精品福利小视频| 中文字幕一区二区三区精品在线| 国产肥熟女免费一区二区| 精品人妻无码视频中文字幕一区二区三区 | 国产精品专区一区二区av免费看| 日韩中文字幕素人水野一区| 欧美猛少妇色xxxxx猛交| 少妇人妻在线视频| 国产高清精品在线二区| 亚洲国产精品久久无人区| 日本熟妇hdsex视频| 国产精品美女白浆喷水| 国产精品农村妇女一区二区三区|