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