国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

Qtopia Core在嵌入式Linux上的移植及應(yīng)用

發(fā)布時間:2010-3-22 12:06    發(fā)布者:我芯依舊
關(guān)鍵詞: core , linux , Qtopia , 嵌入式 , 移植
1 引言

嵌入式Linux以其開放的源代碼,精簡高效的內(nèi)核、易定制和易裁減的特征以及硬件支持廣泛等優(yōu)勢,而深受嵌入式開發(fā)者的青睞,在消費類電子產(chǎn)品和工業(yè)控制、智能儀表等領(lǐng)域中有著廣泛的應(yīng)用。Qt是 Trolltech公司推出的一個跨平臺的 C++圖形用戶界面應(yīng)用程序開發(fā)框架。Qt是完全面向?qū)ο蟮模苋菀讛U展,并且允許真正的組件編程。

Qtopia Core是適用于嵌入式 Linux 所支持的單一應(yīng)用設(shè)備的主導性應(yīng)用框架,能夠穩(wěn)定、可靠地運行于嵌入式 Linux下,并且可以快速構(gòu)建一個可視化嵌入式軟件系統(tǒng)。 Qtopia Core的前身是 Qt/Embedded,繼承了Qt 4的功能與優(yōu)點,擁有與桌面系統(tǒng)的 Qt相同的應(yīng)用程序編程接口(API)和工具包。當編譯 Qtopia Core時,可以去除不用的功能和組件,以昀小化軟件的占用空間。

2 Qtopia Core介紹

Qtopia Core是一個為嵌入式設(shè)備上的圖形用戶接口和應(yīng)用開發(fā)而訂做的C++工具開發(fā)包。Qtopia Core采用與桌面版本同樣的一套 API,但在其內(nèi)部實現(xiàn)上作了很多出色的調(diào)整來適應(yīng)硬件有所限制的嵌入式環(huán)境。Qtopia Core包含多個 Qt工具,可以進行快速和優(yōu)化開發(fā),如 Qt 4增強的 GUI布局和窗體構(gòu)建器 Qt Designer。Qtopia Core與 Qt/X11昀大的區(qū)別在于 Qtopia Core不依賴于 X Server或 Xlib,而是直接訪問幀緩存( FrameBuffer),這樣顯著減少了內(nèi)存消耗。

2.1  Qtopia Core的窗口系統(tǒng)

Qtopia Core的窗口系統(tǒng)采用 Client/Server模型,任何一個 Qtopia Core的應(yīng)用程序都需要運行在一個 Server應(yīng)用上,而 Qtopia Core的應(yīng)用程序本身也可以作為 Server來運行。 Server進程通常會生成 QWSServer類的一個對象,主要用來分配 Client進程的顯示區(qū)域,并產(chǎn)生鼠標和鍵盤事件等。而 Client進程則通常生成 QWSClient類的一個對象,負責處理與各種應(yīng)用相關(guān)的邏輯。Server和 Client之間的通信通過 socket來實現(xiàn),這種通信通常被保持在一個較低的水平以減少通信的開銷——比如窗口的繪制,并不是像 X那樣完全由 Server來完成,而是由 Client進行直接操作 FrameBuffer來實現(xiàn),Server進程所作的僅僅是通知 Client需要重繪的事件等。

2.2 信號與槽機制 (Signals and Solts)

信號與槽機制是 Qt的核心機制,它是一種高級接口,用于對象間的通訊,是 Qt區(qū)別于其它工具包的昀具特性的部分。信號與槽是 QT自行定義的一種通信機制,它獨立于標準的 C/C++語言,需要借助一個稱為 moc(Meta Object Compiler)的 QT工具對信號和槽在編譯之前進行預(yù)處理,為高層次的事件處理自動生成所需要的附加代碼。

