自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Qtopia 移植實(shí)驗(yàn)過(guò)程

移動(dòng)開發(fā)
Qtopia 后來(lái)被重新命名為Qt Extended,在2009年3月3日,Nokia決定停止Qt Extended的后續(xù)開發(fā),轉(zhuǎn)而全心投入Qt的產(chǎn)品開發(fā),并逐步會(huì)將一部分QtExtended的功能移植到Qt開發(fā)框架中。

本文介紹的內(nèi)容是關(guān)于 Qt opia 移植實(shí)驗(yàn)過(guò)程,以實(shí)驗(yàn)報(bào)告的形式向大家展現(xiàn)內(nèi)容,方便又很清晰的瀏覽內(nèi)容。

一、準(zhǔn)備工作

了解QT庫(kù)的使用

了解QTopia移植步驟

學(xué)習(xí)如何使用Tslib來(lái)構(gòu)建帶有觸摸屏的GUI系統(tǒng)

二、實(shí)驗(yàn)原理

1、實(shí)驗(yàn)程序介紹

本章重點(diǎn)講述如何利用源代碼一步一步的將Qtopia(一套基于QT的GUI界面)移植到Filesystem中,最終可以在開發(fā)板上看到Qtopia運(yùn)行起來(lái)。

2、實(shí)驗(yàn)原理

目前嵌入式Linux的主流GUI系統(tǒng)主要有MiniGUI、Microwindows、OpenGUI、Qt/Embedded,這些GUI在接口定義、體系結(jié)構(gòu)、功能特性存在很大差別,采取的技術(shù)路線也有所不同。MiniGUI是建立在比較成熟的圖形引擎之上,開發(fā)的重點(diǎn)在于窗口系統(tǒng),其小巧精致并且盡量與Win32兼容。MicroWindows目前開發(fā)的重點(diǎn)在底層的圖形引擎,窗口系統(tǒng)和圖形接口方面功能比較欠缺,與Win32和X Windows窗口系統(tǒng)保持兼容,提供了相對(duì)完善的圖形功能。OpenGUI基于一個(gè)用匯編實(shí)現(xiàn)的x86圖形內(nèi)核,提供了一個(gè)高層的C/C++圖形/窗口接口,它的資源消耗小,可移植性差,不支持多進(jìn)程。

我們這次的實(shí)驗(yàn)用的就是基于Qt/Embedded,它具有良好的擴(kuò)展性和眾多優(yōu)秀的配套工具。

實(shí)驗(yàn)過(guò)程中,一共用到4個(gè)源代碼包,下面是它們的介紹說(shuō)明:

Qt/EmbeddedQt/Embedded是一個(gè)多平臺(tái)的C++圖形用戶界面應(yīng)用程序框架,其對(duì)象容易擴(kuò)展,可移植性好,支持多個(gè)GUI平臺(tái)的交互開發(fā)?,F(xiàn)在,Qt/Embedded被廣泛地應(yīng)用于各種嵌入式產(chǎn)品和設(shè)備中,從消費(fèi)電器(如智能手機(jī)、機(jī)頂盒)到工業(yè)控制設(shè)備(如醫(yī)學(xué)成像設(shè)備、移動(dòng)信息系統(tǒng)等)。因此本實(shí)訓(xùn)項(xiàng)目選擇Qt/Embedded為系統(tǒng)的GUI。

Qtopia Qtopia 是Trolltech 公司為采用嵌入式Linux 操作系統(tǒng)的消費(fèi)電子設(shè)備而開發(fā)的綜合應(yīng)用平臺(tái), 它基于Qt/Embedded框架,所以在編譯Qtopia之前先要搭建好Qt/Embedded框架。另外Qtopia包含完整的應(yīng)用層、靈活的用戶界面、窗口操作系統(tǒng)、應(yīng)用程序啟動(dòng)程序以及開發(fā)框架。

Tslib:在采用觸摸屏的移動(dòng)終端中,觸摸屏性能的調(diào)試是個(gè)重要問(wèn)題之一,因?yàn)殡姶旁肼暤木壒剩|摸屏容易存在點(diǎn)擊不準(zhǔn)確、有抖動(dòng)等問(wèn)題。Tslib是一個(gè)開源的程序,能夠?yàn)橛|摸屏驅(qū)動(dòng)獲得的采樣提供諸如濾波、去抖、校準(zhǔn)等功能,通常作為觸摸屏驅(qū)動(dòng)的適配層,為上層的應(yīng)用提供了一個(gè)統(tǒng)一的接口。

Tmake:tmake是一個(gè)很好用的生成和管理makefile的工具,他是由Trolltech這家公司開發(fā)的,用perl寫成。

3、移植流程圖

Qt opia 移植實(shí)驗(yàn)過(guò)程
圖1 流程示意圖

三、實(shí)驗(yàn)步驟

1、實(shí)驗(yàn)準(zhǔn)備

首先需要下載如下資源:

  1. qtopia-free-1.7.0.tar.bz2  
  2. qt-embedded-2.3.7.tar.bz2  
  3. tmake-1.11.tar.gz  
  4. Tslib-1.3.tar.gz 

