qtopia4.3

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來校正一下,這邊就不說明了。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lanmanck/archive/2009/08/04/4402942.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章