Qt中使用信號與槽機制取代原始的回調(diào)和消息映射機制,信號與槽是類型安全的,完全面向?qū)ο蟮模⑶宜鼈冎g的耦合比較松散,可以使得我們編寫的通信程序更為簡潔明了。當一個特定的事件發(fā)生時,一個被指定的信號就被發(fā)射,槽則是響應(yīng)信號的函數(shù),如果存在一個槽和該信號相連接,那在該信號被發(fā)射后,這個槽就會立刻執(zhí)行。多個信號可以連接一個槽,一個信號也可以連接多個槽,甚至可以把信號與信號相連接。信號與槽構(gòu)造了一個強大的組件編程機制,可以創(chuàng)建彼此互不了解的對象,利用信號就可以把信息正確的傳遞到對應(yīng)的槽函數(shù)進行處理。

3 Qtopia Core的安裝與移植

3.1 建立交叉編譯環(huán)境

文中采用 Trolltech公司的 Qtopia Core 4.3.2自由版作為目標板 Linux圖形界面庫。與 Qt/Embedded 3.x不同,Qtopia Core 4系列指明編譯器需要 3.2以上的版本,此處選用 arm-linux-gcc-3.4.1的交叉編譯工具鏈,將其拷貝到根目錄 /下,運行解壓命令:

tar xjvf arm-linux-gcc-3.4.1.tar.bz2

交叉編譯器會被安裝在/usr/local/arm/3.4.1/bin目錄下,編輯 /etc/bashrc文件,將其添加到環(huán)境變量 PATH中:

export PATH=/usr/local/arm/3.4.1/bin:$PATH

3.2 交叉編譯 Qtopia Core庫

在 Trolltech公司主頁上下載 Qtopia Core 4源代碼軟件包qtopia-core-opensource-src-4.3.2.tar.gz,解壓:

tar zxvf qtopia-core-opensource-src-4.3.2.tar.gz

cd qtopia-core-opensource-src-4.3.2

由于項目中使用帶有觸摸功能的 TFT液晶屏作為顯示和輸入設(shè)備,需要添加對觸摸屏的支持。一種方法是利用 Qtopia Core為 Linux TP協(xié)議提供的鼠標驅(qū)動接口類,修改觸摸屏驅(qū)動的源代碼,并在執(zhí)行 configure配置時傳遞-qt-mouse-linuxtp選項激活;另一種方法是嵌入 Tslib。Tslib是一個開源的程序,能夠為觸摸屏驅(qū)動獲得的采樣提供諸如濾波、去抖、校準等功能。這里使用第一種方法,過程如下:

首先在源碼樹 src\gui\embedded\qmouselinuxtp_qws.h中加入宏定義:

#define QT_QWS_IPAQ

#define QT_QWS_IPAQ_RAW

然后修改 qmouselinuxtp_qws.cpp文件,把 QWSLinuxTPMouseHandlerPrivate函數(shù)中打開的設(shè)備文件節(jié)點 ”/dev/h3600_tsraw”替換為自己的觸摸屏設(shè)備文件,如筆者目標板中為”/dev/touchscreen/0”。

配置編譯參數(shù):

./configure -embedded arm -xplatform qws/linux-arm-g++ -depths 8,16,32 -no-qt3support -no-qvfb -qt-mouse-linuxtp

根據(jù) configure生成的 Makefile文件編譯并安裝:

gmake

gmake install

交叉編譯完后,程序和庫默認會安裝到 /usr/local/Trolltech/QtopiaCore-4.3.2-arm目錄下。設(shè)置環(huán)境變量,修改$HOME/.bash_profile文件,加入

export PATH=/usr/local/Trolltech/QtopiaCore-4.3.2-arm/bin:$PATH

這樣就可以直接使用 qmake工具交叉編譯 Qtopia Core應(yīng)用程序,生成可運行在 ARM平臺的二進制可執(zhí)行文件。

3.3構(gòu)建根文件系統(tǒng)和移植到目標平臺

