關於編譯qtopia4.3.2的兩篇文章

來源:互聯網
上載者:User

http://blog.csdn.net/sabalol/archive/2009/01/08/3737093.aspx

前一陣子,一直是用的qtopia-free-1.7.0.tar.gz,因為這個已經在開發板運行起來了的,但由於要求實現硬體滑鼠,所以得去分析
qtopia的原始碼;在網上逛了逛,發現qtopia最新完全版已經是4.3.2了,而且介面也十分漂亮,於是就想,既然要分析qtopia的原始碼,
為什麼不直接使用最新的qt4呢,而且qt4也必將是今後一段時間的主流,於是決定移植最新的qtopia-4.3.2完全版。

概念:

什麼是qtopia?
        Qtopia
是一個面向嵌入式
Linux
的全方位應用程式開發平台,同時也是用於基於
Linux

PDA
(個人數位助理),智能電話(
Smartphone
)以及其他行動裝置的使用者介面。簡單地說,
Qtopia
實質上是一組關於
PDA
和智能電話的應用程式結合,如果需要開發這類產品可以在這組程式的基礎上迅速構建出
PDA
或者智能電話。


一、環境:

主機系統:Fedora 10

目標板:重慶神州龍芯科技有限公司的CQ8401工控機開發板,1024x768液晶顯示器,PS2滑鼠、鍵盤
CPU: mipsel ,主頻400MHz,
記憶體64M
檔案系統:使用nfs(busybox 1.13.1)
硬碟:160G(IDE或SATA)

qtopia版本: qtopia 4.3.2 大小:109.89M
:ftp://ftp.trolltech.com/qtopia/source/qtopia-opensource-src-4.3.2.tar.gz

交叉編譯器:mipsel-linux-gcc, mipsel-linux-g++ //gcc版本3.3.6

二、準備工作:

建立build目錄和安裝目錄:
目錄結構:
/opt/qtopia/source 原始碼解壓到該目錄(根據.configure提示,必須為source目錄。

/opt/qtopia/target編譯目錄:存放configure,make產生的檔案(編譯目錄不能為source目錄)

/usr/local/qtopia安裝目錄,安裝後,複製到nfs檔案系統的對應目錄下,如:我的nfs檔案系統結構為:/nfsroot/cq8401/{bin,etc,lib,opt,tmp,usr,var}

那麼就將/usr/local/qtopia這個qtopia目錄複寫到/nfsroot/cq8401/usr/local目錄下,為什麼呢?因為你進入開發板上的系統後運行QT應用程式,它會搜尋/usr/local/qtopia下的庫配置!

三、配置與編譯





由於我之前沒有配置這個,導致螢幕中間沒有游標出現,只有我的硬體滑鼠,但我實現的硬體滑鼠還沒有與QT的滑鼠事件介面

結合上,導致老是點擊無效,要猜測QT當前的滑鼠位置在哪裡!

cd /opt/qtopia/source

 

# vi qtopiacore/qconfig-qpe.h

首先注釋掉關於滑鼠游標的宏定義,讓程式運行時,屏中央有游標出現:

// Qtopia Core

/*

#ifndef QT_NO_QWS_CURSOR

#  define QT_NO_QWS_CURSOR

#endif

*/

/*

#ifndef QT_NO_QWS_MOUSE

#  define QT_NO_QWS_MOUSE

#endif

#ifndef QT_NO_QWS_MOUSE_AUTO

#  define QT_NO_QWS_MOUSE_AUTO

#endif

*/

其它宏定義根據需要進行注釋。

儲存後將qconfig-qpe.h拷貝到global目錄。

# cp qtopiacore/qconfig-qpe.h  qtopiacore/qt/src/corelib/global/qconfig-qpe.h

注釋掉其他檔案裡的QT_NO_QWS_CURSOR的定義

# vi qtopiacore/qt/src/corelib/global/qfeatures.h

注釋掉如下內容:

/*

#if !defined(QT_NO_QWS_CURSOR) && (defined(QT_NO_CURSOR))

#define QT_NO_QWS_CURSOR

#endif

*/

儲存退出。

# vi qtopiacore/qt/src/corelib/global/qglobal.h

注釋掉以下內容:

//#    define QT_NO_QWS_CURSOR

# cd /opt/qtopia/target


#
../source/configure -release -image /usr/local/qtopia -prefix
/usr/local/qtopia -xplatform linux-mips-g++ -arch mips -no-qvfb
-displaysize 1024x768 -no-modem -extra-qtopiacore-config "-release
-xplatform qws/linux-mips-g++ -embedded mips -qconfig qpe -depths
8,16,32 " 2>../configure_error.log

# make 2>../make_error.log


把錯誤輸出到make_error.log 檔案中,不然編譯後,你還不知道在哪兒出錯了,因為輸入資訊相當的多!

主要配置選項解說如下:


-release   Create a release build.


-xplatform linux-mips-g++ -arch mips
//目標平台為mips-linux,體繫結構為mips。(.configure它會怎麼檢測是大端還是小端CPU,當然,你也可以強制指定:  
-little-endian .........  Force target build to use little endian (LSB first).
-big-endian ............  Force target build to use big endian (MSB first).)
支援的arch列表:alpha, arm, boundschecker, generic, i386, ia64, macosx, mips
, parisc, powerpc, s390, sparc, windows, x86_64

