Fedora9 下搭建Qt Creator的ARM開發環境

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、到光盤linux/中複製arm-linux-gcc-4.3.2.tgz準備待用

4、準備友善光盤裏的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啓動系統。
[root@localhost ~]# service nfs start
啓動 NFS 服務:                                            [確定]
關掉 NFS 配額:                                            [確定]
啓動 NFS 守護進程:                                        [確定]
啓動 NFS mountd:                                          [確定]
[root@localhost ~]# 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)

[root@localhost ~]#
得到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.
[root@FriendlyARM /]# ls
1234      dev       lib       opt       sbin      usr
Settings  etc       linuxrc   proc      sys       var
bin       home      mnt       root      tmp       www
[root@FriendlyARM /]#
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


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