可以選擇使用 Busybox工具構(gòu)建一個全新的根文件系統(tǒng),也可對開發(fā)板上原有的文件系統(tǒng)進行剪裁和修補。此處利用原有的文件系統(tǒng)映像,把新建的應(yīng)用程序的相關(guān)文件加入其中。首先把原有的根文件系統(tǒng)映像 mount到工作的機器上,然后復制其內(nèi)容到一臨時目錄下。將交叉編譯好的 Qtopia Core庫文件拷貝到目標板文件系統(tǒng)對應(yīng)/lib目錄下,其中主要庫包括libQtCore.so.x,libQtGui.so.x,libQtNetwork.so.x等。此外,還需將交叉編譯器所在目錄下的 libstdc++.so.6庫文件也拷貝過來。

為使應(yīng)用程序能正確執(zhí)行,需要設(shè)定系統(tǒng)的運行環(huán)境,將以下環(huán)境變量寫入目標文件系統(tǒng)/etc/profile文件中:

export QTDIR=”/usr/local/Trolltech/QtopiaCore-4.3.2-arm”

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export QWS_MOUSE_PROTO=”LinuxTp:/dev/touchscreen/0”

要使我們的程序在系統(tǒng)啟動后能夠自動運行,還需在目標文件系統(tǒng)/usr/etc/rc.local腳本文件中,添加應(yīng)用程序的路徑和執(zhí)行命令:

exec /apps/harmonic -qws

此時在開發(fā)板運行 Qtopia Core應(yīng)用程序后,觸摸屏還不能正確響應(yīng)用戶的點擊,主要原因是目標板文件系統(tǒng)中用于存放校準信息的/etc/pointercal文件不存在或該文件中對觸摸屏進行調(diào)整的參數(shù)不正確。Qtopia Core示例程序中提供了一個校準程序 mousecalibration,將其下載至目標板并運行,在出現(xiàn)校準界面后采用 5點校準會在 /etc目錄下生成 pointercal校準文件。以后每次觸摸屏啟動都會讀取該文件內(nèi)容進行觸摸屏設(shè)定。

4 Qtopia Core應(yīng)用程序開發(fā)實例

本實例的背景是為嵌入式電力諧波檢測設(shè)備設(shè)計開發(fā)其上的圖形用戶界面程序,系統(tǒng)采用了 DSP+ARM雙處理器構(gòu)架的設(shè)計模式,通過串口通信實現(xiàn)數(shù)據(jù)傳輸和協(xié)同工作。基于 Qtopia Core的應(yīng)用程序運行在 ARM平臺上,其軟件設(shè)計主要包括完成與 DSP的通信,接收傳來的數(shù)據(jù),并加以計算分析和統(tǒng)計,將電力諧波參數(shù)值及信息以波形曲線、頻譜柱狀圖、表格等形式實時顯示出來,通過人機交互界面反饋給用戶,便于用戶操作與控制。程序框架結(jié)構(gòu)如圖 1所示:



設(shè)計上利用 Qtopia Core的多線程機制分前后臺處理,前臺為用戶界面主線程,用來保持對用戶操作的響應(yīng),控制和調(diào)度其他線程。其他執(zhí)行起來耗時的任務(wù)如數(shù)據(jù)讀取、處理分別設(shè)計成專門的線程放置在后臺,各線程間使用互斥信號量方式通信達到同步工作。數(shù)據(jù)讀取線程在編程實現(xiàn)上主要是依靠Linux系統(tǒng)提供的 termios結(jié)構(gòu)對串口屬性參數(shù)進行設(shè)置,并對串口對應(yīng)的設(shè)備文件(位于 /dev目錄下,串口一為 /dev/ttyS0)進行訪問,將接收到的數(shù)據(jù)按照規(guī)定的協(xié)議格式加以解析,從而為數(shù)據(jù)處理線程提供數(shù)據(jù)支持。數(shù)據(jù)處理線程中自定義 PowerQuality類實現(xiàn)對電能質(zhì)量各項性能指標的計算方法的封裝,并將結(jié)果分析統(tǒng)計后發(fā)送至顯示線程。數(shù)據(jù)顯示線程通過子類化 Qtopia Core提供的相應(yīng)的窗體控件,重新實現(xiàn)其繪制事件處理器 paintEvent()虛函數(shù),在函數(shù)中創(chuàng)建并調(diào)用 QPainter類變量實現(xiàn)各類圖形信息的繪制顯示。程序以屏幕點觸事件驅(qū)動,通過 Qtopia Core的信號與槽機制與終端用戶交互。圖2為開發(fā)實例運行在虛擬仿真窗口qvfb中的截圖。