-no-qvfb
   //目標平台已支援framebuffer,因而不使用虛擬幀緩衝。

-extra-qtopiacore-config
//為Qtopia core 配置選項。

-xplatform qws/linux-mips-g++ -embedded mips
//目標平台編譯設定檔使用qtopiacore/qt/mkspecs/qws/linux-mips-g++目錄下的設定檔,嵌入式平台為mips。

-qconfig qpe
//使用設定檔qconfig-qpe.h,若使用qconfig-large.h設定檔,則使用-qconfig large選項。

2>../confgure_error.log
//最後將配置過程中的錯誤輸出到confgure_error.log檔案中。

在編譯安裝完成後,在/usr/local/qtopia 中的東西就是Qtopia在mipsel上運行所需要的檔案

建立時區資訊:

複製剛才編譯目錄下:/opt/qtopia/target/etc/zoneinfo目錄到nfs檔案系統的usr/share目錄下,我的就是

# cp -a /opt/qtopia/target/etc/zoneinfo /nfsroot/cq8401/usr/share/

然後複製主機:/usr/local/qtopia目錄到nfs檔案系統相應的目錄下:(共74M)

# cp -a /usr/local/qtopia /nfsroot/cq8401/usr/local/

 

四、進入開發板,配置與運行

好了,現在進入開發板系統中:

環境設定:(最好把它們寫到/etc/profile檔案中,免得每次重啟系統後,都要重輸一遍)

export HOME=/root
  #設定使用者目錄,QT運行後,相應的設定檔,文檔就存放在使用者主目錄下

export PATH=/usr/local/qtopia/bin:$PATH
  #設定QT程式搜尋路徑

export LD_LIBRARY_PATH=/usr/local/qtopia/lib:$LD_LIBRARY_PATH
  #設定QT庫搜尋路徑

export QWS_KEYBOARD_PROTO=TTY:/dev/tty0
   #設定鍵盤

export QWS_MOUSE_PROTO=MouseMan:/dev/input/mice
  #設定滑鼠設定

export TZ=Asia/Chongqing
#此句設定時區,可以為Beijing,或Shanghai,我在重慶,所以就設定為Chongqing了

export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0"
#此句顯示字型和表徵圖。

完成後,在命令列執行

# qpe -qws&

如果看到目標板螢幕上啟動的Qtopia 說明已經成功了。

 

=========================================================

http://hi.baidu.com/ruanbanyong/blog/item/953537de4e61ee14632798d4.html

最近在論壇上看到許多朋友在交叉編譯Qtopia-opensource-src-4.3.2時出現很多問題,而不能繼續。

本人一直以來都不會使用新版本的開發庫,一個原因是新的東東用的人少,網上資料也少,問題解決辦法不容易查得到,而且我的arm CPU也跟不上。

以下是我的完全的交叉編譯過程,希望能對您有所協助。

我的主機系統:FC6

目標板:Arm 9200

目標板檔案系統:cramfs

 

 

可以在網上下載該Qtopia版本:ftp://ftp.trolltech.com/qtopia/source/qtopia-opensource-src-4.3.2.tar.gz

總共大小:109.89M

交叉編譯器:cross-3.3.2

 

解壓到目錄:/root/Qtopia4/source

建立目標:/root/Qtopia4/target         存放make 所產生的檔案

建立安裝目錄:/mnt/nfs/image         存放make install 所產生的檔案,也是arm板上所執行檔案,我是採用nfs方式來和arm板串連的

修改時區資訊

# vi src/libraries/qtopia/qtimezone.cpp

將 /usr/share/zoneinfo/ 改為/mnt/nfs/qtopia4/qtopiatslibtarget/zoneinfo/ ,儲存退出。

# vi src/settings/systemtime/settime.cpp

將 /usr/share/zoneinfo/ 改為/mnt/nfs/qtopia4/qtopiatslibtarget/zoneinfo/ ,儲存退出。