其次,需要保證能夠正常使用交叉編譯工具鏈,即可以正常使用諸如arm-linux-gcc的命令

解壓這四個(gè)壓縮包分別到如下幾個(gè)目錄:

  1. qtopia-free-1.7.0.tar.bz2  /work/qtopia-1.7.0  
  2. qt-embedded-2.3.7.tar.bz2  /work/qt-2.3.7  
  3. tmake-1.11.tar.gz    /work/tmake-1.11  
  4. Tslib-1.3.tar.gz     /work/tslib-1.3 

2、設(shè)置環(huán)境變量

在Shell中輸入下了命令,也可以做一個(gè)腳本文件來(lái)執(zhí)行

  1. export export QTDIR=/work/qt-2.3.7  
  2. export export QPEDIR=/work/qtopia-1.7.0  
  3. export LD_LIBRARY_PATH=/work/qt-2.3.7/lib:$LD_LIBRARY_PATH  
  4. export TMAKEDIR=/work/tmake-1.11  
  5. export TMAKEPATH=/work/tmake-1.11/lib/qws/linux-arm-g++  
  6. export PATH=/work/tmake-1.11/bin:$PATH 

3、編譯Tslib 1.3

在Shell界面輸入如下命令,假設(shè)當(dāng)前目錄是”/work”

  1. [root@emdoor work]#cd tslib-1.3  
  2. [root@emdoor tslib-1.3]#export CC=arm-linux-gcc         //選擇編譯工具鏈  
  3. [root@emdoor tslib-1.3]#./autogen.sh  
  4. [root@emdoor tslib-1.3]#./configure --host=arm-linux       //生成ARM版本的Tslib  
  5. [root@emdoor tslib-1.3]#make  
  6. [root@emdoor tslib-1.3]#cp -a src/.libs/*  ../qt-2.3.7/lib/  
  7. [root@emdoor tslib-1.3]$cp -a plugins/.libs/*.so  ../qt-2.3.7/lib/     
  8.                                        //拷貝生成的庫(kù)文件到QT/E源碼中  
  9. [root@emdoor tslib-1.3]$cp -a src/*.h  ../qt-2.3.7/include   //拷貝文件到QT/E源碼中 

這樣我們就生成Tslib的庫(kù)文件與鏈接文件了

4、編譯QT/E 2.3.7

由于我們最終要編譯的是qtopia 1.7.0,而它對(duì)應(yīng)的QT/E庫(kù)文件是2.3.7,所以我們需要交叉編譯一個(gè)它專用的QT/E框架,即庫(kù)文件

(1)首先即要確保步驟2已經(jīng)完成,并且生成的庫(kù)文件都是ARM架構(gòu)的,可以用下列代碼測(cè)試一下:

  1. [root@emdoor tslib-1.3]$ file  /work/qt-2.3.7/lib/libts*     //反饋信息中會(huì)有ARM字樣 

(2)為了能在Qt/E中順利使用觸摸屏,還需要做如下修改

修改configs/ linux-arm-g++-shared的第41行,紅色部分為新添加內(nèi)容,表示在編譯過(guò)程中,調(diào)用libts.so庫(kù)文件,即導(dǎo)入了我們步驟二生成的觸摸屏驅(qū)動(dòng)程序
SYSCONF_LIBS  = -lm –lts

從實(shí)驗(yàn)源代碼中的補(bǔ)丁目錄,找到一個(gè)名字為“qwsmouse_qws.cpp”替換掉qt-2.3.7目錄下對(duì)應(yīng)的同名文件(src/kernel目錄內(nèi)),由于該代碼修改的內(nèi)容較多,筆者在此就不一一描述,該修改主要將tslib的調(diào)用方式嵌入到Qt/E中,感興趣的讀者可以自行解讀該代碼。

(3)進(jìn)入源代碼目錄,使用configure進(jìn)行配置

  1. [root@emdoor qt-2.3.7]$ cd $QTDIR  
  2. [root@emdoor qt-2.3.7]$ cp /work/qtopia-1.7.0/src/qt/qconfig-qpe.h src/tools/  
  3. [root@emdoor qt-2.3.7]$ ./configure  -xplatform linux-arm-g++ -qconfig qpe 

注意:qtopia 1.7.0針對(duì)QT/E 2.3.7預(yù)設(shè)了一個(gè)配置腳本qconfig-qpe.h,所以要將其拷貝到src/tools目錄下,然后在configure中就可以用”—qconfig”調(diào)用了

(4)隨后QT的配置過(guò)程中會(huì)跳出幾個(gè)問(wèn)題,回答如下:

  1. Q:… license?    A:yes  
  2. Q:color depth?    A:16   
  3. Q:Virtual Framebuffer?  A:no 

(5)***就直接編譯了:

[root@emdoor qt-2.3.7]$ make sub-src       //sub-src表示僅編譯src目錄下的內(nèi)容

5、編譯Qtopia 1.7.0

  1. [root@emdoor qt-2.3.7]$ cd $QPEDIR  
  2. [root@emdoor qtopia-1.7.0]$ ./configure  -xplatform linux-arm-g++  
  3. [root@emdoor qtopia-1.7.0]$ make 

這樣就會(huì)在當(dāng)前目錄生成整個(gè)GUI界面的所有可執(zhí)行文件和配置文件

6、壓縮CodeSize

生成的系統(tǒng)有點(diǎn)冗余,可以用arm-linux-strip工具將多余的調(diào)試信息剝離開,減小Qtopia的體積:

  1. [root@emdoor qtopia-1.7.0]$ arm-linux-strip -R .note -R .comment bin/*  
  2. [root@emdoor qtopia-1.7.0]$ arm-linux-strip -R .note -R .comment plugins/*/*  
  3. [root@emdoor qtopia-1.7.0]$ arm-linux-strip -R .note -R .comment $QTDIR/lib/libqte.so* $QTDIR/lib/libqpe.so* 