5 結(jié)論

隨著嵌入式 Linux應(yīng)用的不斷發(fā)展,嵌入式處理器運算能力的不斷增強,對外設(shè)支持的不斷豐富,越來越多的嵌入式設(shè)備開始采用較為復雜的 GUI系統(tǒng),嵌入式 Linux系統(tǒng)下的 GUI應(yīng)用程序開發(fā)也越來越深入。開發(fā)出優(yōu)秀的的人機界面,是嵌入式發(fā)展的趨勢,擁有廣闊的市場前景。Qtopia Core延續(xù)了 Qt在桌面系統(tǒng)的所有功能,豐富的 API接口和基于組件的編程模型使得嵌入式 Linux系統(tǒng)中的應(yīng)用程序開發(fā)更加便捷。

本文的創(chuàng)新點是:詳細講述了 Qtopia Core圖形系統(tǒng)在嵌入式 Linux平臺上的移植過程,并通過修改 Qtopia Core源代碼,使得 Qtopia Core庫支持觸摸屏設(shè)備的使用。基于 Qtopia Core設(shè)計與實現(xiàn)了嵌入式電力諧波檢測設(shè)備的系統(tǒng)界面,其界面友好、運行穩(wěn)定,為其他嵌入式系統(tǒng)軟件開發(fā)和應(yīng)用提供一個參考。


作者:曹林   來源:《微計算機信息》2009年第25卷
本文地址:http://m.qingdxww.cn/thread-9701-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 無線充電基礎(chǔ)知識及應(yīng)用培訓教程3
  • 無線充電基礎(chǔ)知識及應(yīng)用培訓教程2
  • 想要避免發(fā)生災(zāi)難,就用MPLAB® SiC電源仿真器!
  • PIC18-Q71系列MCU概述
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美两性网 | 高清一区二区三区四区五区 | www.52av.con| 日韩欧美一区二区三区在线 | 日韩精品一区二区在线观看 | 国产成人欧美视频在线 | 国产高清在线视频 | 成人 亚洲 成人影院 | 国产福利在线观看第二区 | 日韩a一级欧美一级在线播放 | 欧美手机手机在线视频一区 | 欧美日韩亚洲视频 | 色综合久久中文色婷婷 | 久久官网 | 在线不卡一区 | 成人靠逼视频 | 青青色在线视频 | 国产毛片久久精品 | 欧美成一级 | 五月婷婷激情五月 | 国产成人深夜福利短视频99 | 国产欧美精品 | 国产aⅴ一区二区 | 99re视频精品全部免费 | 一色屋精品亚洲香蕉网站 | 2019国产精品 | 中文字幕在线看视频一区二区三区 | 色老头综合网 | 日韩亚洲成a人片在线观看 日韩亚洲 | 欧美激情视频一区二区 | 搞黄网站免费观看 | 日日做日日摸夜夜爽 | 国产做受视频激情播放 | 在线观看日本免费不卡 | 四虎4hu永久免费国产精品 | 狠狠丁香| 亚洲日本aⅴ片在线观看香蕉 | 成人观看的视频三级 | 99在线热视频 | 国产一级毛片网站 | 四虎影院色 |