QT簡介就很少說了,是諾基亞的東東,需求:將QT移植到ARM開發環境
首先的準備工做:linux
Linux環境: Linux 2.6.32-24-generic Ubuntu10.04
交叉編譯工具:arm-linux- g++-4.4.3架構
Qt安裝包: qt-everywhere-opensource-src-4.6.2.tar.gz
tslib庫: tslib-1.4.tar.gzapp
而後就開始各類編譯了:
svg
1、編譯tslib庫 1>編譯 tar zxvf tslib1.4.tar.gz cd tslib ./autogen.sh ./configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes make make install 2>拷貝PC上/usr/local/tslib/* 的文件到開發板目錄下的/usr/local cp /usr/local/tslib/* /home/profiles/2440/rootfs/usr/local -rfd 注意:/home/profiles/2440/rootfs/是nfs文件系統的根目錄,注意跟本身的環境差別,隨機應變便可 2、編譯嵌入式qt 1>編譯
tar zxvf qt-everywhere-opensource-src-4.6.2.tar.gz工具
cd qt-everywhere-opensource-src-4.6.2 ./configure \ -prefix /usr/local/qt-4.6.2-arm \ (安裝路徑) -opensource \ (自由版本) -confirm-license \ (遵照協議yes) -release \ (編譯和鏈接QT時關閉調試) -shared \ (使用QT動態庫) -embedded arm \ (嵌入式arm架構) -xplatform qws/linux-arm-g++ \ (交叉編譯時的目標平臺) -no-qt3support \ (關閉QT3支持功能) -fast \ (只對庫及子目錄make來快速配置QT) -no-largefile \ (使大文件支持無效) -qt-mouse-tslib \ (使用tslib來驅動鼠標箭頭運行,即支持觸摸屏) -I /usr/local/tslib/include \ (添加一個顯式的include路徑) -L /uar/local/tslib/lib \ (添加一個顯式的lib路徑) -make tools \ (構建tools) -nomake demos \ (不構建demos) -nomake examples \(不構建examples) -nomake docs \ (不構建docs) -qt-libjpeg \ (使用jpeg庫) -qt-libpng \ (使用png庫) -qt-libtiff \ (使用tiff庫) -multimedia \ (構建QT多媒體模塊) -no-qvfb \ (不構建QVFB模塊) -no-svg \ (不構建SVG模塊) -no-cups \ (不編譯CUPS支持) 2>拷貝 cp /usr/local/qt-4.6.2-arm /home/profiles/2440/rootfs/usr/local/qt-4.6.2-arm -rfd 3>更改成大字體,而且支持中文,wenquanyi_120_50.qpf須要下載 (開發板上操做) rm /usr/local/qt-4.6.2-arm/lib/fonts/* -f cp wenquanyi_120_50.qpf /usr/local/qt-4.6.2-arm/lib/fonts/ 3>修改PC上環境變量以便編譯 export ARMQTDIR=/usr/local/qt-4.6.2-arm \ export PATH=$ARMQTDIR/bin:$PATH \ export MANPATH=$ARMQTDIR/man:$MANPATH \ export LD_LIBRARY_PATH=$ARMQTDIR/lib:$LD_LIBRARY_PATH \ qmake -v能夠查看版本 QMake version 2.01a Using Qt version 4.6.2 in /usr/local/qt-4.6.2-arm/lib 4>寫一個測試程序並交叉編譯 #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel *label = new QLabel("Hello Qt!"); label->show(); return app.exec(); } 保存爲hello.cpp 執行: qmake -project qmake hello.pro (若是有錯誤提示QMAKESPEC has not been set, so configuration cannot be deduced. 則export QMAKESPEC=/usr/local/qt-4.6.2-arm/mkspecs/qws/linux-arm-g++設置環境變量後, 再qmake hello.pro,不然執行下一步) make cp hello /home/profiles/2440/rootfs/sbin 拷貝程序到開發板 5>修改開發板ts配置文件 vi /usr/local/etc/ts.conf 去掉module_raw input前面的註釋和空格並保存 運行一下ts校訂程序 /usr/local/bin/ts_calibrate 6>設置環境變量,開發板上執行 export QTDIR=/usr/local/qt-4.6.2-arm export T_ROOT=/usr/local export PATH=$QTDIR/bin:$PATH export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_TSDEVICE=/dev/input/event0 export TSLIB_PLUGINDIR=$T_ROOT/lib/ts export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf export TSLIB_CALIBFILE=/etc/pointercal export QWS_MOUSE_PROTO=Tslib:/dev/input/event0 export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib (注意/dev/fb0是framebuffer設備結點,/dev/input/event0是觸摸屏設備結點名稱, 注意本身的開發板是否一致,包括交叉編譯並安裝qt的目錄/usr/local/qt-4.6.2-arm, 觸摸屏校驗文件的位置/etc/pointercal,配置文件的位置$T_ROOT/etc/ts.conf) 7>運行hello程序 hello -qws 8>若須要開機即啓動本身的qt程序,則須要修改啓動腳本 vi etc/init.d/rcS (若腳本里有啓動qtopia,如: /bin/qtopia & echo " " > /dev/tty1 echo "Starting Qtopia, please waiting..." > /dev/tty1 則註釋這三句,在前面加上# #/bin/qtopia & #echo " " > /dev/tty1 #echo "Starting Qtopia, please waiting..." > /dev/tty1 ) 在文件最後加上 /bin/mypda & echo " " > /dev/tty1 echo "Starting my PDA..." > /dev/tty1 sleep 1 這樣就會自動啓動/bin目錄下的mypda這個腳本。 創建這個腳本 vi /bin/mypda 輸入 #!/bin/sh export QTDIR=/usr/local/qt-4.6.2-arm export T_ROOT=/usr/local export PATH=$QTDIR/bin:$PATH export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_TSDEVICE=/dev/input/event0 export TSLIB_PLUGINDIR=$T_ROOT/lib/ts export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf export TSLIB_CALIBFILE=/etc/pointercal export QWS_MOUSE_PROTO=Tslib:/dev/input/event0 export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib exec sbin/hello -qws 保存,chmod +x /bin/mypda,加執行權限 大功告成,reboot體驗一下吧!