QT下载:http://qt.nokia.com/downloads
其中Qt SDK for Open Source C++ development on Linux/X11 32-bit 是PC上的SDK,包含了QTCreator。
Qt for Open Source C++ development on Embedded Linux是嵌入式版本的开发库。
这里只叙述arm版的安装。
1:编译tslib库
天嵌提供的tslib1.41版本下载:http://download.csdn.net/source/2661205
注意配置要正确,否则触摸屏可能出现只能移动鼠标而不能点击的情况。
view plaincopy to clipboardprint?
- ./configure --host=arm-linux -disable-hp3600 --disable-arctic2 --disable-mk712 --disable-collie --disable-corgi --disable-ucb1x00 --disable-linear-h2200 --with-gnu-ld --prefix=/opt/QT/tslib ac_cv_func_malloc_0_nOnnull=yes
配置完后make,make install。这里将tslib安装在/opt/QT/tslib下。
2:编译qt-embedded-arm,安装在/opt/QT/qt-embedded-4.6.3-arm下。这里新建一config.sh文件保存配置,然后运行./config.sh。内容如下:
view plaincopy to clipboardprint?
- ./configure -prefix /opt/QT/qt-embedded-4.6.3-arm -release -opensource -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libjpeg -make libs -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-tslib -I/opt/QT/tslib/include -L/opt/QT/tslib/lib
不过就这么编译,移植到开发板上会出现Segmentation Fault的错误(虽然运行两次还是可以启动QT程序),此错误其实是图形缓冲区linuxfb的问题,可以修改qt-everywhere-opensource-src-4.6.3/src/gui/embedded/qscreenlinuxfb_qws.cpp源码:
424行左右的地方:
view plaincopy to clipboardprint?
-
-
-
-
-
- canaccel = false;
726行左右的地方:
view plaincopy to clipboardprint?
-
-
-
-
-
-
-
- canaccel = false;
除此之外,在./configure中如果没有去掉一些不必要或硬件不支持的选项也可能引发Segmentation Fault问题,对于S3C2440开发板可以参考上面的配置。
修改之后make,make install
3:将tslib/lib下所有so文件复制到qt-embedded-4.6.3-arm/lib下(不复制的话则第4步编译程序时找不到某些库)。ts和pkgconfig文件夹可以不复制。
4:将qt-embedded-4.6.3-arm下的lib和plugins文件夹复制到开发板文件系统的/opt/QT4.6.3下。然后删除.so以外的文件并只保留需要的字体。
5:复制tslib/etc/ts.conf文件到开发板文件系统的/etc下,去掉第二行前的#号
view plaincopy to clipboardprint?
- # Uncomment if you wish to use the linux input layer event interface
- module_raw input
6:加载QT运行环境变量,修改开发版文件系统的/etc/profile文件
view plaincopy to clipboardprint?
- # Ash profile
- # vim: syntax=sh
- # No core files by default
- #ulimit -S -c 0 > /dev/null 2>&1
- ############## QT start #################
- export set QTDIR=/opt/QT4.6.3
- export set QWS_DISPLAY="LinuxFB:/dev/fb0"
- export set QWS_DISPLAY="LinuxFB:mmWidth130:mmHeight100:0"
- export set QWS_KEYBOARD="TTY:/dev/tty1"
- if [ -f /sys/class/input/input0/uevent ] ; then
- export set TSLIB_TSDEVICE=/dev/event0
- export set TSLIB_CALIBFILE=/etc/pointercal
- export set TSLIB_COnFFILE=/etc/ts.conf
- export set TSLIB_PLUGINDIR=$QTDIR/lib/ts
- export set QWS_MOUSE_PROTO="TSLIB:/dev/event0"
- fi
- export set QT_QWS_FOnTDIR=$QTDIR/lib/fonts/
- export set PATH=$QTDIR/bin:$PATH
- export set LD_LIBRARY_PATH=$QTDIR/lib:$QTDIR/plugins/imageformats:$LD_LIBRARY_PATH
- ############## QT end #####################
- USER="`id -un`"
- LOGNAME=$USER
- PS1='[/u@/h /W]# '
- PATH=$PATH
- HOSTNAME=`/bin/hostname`
- export USER LOGNAME PS1 PATH
到这里就可以在开发板上运行QT程序了。
7:实现开机运行QT程序
由于开机启动程序是在/etc/init.d/rcS中加载的,然而运行QT程序首先必须设置运行QT的环境变量,可/etc/profile是在/etc/init.d/rcS后加载的,所以为了实现开机运行程序,必须先设置环境。这里我们可以把设置环境和启动程序用一个脚本完成。新建一文件QT4,放入bin或是sbin中,设置其权限为可执行。其内容如下: (这里启动我自己编写的一个QTbeep程序)
view plaincopy to clipboardprint?
- #!/bin/sh
- echo Start QT4.6.3 > /dev/tq2440_serial0
- export set QTDIR=/opt/QT4.6.3
- export set QWS_DISPLAY="LinuxFB:/dev/fb0"
- export set QWS_DISPLAY="LinuxFB:mmWidth130:mmHeight100:0"
- export set QWS_KEYBOARD="TTY:/dev/tty1"
- if [ -f /sys/class/input/input0/uevent ] ; then
- export set TSLIB_TSDEVICE=/dev/event0
- export set TSLIB_CALIBFILE=/etc/pointercal
- export set TSLIB_COnFFILE=/etc/ts.conf
- export set TSLIB_PLUGINDIR=$QTDIR/lib/ts
- export set QWS_MOUSE_PROTO="TSLIB:/dev/event0"
- fi
- export set QT_QWS_FOnTDIR=$QTDIR/lib/fonts/
- export set PATH=$QTDIR/bin:$PATH
- export set LD_LIBRARY_PATH=$QTDIR/lib:$QTDIR/plugins/imageformats:$LD_LIBRARY_PATH
- if [ -f /etc/pointercal ] ; then
- $QTDIR/bin/QTbeep -qws 1>/dev/null 2>/dev/null
- else
- $QTDIR/bin/ts_calibrate
- $QTDIR/bin/QTbeep -qws 1>/dev/null 2>/dev/null
- fi
这样我们就可以直接在/etc/init.d/rcS中加入QT4&便可。
(注:此环境变量只影响QT4中启动的程序,进入系统后的环境变量依赖于/etc/profile)