Fedora12下搭建Qt Creator的ARM開發(fā)環(huán)境 并 移植Qt4.6.2到Micro2440(一)
參考:
環(huán)境:虛擬機(jī)Fedora12(建議安裝Vmware Tools,詳細(xì)安裝方法參照Vmware幫助文檔),USB串口,minicom終端。(minicom經(jīng)常打不開ttyUSB0設(shè)備,我的解決方法是,打不開時(shí)就將USB串口移除,運(yùn)行minicom,然后再接上USB串口,此時(shí)運(yùn)行minicom一般都能打開設(shè)備)
軟件準(zhǔn)備:
到http://qt.nokia.com/downloads-cn下載最新版的軟件包,當(dāng)前是:
用于 Linux/X11 32位 的 Qt Creator 1.3.1 二進(jìn)制軟件包qt-creator-linux-x86-opensource-1.3.1.bin(http://qt.nokia.com/downloads/qt-creator-binary-for-linux-x11-32-bit)
用于嵌入式 Linux 的 Qt 庫 4.6.2包qt-everywhere-opensource-src-4.6.2.tar.gz(http://qt.nokia.com/downloads/embedded-linux-cpp)
到http://hi.baidu.com/jiyeqian/blog/item/f46d26a2ff3f7da6caefd0d6.html下載arm920t-eabi.tgz(即arm-linux-gcc-4.1.2)(http://qtextended.org/downloads/toolchains/arm920t-eabi.tgz)
到http://www.arm9.net/download.asp下載Root_Qtopia,我用的是友善光盤里的root_qtopia-20100108.tar.gz(http://www.arm123.com.cn/linux/root_qtopia-20100108.tar.gz)
下載tslib1.4,這個(gè)忘了在哪下載的了,網(wǎng)上有很多,有些不能用,大家自己找個(gè)能用的吧。
將 qt-everywhere-opensource-src-4.6.2.tar.gz 壓縮包解壓為3份,分別編譯 PC ,嵌入式 x86 和 arm 三個(gè)版本。
我在root目錄下建立tmp文件夾,將qt-everywhere-opensource-src-4.6.2.tar.gz直接解壓后復(fù)制2分,分別命名為pc、x86、arm。
1. 編譯 PC 版:
進(jìn)入pc目錄
#./configure
# gmake
# gmake install
安裝過程比較長(zhǎng),沒有碰到過錯(cuò)誤。
2. 編譯嵌入式x86版:
進(jìn)入x86目錄
# ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
# gmake
# gmake install
安裝過程比較長(zhǎng),沒有碰到過錯(cuò)誤。
編譯安裝PC版中的 qvfb:
進(jìn)入pc/tools/qvfb/目錄
#make
編譯完畢,將pc/bin目錄下的qvfb文件復(fù)制到/usr/local/Trolltech/QtEmbedded-4.6.2/bin目錄。
3. 編譯嵌入式arm版(需要 arm-linux-gcc 的支持):
使用友善自帶的ARM-Linux GCC 4.3.2編譯完了,程序移植到開發(fā)板上后,出現(xiàn)Segmentation Fault錯(cuò)誤,按原文,使用4.1.2正常。
直接將arm920t-eabi.tgz解壓縮到根目錄,不可以像文章中說的那樣“我把它放在:/usr/local/arm/4.1.2/ ”,最起碼我放過去后出錯(cuò)了。
把編譯器路徑加入系統(tǒng)環(huán)境變量,運(yùn)行命令:
#gedit /root/.bashrc
編輯/root/.bashrc文件,在最后一行加上 export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH
編譯tslib對(duì)觸摸屏支持:
下載,tslib1.4.tar.gz,解壓后:
# ./configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
# make
# make install
我下載的包解壓后沒有configure文件,需要運(yùn)行autogen.sh后才能生成。
設(shè)置環(huán)境變量,以便編譯時(shí)找到相關(guān)的庫:
# export CPLUS_INCLUDE_PATH=/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++:/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++/arm-none-linux-gnueabi
# export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH
修改qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加lts參數(shù)):
QMAKE_CC = arm-linux-gcc -lts
QMAKE_CXX = arm-linux-g++ -lts
QMAKE_LINK = arm-linux-g++ -lts
QMAKE_LINK_SHLIB = arm-linux-g++ -lts
這一步必須有,不然肯定出錯(cuò)。
配置:
必須加上“-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-arm ”參數(shù), 不然安裝后不在QtEmbedded-4.6.2-arm文件夾下,而是覆蓋了QtEmbedded-4.6.2。
# ./configure \
-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-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
上面劃掉的藍(lán)色內(nèi)容,可以不要的,這樣編輯也不會(huì)出錯(cuò)(虛擬機(jī)搞壞了,不得已重裝,配置參數(shù)時(shí)忘了干上面的工作了,結(jié)果發(fā)現(xiàn)沒出錯(cuò))。
關(guān)于配置參數(shù),參照一下這篇文章吧,可以用configure -embedded –help查看。
http://www.cuteqt.com/blog/?p=582
如果你放棄配置,則使用命令:# gmake confclean
編譯:# gmake
安裝:# gmake install
安裝完成后,在 /usr/local/Trolltech 目錄中有三個(gè)文件夾:Qt-4.6.2、QtEmbedded-4.6.2、QtEmbedded-4.6.2-arm。
4、移植
我是通過NFS啟動(dòng)的系統(tǒng),具體操作可以參照友善的手冊(cè),在http://www.arm9.net/download.asp有下載,在第5.5.3節(jié)通過NFS啟動(dòng)系統(tǒng)。
將Fedora12上 /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib 中的所有文件復(fù)制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib目錄中(對(duì)應(yīng)目錄復(fù)制,相當(dāng)于復(fù)制到了開發(fā)板對(duì)應(yīng)目錄中),其實(shí)需要的時(shí)候可以裁剪,看原文吧。
將Fedora12上 /usr/local/tslib 中的庫復(fù)制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local中。即將/usr/local/tslib下的所有文件復(fù)制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local文件夾下。
如果運(yùn)行時(shí)還缺少其他的庫,復(fù)制方法相同。也可以使用arm-angstrom-linux-gnueabi-readelf -a 程序名 | grep "Share",命令查看需要哪些共享庫,一起復(fù)制過去。
為支持觸摸屏,開機(jī)自動(dòng)設(shè)置環(huán)境變量,在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中的第一個(gè)注釋:
# module_raw input (去掉#,并且該行頂格)
我編輯時(shí)沒有“#”
啟動(dòng)Micro2440運(yùn)行 /usr/local/bin/ts_calibrate 校正觸摸屏。
到此Qt4.6.2的移植暫告一段落,移植還沒有完,此時(shí)如果在開發(fā)板上運(yùn)行Qt4.6.2-arm編譯的程序,則會(huì)出現(xiàn)“relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”錯(cuò)誤。
今天晚了,明天繼續(xù)奉上……
tslib-1.4.part1.rar (900 K) 下載次數(shù):985
tslib-1.4.part2.rar
Fedora12下搭建Qt Creator的ARM開發(fā)環(huán)境 并 移植Qt4.6.2到Micro2440(二)
繼續(xù)……
5、安裝Qt-creator-1.3.1
把下載的qt-creator-linux-x86-opensource-1.3.1.bin文件拷到一個(gè)目錄(如前面的/root/tmp目錄),進(jìn)入目錄:
設(shè)置qt-creator-linux-x86-opensource-1.3.1.bin文件為可執(zhí)行
#chmod +x qt-creator-linux-x86-opensource-1.3.1.bin
安裝:
# ./ qt-creator-linux-x86-opensource-1.3.1.bin
啟動(dòng)安裝界面,默認(rèn)一路Next即可。
*如果我們下載的是Qt的SDK(qt-sdk-linux-x86-opensource-2010.02.bin),這里可以選擇安裝Qt的開發(fā)環(huán)境,這樣,在前面安裝pc版Qt那步就可以省了,關(guān)鍵是可以省出很多時(shí)間的。
6、Qt-creator開發(fā)環(huán)境的配置
啟動(dòng)Qt-creator。
在Qt-creator菜單欄Tools—〉Options…打開Options窗口。
在Options界面左側(cè),點(diǎn)擊Qt4—〉Qt Versions右側(cè)顯示Qt Versions設(shè)置界面。
在Qt Versions界面中點(diǎn)擊那個(gè)藍(lán)色的大“╋”號(hào)圖標(biāo)
在下方Version Name:文本框內(nèi)輸入Qt的版本名,可以隨便填,能區(qū)分各個(gè)版本即可(如pc版取Qt4.6.2-pc、x86版取QtE4.6.2-x86、arm版取QtE4.6.2-arm)。
單擊Qmake Location:右側(cè)Browse…按鈕,在彈出的“Select QMake Executable”窗口中找到對(duì)應(yīng)版本的qmake程序(按照我們前面安轉(zhuǎn)的,pc版路徑:/usr/local/Trolltech/Qt-4.6.2/bin/qmake,x86版路徑:/usr/local/Trolltech/QtEmbedded-4.6.2/bin/qmake,arm版路徑:/usr/local/Trolltech/QtEmbedded-4.6.2-arm/bin/qmake),單擊打開,回到Qt Versions界面。
回到Qt Versions界面,單擊Debugging Helper:右側(cè)Rebuild按鈕,等待片刻,看到Debugging Helper:后出現(xiàn)一個(gè)綠色的“√”即可。
同理完成其他版本的添加。
添加完畢,單擊OK按鈕關(guān)閉Options窗口。
到此,Qt-creator配置完畢(我暫時(shí)就配置了這些)。
7、一個(gè)例子
從usr/local/Trolltech/QtEmbedded-4.6.2/demos下復(fù)制books例程到root/tmp文件夾下。
啟動(dòng)Qt-creator,F(xiàn)ile—〉Open File or Project…,打開root/tmp/books/books.pro。
這里我們分兩部分,首先編譯x86下的,并運(yùn)行在qvfb下,再編譯arm下的,移到開發(fā)板下運(yùn)行。
7.1、x86下的編譯與調(diào)試
在Qt-creator界面左側(cè)點(diǎn)擊Projects圖標(biāo),打開工程設(shè)置界面。
從上往下,
在Edit Project Settings for Project books——〉Build Settings——〉Edit Build Configuration:?jiǎn)螕鬉dd,在下拉列表中選擇Using Qt Version “QtE4.6.2-x86”彈出對(duì)話框單擊Ok按鈕,在Edit Build Configuration:下會(huì)出現(xiàn)藍(lán)色的Make QtE4.6.3-x86 Release active.字符,單擊激活QtE4.6.3-x86 Release。
在Run Settings——〉Edit run configuration:右側(cè)單擊Show Details按鈕,在打開的下拉列表中Arguments:文本框中添加參數(shù)“-qws”。
設(shè)置完畢,點(diǎn)擊Edit圖標(biāo),回到編輯界面。
編譯:在Build菜單下,先Clean Project “books”,然后Build Project “books”,在右下角Compile Output窗口能看到編譯信息(按我們上面這樣走來,到此編譯不會(huì)出問題的)。
運(yùn)行:
啟動(dòng)終端,# /usr/local/Trolltech/QtEmbedded-4.6.2/bin/qvfb -width 800 -height 480 &,啟動(dòng)Qvfb。
回到Qt-creator,Build——〉Run,運(yùn)行程序。
切換我們的Qvfb窗口中,是不是看到Books運(yùn)行的界面了。
調(diào)試:Debug——〉Start Debugging——〉Start Debugging,即可啟動(dòng)調(diào)試(請(qǐng)保證books路徑中沒有中文名,即不要把books工程放在了某個(gè)含有中文字符的文件夾下,不然無法啟動(dòng)調(diào)試)。
此時(shí)感覺如果前面編譯選項(xiàng)Edit Project Settings for Project books——〉Build Settings——〉Edit Build Configuration:選擇Debug項(xiàng),則調(diào)試啟動(dòng)速度比Release時(shí)的要快很多。
7.2、arm編譯并移植
編譯:在Projects設(shè)置界面下,選擇Using Qt Version “QtE4.6.2-arm”項(xiàng),余下參數(shù)不變,build。
復(fù)制編譯好的文件(也許還有images文件夾)到2440的NFS文件系統(tǒng)的某個(gè)目錄下,我直接把books文件夾復(fù)制過去了(在Fedora12 文件系統(tǒng)下是/opt/FriendlyARM/mini2440/root_qtopia/home/plg文件夾下)。
運(yùn)行及錯(cuò)誤處理:
在minicom下面,ps一下,找到qpe進(jìn)程對(duì)應(yīng)的PID,比如1234,然后通過kill 1234殺死Qtopia。
進(jìn)入books目錄,執(zhí)行./books –qws,此時(shí)就會(huì)出現(xiàn)前面講到的“relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”錯(cuò)誤。
我的解決辦法是進(jìn)入主機(jī)/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib目錄下找到libstdc++.so.6鏈接的文件libstdc++.so.6.0.8(通過右鍵屬性——〉基本,可以看到鏈接的文件),復(fù)制并重命名為libstdc++.so.6到/opt/FriendlyARM/mini2440/root_qtopia/lib文件夾下,之前別忘了將該文件夾下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。
*重命名其實(shí)是比較野蠻的方法,可以用ln命令的,參照下面這篇文章……
http://hi.baidu.com/a263238386/blog/item/362f01ce7b11a10a93457eae.html
然后再運(yùn)行./books –qws,看問題是不是解決了!
這里有個(gè)新的問題還沒解決,就是在開發(fā)版上運(yùn)行時(shí)字非常小,留著以后處理吧。
OK!至此,F(xiàn)edora12下搭建Qt Creator的ARM開發(fā)環(huán)境 并 移植Qt4.6.2到Micro2440算告一段落了,留下兩個(gè)問題:字體非常小的問題、開發(fā)板上的遠(yuǎn)程調(diào)試,留待下次解決。