裁減Qtopia core的庫

# vi qtopiacore/qconfig-qpe.h

首先注釋掉關於滑鼠游標的宏定義,讓程式運行時,觸控螢幕中央有游標出現:

// Qtopia Core

/*

#ifndef QT_NO_QWS_CURSOR

# define QT_NO_QWS_CURSOR

#endif

*/

/*

#ifndef QT_NO_QWS_MOUSE

# define QT_NO_QWS_MOUSE

#endif

#ifndef QT_NO_QWS_MOUSE_AUTO

# define QT_NO_QWS_MOUSE_AUTO

#endif

*/

其它宏定義根據需要進行注釋。

儲存後將qconfig-qpe.h拷貝到global目錄。

# cp qtopiacore/qconfig-qpe.h qtopiacore/qt/src/corelib/

global/qconfig-qpe.h

注釋掉其他檔案裡的QT_NO_QWS_CURSOR的定義

# vi qtopiacore/qt/src/corelib/global/qfeatures.h

注釋掉如下內容:

/*

#if !defined(QT_NO_QWS_CURSOR) && (defined(QT_NO_CURSOR))

#define QT_NO_QWS_CURSOR

#endif

*/

儲存退出。

# vi qtopiacore/qt/src/corelib/global/qglobal.h

注釋掉以下內容:

//#    define QT_NO_QWS_CURSOR

Qtopia4移植過程配置源碼包

 

進入/root/Qtopia4/target目錄

#../source/configure -release -image /mnt/nfs/image -prefix
/mnt/nfs/image -xplatform linux-arm-g++ -arch arm -no-qvfb -displaysize
640x480 -no-modem -extra-qtopiacore-config "-release -xplatform
qws/linux-arm-g++ -embedded arm -qconfig qpe -depths 4,8,16,32
-qt-mouse-linuxtp " 2>../confgureERR.txt

主要配置選項解說如下:

-xplatform linux-arm-g++ -arch arm

目標平台為arm-linux,體繫結構為arm。

-no-qvfb

目標平台已支援framebuffer,因而不使用虛擬幀緩衝。

-extra-qtopiacore-config

為Qtopia core 配置選項。

-xplatform qws/linux-arm-g++ -embedded arm

目標平台編譯設定檔使用qtopiacore/qt/mkspecs/qws/linux-arm-g++目錄下的設定檔,嵌入式平台為arm。

-qconfig qpe

使用設定檔qconfig-qpe.h,若使用qconfig-large.h設定檔,則使用-qconfig large選項。

-qt-mouse-linuxtp

觸控螢幕協議支援linuxtp
2>../confgureERR.txt

最後將配置過程中的錯誤輸出到confgureERR.txt檔案中。

 

# make 2>../makeERR.txt

 

# make install

 

在編譯安裝完成後,在/mnt/nfs/image 中就是Qtopia在arm上運行所需要的檔案

建立時區資訊

# cd $QTOPIATARG

# mkdir zoneinfo

# cp -a /usr/share/zoneinfo/* /mnt/nfs/image/zoneinfo/

 

到這一步主機上的工作已經基本完成。

 

NFS串連主機,進入目標板系統,mount -t nfs 主機地址:/mnt/nfs /mnt/nfs -o nolock

 

輸入目標板環境設定

export PATH=/mnt/nfs/image/bin:$PATH
export LD_LIBRARY_PATH=/mnt/nfs/image/lib:$LD_LIBRARY_PATH

export QWS_MOUSE_PROTO=LinuxTP:/dev/touchscreen/0 待選: /dev/input/mice

export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0" 此句顯示字型和表徵圖。

 

後執行qpe -qws&

 

就可以看到目標板螢幕上啟動的Qtopia 說明您已經成功了。

 

註:
a 由於在pc機上安裝的時候qtopia的image的存放路徑是file:/mnt/nfs/image.
所以在板子上的存放路徑也必須跟其一致。否則會出錯。如下:
**********************************************************
* ERROR: Expecting this binary to be located in
* /opt/arm-qt/qt-arm-bin/bin/qpe
* but it is being run from
* /Qtopia/bin/qpe
*
* This generally indicates that you have specified the wrong
* value for -prefix when configuring Qtopia. Based on the
* location of this binary, you should be using a prefix of
* /Qtopia
**********************************************************

b 另外會提示如下錯誤:
Could not read calibration: "/etc/pointercal"
查看的在/etc目錄下沒有pointercal檔案,而自己的qpe怎麼也起不來五點校正圖片,可以用tslib來校正一下,這邊就不說明了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.