天天看點

Fedora9 下搭建Qt Creator的ARM開發環境Fedora9 下搭建Qt Creator的ARM開發環境并移植Qt4.6.3-books到mini2440

Fedora9 下搭建Qt Creator的ARM開發環境并移植Qt4.6.3-books到mini2440

參考Fedora12 下搭建Qt Creator的ARM開發環境并移植Qt4.6.3-books到micro2440後自己寫下自己的操作經曆

環境:虛拟機Fedora9(建議安裝Vmware Tools,詳細安裝方法參照Vmware幫助文檔),USB序列槽,minicom終端。

軟體準備:

到 http://qt.nokia.com/downloads-cn下載下傳最新版的軟體包,目前是:

1、用于 Linux/X11 32位 的 Qt Creator 2.0.0 二進制軟體包Qt SDK for Linux/X11 32-bit** (371 MB)( http://get.qt.nokia.com/qtsdk/qt-sdk-linux-x86-opensource-2010.04.bin)

2、用于嵌入式 Linux 的 Qt 庫 4.6.3包qt-everywhere-opensource-src-4.6.3.tar.gz(Qt libraries 4.6.3 for Linux/X11(161 MB))

3、到CD光牒linux/中複制arm-linux-gcc-4.3.2.tgz準備待用

4、準備友善CD光牒裡的root_qtopia-20100108.tar.gz

将 qt-everywhere-opensource-src-4.6.3.tar.gz 壓縮包解壓為3份,分别編譯 PC ,嵌入式 x86 和 arm 三個版本。

我在root目錄下建立tmp檔案夾,将qt-everywhere-opensource-src-4.6.3.tar.gz直接解壓後複制2分,分别命名為pc、x86、arm。

5. 編譯 PC 版:

進入pc目錄

#./configure

# gmake

# gmake install

安裝過程比較長,沒有碰到過錯誤。

6. 編譯嵌入式x86版:

進入x86目錄

# ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb

# gmake

# gmake install

安裝過程比較長,沒有碰到過錯誤。

編譯安裝PC版中的 qvfb:

進入pc/tools/qvfb/目錄

#make

編譯完畢,将pc/bin目錄下的qvfb檔案複制到/usr/local/Trolltech/QtEmbedded-4.6.3/bin目錄。

因為編譯時間比較長,5、6步可以同時進行,以節省時間!

7、編譯嵌入式arm版(需要 arm-linux-gcc 的支援):

使用友善自帶的arm-linux-gcc 4.3.2編譯完了,安裝到/usr/local/arm/4.3.2目錄

把編譯器路徑加入系統環境變量,運作指令:

#gedit /root/.bashrc

編輯/root/.bashrc檔案,在最後一行加上 export PATH=/usr/local/arm/4.3.2/bin:$PATH

使用source /root/.bashrc加載一下

8、編譯tslib對觸摸屏支援:

下載下傳,tslib1.4.tar.gz,解壓後:

# ./configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes

# make

# make install

我下載下傳的包解壓後沒有configure檔案,需要運作autogen.sh後才能生成。

9、進入qt-everywhere-opensource-src-4.6.3-arm目錄編譯安裝

首先先配置:

注:必須加上“-prefix /usr/local/Trolltech/QtEmbedded-4.6.3-arm ”參數, 不然安裝後不在QtEmbedded-4.6.3-arm檔案夾下,而是覆寫了QtEmbedded-4.6.3。

# ./configure /

-prefix /usr/local/Trolltech/QtEmbedded-4.6.3-arm /

-opensource /

-confirm-license /

-release -shared /

-embedded arm /

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

-depths 16,18,24 /

-fast /

-optimized-qmake /

-pch /

-qt-sql-sqlite /

-qt-libjpeg /

-qt-zlib /

-qt-libpng /

-qt-freetype /

-little-endian -host-little-endian /

-no-qt3support /

-no-libtiff -no-libmng /

-no-opengl /

-no-mmx -no-sse -no-sse2 /

-no-3dnow /

-no-openssl /

-no-webkit /

-no-qvfb /

-no-phonon /

-no-nis /

-no-opengl /

-no-cups /

-no-glib /

-no-xcursor -no-xfixes -no-xrandr -no-xrender /

-no-separate-debug-info /

-nomake examples -nomake tools -nomake docs /

-qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib

複制以上配置檔案(#./configure開始至此黏貼到超級終端上,注意/後面不能有空格,如果編譯出現錯誤,删除整個目錄重新解壓重新編譯應該就不會出錯了)

編譯:# gmake

安裝:# gmake install

安裝完成後,在 /usr/local/Trolltech 目錄中有三個檔案夾:Qt-4.6.3、QtEmbedded-4.6.3、QtEmbedded-4.6.3-arm。

10、移植

我是通過NFS啟動的系統,具體操作可以參照友善的手冊,在 http://www.arm9.net/download.asp有下載下傳,在第5.5.3節通過NFS啟動系統。

[[email protected] ~]# service nfs start

啟動 NFS 服務:                                            [确定]

關掉 NFS 配額:                                            [确定]

啟動 NFS 守護程序:                                        [确定]

啟動 NFS mountd:                                          [确定]

[[email protected] ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:71:D5:B3 

          inet addr:192.168.1.229  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe71:d5b3/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:302975 errors:0 dropped:0 overruns:0 frame:0

          TX packets:103592 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:23765894 (22.6 MiB)  TX bytes:115864728 (110.4 MiB)

          Interrupt:19 Base address:0x2024

lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:2982 errors:0 dropped:0 overruns:0 frame:0

          TX packets:2982 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:156260 (152.5 KiB)  TX bytes:156260 (152.5 KiB)

[[email protected] ~]#

得到Fedora9上eth0的ip為192.168.1.229

我的共享目錄為/opt/FriendlyARM/mini2440/root_qtopia

連接配接序列槽後在nor flash啟動或nand flash啟動立即按任意一個按鍵進入vivi模式,鍵入    q進入shell of vivi

>param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.229:/opt/FriendlyARM/mini2440/root_qtopia ip=192.168.1.230:192.168.1.229:192.168.1.229:255.255.255.0:sbc2440.arm9.net:eth0:off"

>boot

啟動系統後可以ls下檢查是否為挂載的檔案系統(首先在/opt/FriendlyARM/mini2440/root_qtopia目錄下建立一個1234.txt)

Please press Enter to activate this console.

[[email protected] /]# ls

1234      dev       lib       opt       sbin      usr

Settings  etc       linuxrc   proc      sys       var

bin       home      mnt       root      tmp       www

[[email protected] /]#

11、将Fedora9上  /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib 中的所有檔案複制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib目錄中(對應目錄複制,相當于複制到了開發闆對應目錄中),其實需要的時候可以裁剪

12、将Fedora9上  /usr/local/tslib 中的庫複制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local中。即将/usr/local/tslib下的所有檔案複制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local檔案夾下。

如果運作時還缺少其他的庫,複制方法相同。也可以使用arm-angstrom-linux-gnueabi-readelf -a 程式名 | grep "Share",指令檢視需要哪些共享庫,一起複制過去。

為支援觸摸屏,開機自動設定環境變量,在2440的 /etc/profile中追加:

export LD_LIBRARY_PATH=/usr/local/lib:$QTDIR/lib:$LD_LIBRARY_PATH                                                 

export TSLIB_ROOT=/usr/local/lib    

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_FBDEVICE=/dev/fb0 

export TSLIB_PLUGINDIR=/usr/local/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CONFFILE=/usr/local/etc/ts.conf

export POINTERCAL_FILE=/etc/pointercal

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

取消/usr/local/etc/ts.conf中的第一個注釋:

# module_raw input (去掉#,并且該行頂格)

我編輯時沒有“#”

啟動mini2440運作 /usr/local/bin/ts_calibrate 校正觸摸屏。

13、安裝Qt-creator-2.0.0

把下載下傳的qt-sdk-linux-x86-opensource-2010.04.bin檔案拷到一個目錄(如前面的/root/tmp目錄),進入目錄:

設定qt-sdk-linux-x86-opensource-2010.04.bin檔案為可執行

#chmod u+x qt-sdk-linux-x86-opensource-2010.04.bin

安裝:

# ./qt-sdk-linux-x86-opensource-2010.04.bin

啟動安裝界面,預設一路Next即可。

*我們下載下傳的是Qt的SDK(qt-sdk-linux-x86-opensource-2010.04.bin),這裡可以選擇安裝Qt的開發環境,這樣,在前面安裝pc版Qt那步就可以省了,關鍵是可以省出很多時間的。

6、Qt-creator開發環境的配置

啟動Qt-creator。

在Qt-creator菜單欄Tools—〉Options…打開Options視窗。

在Options界面左側,點選Qt4—〉Qt Versions右側顯示Qt Versions設定界面。

在Qt Versions界面中點選那個藍色的大“╋”号圖示

在下方Version Name:文本框内輸入Qt的版本名,可以随便填,能區分各個版本即可(如pc版取Qt4.6.3-pc、x86版取QtE4.6.3-x86、arm版取QtE4.6.3-arm)。

單擊Qmake Location:右側Browse…按鈕,在彈出的“Select QMake Executable”視窗中找到對應版本的qmake程式(按照我們前面安轉的,pc版路徑:/usr/local/Trolltech/Qt-4.6.3/bin/qmake,x86版路徑:/usr/local/Trolltech/QtEmbedded-4.6.3/bin/qmake,arm版路徑:/usr/local/Trolltech/QtEmbedded-4.6.3-arm/bin/qmake),單擊打開,回到Qt Versions界面。

回到Qt Versions界面,單擊Debugging Helper:右側Rebuild按鈕,等待片刻,看到Debugging Helper:後出現一個綠色的“√”即可。

同理完成其他版本的添加。

添加完畢,單擊OK按鈕關閉Options視窗。

到此,Qt-creator配置完畢(我暫時就配置了這些)。

7、一個例子

從usr/local/Trolltech/QtEmbedded-4.6.3/demos下複制books例程到root/tmp檔案夾下。

啟動Qt-creator,File—〉Open File or Project…,打開root/tmp/books/books.pro。

這裡我們分兩部分,首先編譯x86下的,并運作在qvfb下,再編譯arm下的,移到開發闆下運作。

7.1、x86下的編譯與調試

在Qt-creator界面左側點選Projects圖示,打開工程設定界面。

從上往下,

在Edit Project Settings for Project books——〉Build Settings——〉Edit Build Configuration:單擊Add,在下拉清單中選擇Using Qt Version “QtE4.6.3-x86”彈出對話框單擊Ok按鈕,在Edit Build Configuration:下會出現藍色的Make QtE4.6.3-x86 Release active.字元,單擊激活QtE4.6.3-x86 Release。

在Run Settings——〉Edit run configuration:右側單擊Show Details按鈕,在打開的下拉清單中Arguments:文本框中添加參數“-qws”。

設定完畢,點選Edit圖示,回到編輯界面。

編譯:在Build菜單下,先Clean Project “books”,然後Build Project “books”,在右下角Compile Output視窗能看到編譯資訊(按我們上面這樣走來,到此編譯不會出問題的)。

運作:

啟動終端,# /usr/local/Trolltech/QtEmbedded-4.6.3/bin/qvfb -width 800 -height 480 &,啟動Qvfb。

回到Qt-creator,Build——〉Run,運作程式。

切換我們的Qvfb視窗中,是不是看到Books運作的界面了。

調試:Debug——〉Start Debugging——〉Start Debugging,即可啟動調試(請保證books路徑中沒有中文名,即不要把books工程放在了某個含有中文字元的檔案夾下,不然無法啟動調試)。

此時感覺如果前面編譯選項Edit Project Settings for Project books——〉Build Settings——〉Edit Build Configuration:選擇Debug項,則調試啟動速度比Release時的要快很多。

7.2、arm編譯并移植

編譯:在Projects設定界面下,選擇Using Qt Version “QtE4.6.3-arm”項,餘下參數不變,build。

複制編譯好的檔案(也許還有images檔案夾)到2440的NFS檔案系統的某個目錄下,我直接把books檔案夾複制過去了(在Fedora9 檔案系統下是/opt/FriendlyARM/mini2440/root_qtopia/home/plg檔案夾下)。

運作及錯誤處理:

在minicom下面,ps一下,找到qpe程序對應的PID,比如1234,然後通過kill 1234殺死Qtopia。

如果不kill  qpe的程序也可以,看是會看到界面有兩層,一層是books一層是qtopia

進入books目錄,執行./books –qws

如果前面步驟沒錯的話,就可以看到LCD上顯示books的界面了!!

此時若出現“relocation error: /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”錯誤。

解決辦法是進入主機QtEmbedded-4.6.3-arm/lib目錄下找到libstdc++.so.6連結的檔案libstdc++.so.6.0.8(通過右鍵屬性——〉基本,可以看到連結的檔案),複制并重命名為libstdc++.so.6到/opt/FriendlyARM/mini2440/root_qtopia/lib檔案夾下,之前别忘了将該檔案夾下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。

*重命名其實是比較野蠻的方法,可以用ln指令的

然後再運作./books –qws,看問題是不是解決了!

這裡有個新的問題還沒解決,就是在開發版上運作時字非常小,留着以後處理吧。

OK!至此,Fedora9下搭建Qt Creator的ARM開發環境 并 移植Qt4.6.3到mini2440算告一段落了,留下兩個問題:字型非常小的問題、開發闆上的遠端調試,留待下次解決。

這裡還有個小問題,root_qtopia裡面不是有自帶程式嗎?

直接在開發闆上的超級終端運作對應的程式如:

# cd /opt/Qtopia/bin/

# ./calculator

開發闆上是能出現界面的

若在PC的超級終端上運作則會出現

./calculator: error while loading shared libraries: libqtopia2.so.2: cannot open

shared object file: No such file or directory

原因是在boot啟動qtopia系統後,預設已經配置好qtopia環境了,在此環境下運作它的超級終端就相當于在此環境下運作,啟動相應的程式就不用先配置了!

可以查考bin/qtopia的配置方式自己配置下:

#!/bin/sh

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_CONFFILE=/usr/local/etc/ts.conf

export TSLIB_PLUGINDIR=/usr/local/lib/ts

export TSLIB_CALIBFILE=/etc/pointercal

export QTDIR=/opt/Qtopia

export QPEDIR=/opt/Qtopia

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH

TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent

if [ -e $TS_INFO_FILE -a "/bin/grep -q TouchScreen < $TS_INFO_FILE" ]; then

    export QWS_MOUSE_PROTO="TPanel:/dev/input/event0 USB:/dev/input/mice"

    if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then

        rm /etc/pointercal

    fi

else

    export QWS_MOUSE_PROTO="USB:/dev/input/mice"

    >/etc/pointercal

fi

unset TS_INFO_FILE

export QWS_KEYBOARD=TTY:/dev/tty1

export KDEDIR=/opt/kde

export HOME=/root

exec $QPEDIR/bin/qpe 1>/dev/null 2>/dev/null

我是直接複制

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_CONFFILE=/usr/local/etc/ts.conf

export TSLIB_PLUGINDIR=/usr/local/lib/ts

export TSLIB_CALIBFILE=/etc/pointercal

export QTDIR=/opt/Qtopia

export QPEDIR=/opt/Qtopia

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH

export QWS_KEYBOARD=TTY:/dev/tty1

export KDEDIR=/opt/kde

export HOME=/root

配置完後執行./calculator –qws

新的問題出現了,滑鼠不能移動了,呵呵

此問題有待解決,正在學習中,知道的補上。謝謝

轉自: http://blog.csdn.net/slj_win/article/details/6790182