歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Fedora 12下搭建Qt Creator的ARM開發環境並移植Qt4.6.2到Micro2440

Fedora 12下搭建Qt Creator的ARM開發環境並移植Qt4.6.2到Micro2440

日期:2017/2/28 16:18:44   编辑:Linux教程
環境:虛擬機Fedora12(建議安裝Vmware Tools,詳細安裝方法參照Vmware幫助文檔),USB串口,minicom終端。(minicom經常打不開ttyUSB0設備,我的解決方法是,打不開時就將USB串口移除,運行minicom,然後再接上USB串口,此時運行minicom一般都能打開設備)
軟件准備: http://qt.nokia.com/downloads-cn下載最新版的軟件包,當前是:
用於 Linux/X11 32 Qt Creator 1.3.1 二進制軟件包qt-creator-linux-x86-opensource-1.3.1.binhttp://qt.nokia.com/downloads/qt-creator-binary-for-linux-x11-32-bit
用於嵌入式 Linux Qt 4.6.2qt-everywhere-opensource-src-4.6.2.tar.gzhttp://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
下載Root_Qtopia,我用的是友善光盤裡的root_qtopia-20100108.tar.gz,還有要下載tslib1.4 tslib1.4下載在Linux公社的1號FTP服務器裡,下載地址見:

http://www.linuxidc.com/Linux/2011-08/40398.htm


qt-everywhere-opensource-src-4.6.2.tar.gz 壓縮包解壓為3份,分別編譯 PC ,嵌入式 x86 arm 三個版本。
我在root目錄下建立tmp文件夾,將qt-everywhere-opensource-src-4.6.2.tar.gz直接解壓後復制2分,分別命名為pcx86arm

1. 編譯 PC 版: 進入pc目錄 #./configure # gmake # gmake install 安裝過程比較長,沒有碰到過錯誤。
2. 編譯嵌入式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.2/bin目錄。
3. 編譯嵌入式arm版(需要 arm-linux-gcc 的支持): 使用友善自帶的ARM-Linux GCC 4.3.2編譯完了,程序移植到開發板上後,出現Segmentation Fault錯誤,按原文,使用4.1.2正常。
直接將arm920t-eabi.tgz解壓縮到根目錄,不可以像文章中說的那樣“我把它放在:/usr/local/arm/4.1.2/ ”,最起碼我放過去後出錯了。 把編譯器路徑加入系統環境變量,運行命令: #gedit /root/.bashrc 編輯/root/.bashrc文件,在最後一行加上 export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH

編譯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後才能生成。
設置環境變量,以便編譯時找到相關的庫: # 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參數): 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 這一步必須有,不然肯定出錯。
配置: 必須加上“-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-arm ”參數, 不然安裝後不在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
上面劃掉的藍色內容,可以不要的,這樣編輯也不會出錯(虛擬機搞壞了,不得已重裝,配置參數時忘了干上面的工作了,結果發現沒出錯)。

關於配置參數,參照一下這篇文章吧,可以用configure -embedded –help查看。

如果你放棄配置,則使用命令:# gmake confclean
編譯:# gmake
安裝:# gmake install
安裝完成後,在 /usr/local/Trolltech 目錄中有三個文件夾:Qt-4.6.2QtEmbedded-4.6.2QtEmbedded-4.6.2-arm
4、移植 我是通過NFS啟動的系統,具體操作可以參照友善的手冊,在http://www.arm9.net/download.asp有下載,在第5.5.3節通過NFS啟動系統。
Fedora12 /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib 中的所有文件復制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib目錄中(對應目錄復制,相當於復制到了開發板對應目錄中),其實需要的時候可以裁剪,看原文吧。
Fedora12 /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 (去掉#,並且該行頂格) 我編輯時沒有“#
啟動Micro2440運行 /usr/local/bin/ts_calibrate 校正觸摸屏。
到此Qt4.6.2的移植暫告一段落,移植還沒有完,此時如果在開發板上運行Qt4.6.2-arm編譯的程序,則會出現“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”錯誤。
Copyright © Linux教程網 All Rights Reserved