最近買了塊天嵌的TQ210,對最新的Qt4.8.3進行了移植,現(xiàn)在做個總結(jié),方便以后查看。
Qt是一個跨平臺的C++應用程序開發(fā)框架,廣泛用于開發(fā)GUI程序。使用Qt開發(fā)的軟件,相同的代碼可以在任何支持的平臺上編譯與運行,而不需要修改源代碼。會自動依平臺的不同,表現(xiàn)平臺特有的圖形界面風格。
Qt在嵌入式開發(fā)中有著廣泛的應用,使用Qt只需編寫一次應用程序和UI,無須重新編寫源代碼,便可跨不同的桌面和嵌入式操作系統(tǒng)進行部署,既節(jié)省了時間又降低開發(fā)成本。
0.編譯環(huán)境
操作系統(tǒng):Debian wheezy 32位
gcc版本: 4.7.1
arm-linux-gcc:4.4.6 (for TQ210 EmbedSky Tech)
開發(fā)板:TQ210(天嵌)
液晶屏:7寸(800×480)
1.安裝tslib
為什么要裝tslib?主要是為了校準觸摸屏以及去抖等功能,為了能更好的使用觸摸屏還是裝吧。
下載地址:http:///projects/tslib.berlios/files/
網(wǎng)上說的tslib1.4其實就是tslib1.0.4,怎么就變成1.4了,汗。。。這個工具比較小,配置一下后直接編譯就行了。
tar -xvjf tslib-1.0.tar.bz2 cd tslib-1.0 ./autogen.sh ./configure --prefix=/opt/tslib-1.0 --host=arm-linux ac_cv_func_malloc_0_nonnull=yes make make install
prefix后面是安裝目錄,自己隨便定義,裝好后修改/opt/tslib-1.0/etc/ts.conf,去掉module_raw input 前面的#號,然后把/opt/tslib-1.0里的文件都拷入開發(fā)板,比如我放在了/usr/local里。再配置開發(fā)板的環(huán)境變量,讓tslib能正常工作。
export set TSLIB_FBDEVICE=/dev/fb0 export set TSLIB_TSDEVICE=/dev/event4 export set TSLIB_CONFFILE=/usr/local/etc/ts.conf export set TSLIB_CALIBFILE=/etc/pointercal export set TSLIB_PLUGINDIR=/usr/local/lib/ts
運行/usr/local/bin中的ts_calibrate進行校準,成功的話會出現(xiàn)界面,并讓你點擊十字符號,完成后會生成/etc/pointercal文件,這是觸摸屏的校準配置文件。
遇到的問題:
1.在autogen時出錯,提示
./autogen.sh: 4: autoreconf: not found
這是因為系統(tǒng)沒有安裝automake,裝上就行了。
aptitude install autoconf automake libtool
2.在make時出錯,提示
In function ‘open’,
inlined from ‘main’ at ts_calibrate.c:229:11:
/usr/include/bits/fcntl2.h:51:24: error: call to >‘__open_missing_mode’ declared with attribute error: open with >O_CREAT in second argument needs 3 arguments
make[2]: *** [ts_calibrate.o] Error 1
這是因為open函數(shù)的語法不符合最新的gcc,在/tests/ts_calibrate.c中加入open的第三個參數(shù):
if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) { cal_fd = open (calfile, O_CREAT | O_RDWR, 0777); } else { cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, 0777); }
2.安裝Qt4.8.3
為了開發(fā)方便,我們一般在PC端寫好程序,仿真,調(diào)試完成后再用arm-linux-gcc編譯成arm版的程序,最后拷到開發(fā)板上運行。所以我們必須編譯兩套Qt庫文件:PC端的和arm端的。
2.1.安裝Linux/X11版Qt
下載頁面:http:///downloads
選擇Qt libraries 4.8.3 for Linux/X11得到qt-everywhere-opensource-src-4.8.3.tar.gz,這個和Qt libraries 4.8.3 for embedded Linux是同一個文件,配置不同就可以編譯出不同的版本,所以我們下一個就行了,解壓開,配置,make。
tar -xvzf qt-everywhere-opensource-src-4.8.3.tar.gz cd qt-everywhere-opensource-src-4.8.3 ./configure -prefix /opt/qt-4.8.3-x11 make make install
因為庫比較大,要編譯好一段時間,完成后install,-prefix后面的是安裝目錄,根據(jù)需要修改。
在編譯過程中出錯,提示
g++: error: unrecognized command line option ‘-fuse-ld=gold’
這是Qt的一個bug:https://bugs./show_bug.cgi?id=89312
在裝有g(shù)old linker的系統(tǒng)里,編譯腳本會加入-fuse-ld=gold選項,但這個選項gcc是不支持的。解決辦法是移除該選項,找到文件src/3rdparty/webkit/Source/common.pri,屏蔽QMAKE_LFLAGS+=-fuse-ld=gold。
# QMAKE_LFLAGS+=-fuse-ld=gold
2.2.安裝embedded版Qt
源代碼是一樣的,重新配置就行了。
./configure -prefix /opt/qt-4.8.3-arm -embedded arm -release -shared -fast -no-largefile -qt-sql-sqlite -qt3support -no-xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg -make libs -nomake examples -nomake docs -nomake demo -no-nis -no-cups -iconv -no-dbus -openssl -xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 16,24,32 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-kbd-qvfb -armfpa -no-mouse-qvfb -qt-mouse-linuxtp -qt-mouse-tslib -DQT_QLOCALE_USES_FCVT -I/opt/tslib-1.0/include -L/opt/tslib-1.0/lib make make install
配置選項要根據(jù)自己的硬件選取,這樣編譯出來的庫文件才會比較小。裝好后把目錄下的imports、lib、mkspecs 、plugin文件夾拷到開發(fā)板上的/opt/Qt目錄下,目錄隨便,和環(huán)境變量里的一致就行。然后配置開發(fā)板的環(huán)境變量,讓他能找到Qt。
export set QTDIR=/opt/Qt export set QPEDIR=/opt/Qt export set LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/ export set QWS_SIZE=800x480 export set QWS_DISPLAY="LinuxFb:mmWidth80:mmHeight120:0" export set QWS_DISPLAY="LinuxFB:/dev/fb0" export set QT_PLUGIN_PATH=$QTDIR/plugins/ export set QWS_KEYBOARD="TTY:/dev/tty1" export set QWS_MOUSE_PROTO="TSLIB:/dev/event4" export PATH=$QTDIR/bin:$PATH
3.安裝Qt Creator
Qt Creator是一個開發(fā)Qt程序的IDE,當然也可以完全用命令行進行開發(fā),個人習慣而已。下載地址還是http:///downloads,選擇下面的Qt Creator 2.6.0 for Linux/X11 32-bit,如果是64位系統(tǒng),選擇64位版本。下載得到qt-creator-linux-x86-opensource-2.6.0.bin,運行安裝即可。
./qt-creator-linux-x86-opensource-2.6.0.bin
裝好后配置qmake,進入工具->選項->構(gòu)建和運行->Qt 版本,添加上面裝好的X11和arm版的qmake,qmake在各自的bin文件夾里,結(jié)果如下圖。
添加交叉編譯工具鏈GCCE。
確定,至此配置完成,接下來我們來測試一下。
4.Hello Qt
新建文件或工程->Qt Gui 應用->下一步,選上Embedded Linux,在詳情里把x11的去掉(x11是PC上的),如下圖。
后面的保持默認就行了。完成后打開界面文件,添加一個Hello Qt的Label,構(gòu)建->運行。
在左下角切換到Embedded Linux版本,構(gòu)建,復制編譯好的Hello_Qt文件到開發(fā)板,運行./Hello_Qt出錯:
QWSSocket::connectToLocalFile could not connect:: Connection refused
No Qt for Embedded Linux server appears to be running.
If you want to run this program as a server,
add the "-qws" command-line option.
按照提示添加-qws再次運行。
./Hello_Qt -qws
成功,查了一下,原來Qt的運行需要有一個Qt的服務進程,添加-qws后就是把當前Qt程序當作server了。
至此,Qt移植全部完成了。
|