Fedora12下搭建Qt Creator的ARM開發環境 并 移植Qt4.6.2到Micro2440(一)

          管理提醒: 本帖被 kasim 執行置頂操作(2010-04-11)
          Fedora12下搭建Qt Creator的ARM開發環境 并 移植Qt4.6.2到Micro2440(一)
          參考:
          環境:虛擬機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.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,這個忘了在哪下載的了,網上有很多,有些不能用,大家自己找個能用的吧。
          將 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分,分別命名為pc、x86、arm。
          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查看。

          http://www.cuteqt.com/blog/?p=582
          如果你放棄配置,則使用命令:# gmake confclean
          編譯:# gmake
          安裝:# gmake install
          安裝完成后,在 /usr/local/Trolltech 目錄中有三個文件夾:Qt-4.6.2、QtEmbedded-4.6.2、QtEmbedded-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”錯誤。
          今天晚了,明天繼續奉上……
          tslib-1.4.part1.rar (900 K) 下載次數:1066 tslib-1.4.part2.rar (223 K) 下載次數:936


           Fedora12下搭建Qt Creator的ARM開發環境 并 移植Qt4.6.2到Micro2440(二)

          管理提醒: 本帖被 kasim 執行加亮操作(2010-04-11)
          Fedora12下搭建Qt Creator的ARM開發環境 并 移植Qt4.6.2到Micro2440(二)
          繼續……
          5、安裝Qt-creator-1.3.1
          把下載的qt-creator-linux-x86-opensource-1.3.1.bin文件拷到一個目錄(如前面的/root/tmp目錄),進入目錄:
          設置qt-creator-linux-x86-opensource-1.3.1.bin文件為可執行
          #chmod +x qt-creator-linux-x86-opensource-1.3.1.bin
          安裝:
          # ./ qt-creator-linux-x86-opensource-1.3.1.bin
          啟動安裝界面,默認一路Next即可。
          *如果我們下載的是Qt的SDK(qt-sdk-linux-x86-opensource-2010.02.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.2-pc、x86版取QtE4.6.2-x86、arm版取QtE4.6.2-arm)。
          單擊Qmake Location:右側Browse…按鈕,在彈出的“Select QMake Executable”窗口中找到對應版本的qmake程序(按照我們前面安轉的,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:右側Rebuild按鈕,等待片刻,看到Debugging Helper:后出現一個綠色的“”即可。
          同理完成其他版本的添加。
          添加完畢,單擊OK按鈕關閉Options窗口。
          到此,Qt-creator配置完畢(我暫時就配置了這些)。
          7、一個例子
          從usr/local/Trolltech/QtEmbedded-4.6.2/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.2-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.2/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.2-arm”項,余下參數不變,build。
          復制編譯好的文件(也許還有images文件夾)到2440的NFS文件系統的某個目錄下,我直接把books文件夾復制過去了(在Fedora12 文件系統下是/opt/FriendlyARM/mini2440/root_qtopia/home/plg文件夾下)。
          運行及錯誤處理:
          在minicom下面,ps一下,找到qpe進程對應的PID,比如1234,然后通過kill 1234殺死Qtopia。
          進入books目錄,執行./books –qws,此時就會出現前面講到的“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”錯誤。
          我的解決辦法是進入主機/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/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命令的,參照下面這篇文章……
          http://hi.baidu.com/a263238386/blog/item/362f01ce7b11a10a93457eae.html
          然后再運行./books –qws,看問題是不是解決了!
          這里有個新的問題還沒解決,就是在開發版上運行時字非常小,留著以后處理吧。
          OK!至此,Fedora12下搭建Qt Creator的ARM開發環境 并 移植Qt4.6.2到Micro2440算告一段落了,留下兩個問題:字體非常小的問題、開發板上的遠程調試,留待下次解決。
          posted on 2013-05-13 16:19 姚先進 閱讀(475) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 通州市| 公安县| 兴隆县| 清涧县| 泰来县| 崇信县| 江陵县| 泾源县| 台州市| 东阿县| 安康市| 曲阳县| 南汇区| 乌拉特前旗| 辽阳县| 广昌县| 从化市| 紫金县| 崇左市| 龙门县| 庆云县| 晋宁县| 六安市| 安国市| 阿瓦提县| 西昌市| 白山市| 景洪市| 霍山县| 苗栗县| 凤阳县| 弥勒县| 芮城县| 阳西县| 二手房| 和龙市| 松潘县| 红桥区| 双鸭山市| 祁阳县| 郁南县|