QT 4.6.3移植日志


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版本下载:

下载地址在帮客之家的1号FTP服务器里,下载地址:

FTP地址:ftp://www.bkjia.com

用户名:www.bkjia.com

密码:www.muu.cc

在 2011年LinuxIDC.com\9月\QT 4.6.3移植日志

下载方法见这里 http://www.bkjia.net/thread-1187-1-1.html

 

注意配置要正确,否则触摸屏可能出现只能移动鼠标而不能点击的情况。

  1. ./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。内容如下:

  1. ./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行左右的地方:

  1. /*            //EmbedSky_del start 20091208 
  2.     canaccel = useOffscreen(); 
  3.     if(canaccel) 
  4.         setupOffScreen(); 
  5. */            //EmbedSky_del end 20091208   
  6.     canaccel = false;  

726行左右的地方:

  1. /*                //EmbedSky_del start 20091208 
  2.     if (canaccel) { 
  3.         *entryp=0; 
  4.         *lowest = mapsize; 
  5.         insert_entry(*entryp, *lowest, *lowest);  // dummy entry to mark start 
  6.     } 
  7. */                //EmbedSky_del end 20091208   
  8.     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下,去掉第二行前的#号

  1. # Uncomment if you wish to use the linux input layer event interface   
  2. module_raw input  

6:加载QT运行环境变量,修改开发版文件系统的/etc/profile文件

  1. # Ash profile    
  2. # vim: syntax=sh   
  3. # No core files by default   
  4. #ulimit -S -c 0 > /dev/null 2>&1   
  5. ############## QT start #################   
  6. export set QTDIR=/opt/QT4.6.3  
  7. export set QWS_DISPLAY="LinuxFB:/dev/fb0"  
  8. export set QWS_DISPLAY="LinuxFB:mmWidth130:mmHeight100:0"  
  9. export set QWS_KEYBOARD="TTY:/dev/tty1"  
  10. if [ -f /sys/class/input/input0/uevent ] ; then  
  11. export set TSLIB_TSDEVICE=/dev/event0  
  12. export set TSLIB_CALIBFILE=/etc/pointercal  
  13. export set TSLIB_CONFFILE=/etc/ts.conf  
  14. export set TSLIB_PLUGINDIR=$QTDIR/lib/ts  
  15. export set QWS_MOUSE_PROTO="TSLIB:/dev/event0"  
  16. fi  
  17. export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/  
  18. export set PATH=$QTDIR/bin:$PATH  
  19. export set LD_LIBRARY_PATH=$QTDIR/lib:$QTDIR/plugins/imageformats:$LD_LIBRARY_PATH  
  20. ############## QT end #####################   
  21. USER="`id -un`"  
  22. LOGNAME=$USER  
  23. PS1='[/u@/h /W]# '  
  24. PATH=$PATH  
  25. HOSTNAME=`/bin/hostname`  
  26. export USER LOGNAME PS1 PATH  

到这里就可以在开发板上运行QT程序了。

7:实现开机运行QT程序

由于开机启动程序是在/etc/init.d/rcS中加载的,然而运行QT程序首先必须设置运行QT的环境变量,可/etc/profile是在/etc/init.d/rcS后加载的,所以为了实现开机运行程序,必须先设置环境。这里我们可以把设置环境和启动程序用一个脚本完成。新建一文件QT4,放入bin或是sbin中,设置其权限为可执行。其内容如下: (这里启动我自己编写的一个QTbeep程序)

  1. #!/bin/sh   
  2. echo Start QT4.6.3 > /dev/tq2440_serial0  
  3. export set QTDIR=/opt/QT4.6.3  
  4. export set QWS_DISPLAY="LinuxFB:/dev/fb0"  
  5. export set QWS_DISPLAY="LinuxFB:mmWidth130:mmHeight100:0"  
  6. export set QWS_KEYBOARD="TTY:/dev/tty1"  
  7. if [ -f /sys/class/input/input0/uevent ] ; then  
  8. export set TSLIB_TSDEVICE=/dev/event0  
  9. export set TSLIB_CALIBFILE=/etc/pointercal  
  10. export set TSLIB_CONFFILE=/etc/ts.conf  
  11. export set TSLIB_PLUGINDIR=$QTDIR/lib/ts  
  12. export set QWS_MOUSE_PROTO="TSLIB:/dev/event0"  
  13. fi  
  14. export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/  
  15. export set PATH=$QTDIR/bin:$PATH  
  16. export set LD_LIBRARY_PATH=$QTDIR/lib:$QTDIR/plugins/imageformats:$LD_LIBRARY_PATH  
  17. if [ -f /etc/pointercal ] ; then  
  18. $QTDIR/bin/QTbeep -qws 1>/dev/null 2>/dev/null  
  19. else  
  20. $QTDIR/bin/ts_calibrate  
  21. $QTDIR/bin/QTbeep -qws 1>/dev/null 2>/dev/null  
  22. fi  

这样我们就可以直接在/etc/init.d/rcS中加入QT4&便可。

(注:此环境变量只影响QT4中启动的程序,进入系统后的环境变量依赖于/etc/profile)

相关内容