7、構(gòu)建Run-time目錄

由于Otopia目錄下還存在的源代碼之類的文件,而且它的運(yùn)行離不開QT/E的共享庫(kù)文件,所以我們新建一個(gè)qpe目錄,然后把Qtopia給放進(jìn)去:

  1. [root@emdoor qtopia-1.7.0]$ mkdir ../qpe  
  2. [root@emdoor qtopia-1.7.0]$ cd ../qpe  
  3. [root@emdoor qpe]$ cp -aR ../qt-2.3.7/lib/ ./  
  4. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/lib/* ./lib  
  5. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/apps ./  
  6. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/bin ./  
  7. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/plugins ./  
  8. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/i18n ./  
  9. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/pics . /  
  10. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/etc . /  
  11. [root@emdoor qpe]$ cp ../tslib/etc/ts.conf  /qpe/etc  
  12. [root@emdoor qpe]$ cp ../tslib/tests/.libs/ts.calibrate  /qpe/bin  

8、整合入filesystem

(1)進(jìn)入由上一章節(jié)生成的busybox的Filesystem,將qpe目錄拷貝到Filesystem中的usr目錄下,即目標(biāo)板運(yùn)行起來(lái)時(shí),qpe的絕對(duì)路徑是/usr/qpe

(2)新建一個(gè)Qtopia運(yùn)行腳本qpe.sh ,具體代碼如下:

  1. /usr/qpe/qpe.sh  
  2. export QTDIR=/usr/qpe   
  3. export QPEDIR=/usr/qpe  
  4. export LANG=zh_CN 
  5. export LD_LIBRARY_PATH=/usr/qpe/lib:$LD_LIBRARY_PATH  
  6. export QT_TSLIBDIR=/usr/qpe/lib  
  7. export TSLIB_CONFFILE=/usr/qpe/etc/ts.conf  
  8. export TSLIB_PLUGINDIR=/usr/qpe/lib  
  9. export QWS_MOUSE_PROTO=TPanel:/dev/touchscreen/ucb1x00  
  10. export KDEDIR=/usr/qpe  
  11. cd /usr/qpe/bin  
  12. ./ts_calibrate  
  13. ./qpe -qws 

(3)修改etc目錄下的inittab文件,在該文件的末尾加入如下代碼:

  1. x:5:once:/usr/qpe/qpe.sh &> /dev/null 

(4)根據(jù)busybox實(shí)驗(yàn)的步驟進(jìn)行格式化和運(yùn)行即可

小結(jié):Qt opia 移植實(shí)驗(yàn)過(guò)程的內(nèi)容介紹完了,希望對(duì)你有所幫助。關(guān)于Qt/Embedded,它是一個(gè)多平臺(tái)的C++圖形用戶界面應(yīng)用程序框架,其對(duì)象容易擴(kuò)展,可移植性好,支持多個(gè)GUI平臺(tái)的交互開發(fā)。

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-13 15:57:26

linux QT QTOPIA

2011-06-20 10:40:03

Ubuntu Qtopia

2011-06-24 13:08:34

Qt Qt 4.5.3 移植

2022-06-21 11:30:22

littleVGL鴻蒙

2011-06-23 18:16:59

Qt Qtopia

2011-07-05 16:31:17

Qtopia 交叉編譯

2011-06-29 09:20:41

Qt Embedded Qtopia

2011-06-20 09:06:05

Qt Qtopia

2011-06-20 09:26:38

Linux qtopia QT

2017-07-04 22:55:09

存儲(chǔ)過(guò)程數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程移植

2010-03-01 15:07:02

Linux交換分區(qū)

2011-06-20 10:27:24

Mini2440 Qtopia Qt

2011-06-13 11:24:55

QT MPlayer 移植

2023-02-06 16:21:48

2015-05-05 13:57:12

AndroidWindows

2011-06-13 11:07:22

QT 移植

2013-11-14 11:30:10

androidrom

2020-11-26 11:56:25

freeModbusT

2011-02-23 09:55:42

konqueror

2013-02-09 10:04:03

容錯(cuò)服務(wù)器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)