您的位置:首页 > 编程语言 > Qt开发

TQ210学习笔记:TQ210移植qt

2016-08-02 13:50 281 查看
这几天搞了一块TQ210的板子,由于要求,需要移植qt进去,于是搞了近一个星期,现在终于看到了一点希望。

开始找了一篇博客,我是按照他的步骤来,http://emouse.cnblogs.com

首先是移植TSLIB :

移植这个的原因是:因为电磁噪声的缘故,

触摸屏容易存在点击不准确、有抖动等问题。tslib是一个开源的程序,能够为触摸屏驱动获

得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用

提供了一个统一的接口。

移植tslib的步骤:

1、下载tslib源码包:http://download.csdn.net/source/3177449

2、配置编译和安装:(bz2–>解压用-xvjf, tar.gz–>解压用-zxvf )

# tar -zxvf tslib-1.4.tar.gz
# cd tslib
# ./autogen.sh
#./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/usr/local/tslib
# make
# make install


-prefix=/usr/local/tslib是指定安装路径,其实包括下文的安装配置,路径都可以不指定,默认就是安装到/usr/local/目录下

ac_cv_func_malloc_0_nonnull=yes为了防止make的时候出现这个错误:“undefined reference to “rpl_malloc”

./configure会检查ac_cv_func_malloc_0_nonnull这个过程,而这样会导致rpl_malloc问题,所以自建一个cache来欺骗configure。据说有修正该bug的tslib版本,但是网上都那么做的,那么我也就照着做吧,linux.cache代表任意一个cache文件,这样编译以后就不会出错了。

3、tslib的开发板移植与测试:

(1)将交叉编译的tslib安装到开发板上其实就是拷贝相关的库文件并添加系统环境变量而已,所以相对操作较为简单,主要的就是需要找对目录就行。

按照上面的操作方法,交叉编译安装后的文件在/usr/local/tslib目录下,将这些文件拷贝到开发板的/usr/local里,(打开SercureCRT和虚拟机,通过NFS网路挂载到根文件系统,在cp到/usr/local)

在SercureCRT里修改/usr/local/etc/ts.conf文件,去掉module_raw input 前面的#号,注意moudule要顶格写,否则会出现“No raw modules loaded”和段错误“Segmentation fault”。

(2)配置开发板的环境变量

配置开发板的环境变量,让tslib能正常工作。

修改/etc/profile文件,在末尾添加以

#vi /etc/profile
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
保存退出,运行source命令使之生效
#source /etc/profile


说明:

TSLIB_TSDEVICE //触摸屏设备文件名节点。

TSLIB_CALIBFILE //校准的数据文件,由ts_calibrate校准程序生成。

TSLIB_CONFFILE //配置文件名,ts.conf文件

TSLIB_PLUGINDIR //插件目录

TSLIB_CONSOLEDEVICE //控制台设备文件名 ,这里选择export TSLIB_CONSOLEDEVICE=none,没有填写,

TSLIB_FBDEVICE //设备名

以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发板上的/dev目录下的设备节点相对应。

(3)、运行/usr/local/bin中的ts_calibrate进行校准,成功的话会出现界面,并让你点击十字符号,完成后会生成/etc/pointercal文件,这是触摸屏的校准配置文件。

运行ts_test程序可以查看校正是否成功,成功后的截图如下:



注意;由于我用的是tq210的板子,所以按照以上方法来一直没有成功,总是触摸校准的十字架会出现,但是点击触摸屏没有反应,

一开始我以为是TSLIB这个库有问题,毕竟不是在官网上下载的,于是我发现在文件系统的里面有一个ts_calibrate文件,如图;在看看/etc/pointercal这个文件有没有,结果是没有!



然后把之前添加的环境变量全部清除掉,在source /etc/profile 使能一下,在运行ts_calibrate这个时候是用的天嵌自带的屏幕校准,结果也没有用,还是点击触摸屏没有反应。于是我在网上找到这么一个说法,

天嵌的内核问题无法使用触摸屏的解决方法:

(1)、问题:安装了Linux系统后出现无法校准触摸屏;并且退出后也无法使用触摸屏

天嵌官问题链接集合:

http://www.armbbs.net/forum.php?mod=viewthread&tid=19021&extra=page%3D1

Q:2014年3月24号的E8 linux内核不支持电容触摸屏?

A:请查看附件 ,将该附件解压之后会有2个文件——ft5x06_ts.module和zImage.bin;其中zImage.bin是测试镜像,ft5x06_ts.module放到内核源码目录下的/drivers/input/touchscreen目录下(把之前的替换掉),然后把/drivers/input/touchscreen/built-in.o删掉(这个文件我没有找到),重新编译一下系统就可以了。

然后我就看自己下载的LINUX内核,是这个:



重新再烧一遍,这个内核,运行ts_calibrate也是没反应,于是我在烧这个解压之后的zImage.bin 运行ts_calibrate就能够进行触摸校准了,(到这里感觉TQ真是坑爹啊!!欲哭无泪555.。。)在/etc/pointercal也生成了这个文件,

因此:我感觉TQ210这个板子自带的系统,已经移植好了TSLIB,并不需要我们再一次移植。

然后我在看他系统自带的这个环境变量配置:如图



解释一下:

(1)source /tmp/env 作用:在当前bash环境下读取并执行/tmp/env 中的命令,我们cat一下/tmp/env

可以的到的是这个:



(2)

export set HOME=/root
export set QTDIR=/opt/PDA;#              自带QT的目录
export set QPEDIR=/opt/PDA;
export set QWS_DISPLAY="LinuxFB:/dev/fb0"#  显示设备
export set QWS_KEYBOARD="TTY:/dev/tty1"#        键盘设备
if [ -f /sys/devices/virtual/input/input$ts/uevent ] ; then#如果有这个文件/sys/devices/virtual/input/input$ts/uevent存在
export set TSLIB_CONFFILE=/etc/ts.conf#
if [ -n "$pointer" ] ; then#   如果这个字符不为零,
export set TSLIB_CALIBFILE=$pointer
export set TSLIB_TSDEVICE=/dev/event$ts
fi
export set TSLIB_TSDEVICE=/dev/event3
export set TSLIB_PLUGINDIR=/lib/ts#   插件目录
export set QWS_MOUSE_PROTO="TSLIB:/dev/event3 MouseMan:/dev/mice"  #
else
export set QWS_MOUSE_PROTO="MouseMan:/dev/mice"
fi
export set QT_PLUGIN_PATH=$QTDIR/plugins/# 插件路径,
export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/  #字库路径
export set PATH=$QPEDIR/bin:$PATH   #qmke环境
export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/plugins/imageformats:$QPEDIR/plugins/accessible:$LD_LIBRARY_PATH  #库文件路径。


接下来就是移植QT了,由于虚拟机的问题,本人移植的是QT4.8.4 ,这里要编译2个QT 版本,一个是linux版本的QT,还有一个是arm版本的QT。

1、源码准备:

(1)先下载QT4.8.4的源码:

http://qt-project.org/downloads#qt-lib

(2)在下载qt creator

http://qt-project.org/downloads#qt-creator

2、解压和配置

(1)、拷贝文件到自己想要的文件夹,解压:

tar zxvf qt-everywhere-opensource-src-4.8.4.tar.gz


(2)、进入解压后文件目录,执行配置

root@emouse:~/study# cd qt-everywhere-opensource-src-4.8.4/
root@emouse:~/study/qt-everywhere-opensource-src-4.8.4# ./configure


此处也可以加上配置前缀./configure -prefix /opt/qt-4.8.4-x11

这样的话再后面编译过程中的文件会复制到/opt/qt-4.8.4-x11 这个目录下(目录不存在会自动创建),好处是源码便于管理,

./configure --prefix=/opt/qt-4.8.4


之后输入”o”选择开源版,输入yes接受GNUlicense,

在执行 gmake 或make

经过漫长的等待之后,在执行 gmake install 或 make install,会安装到 /opt/qt-4.8.4-x11目录下。安装时间比较短,大概需要几分钟左右,至此,安装完成。

3、小测试一下,运行 /opt/qt-4.8.4-x11/bin/designer ,看见 qt 启动,如下图所示,就说明QT已经安装成功



4、 环境变量配置

修改~/.bashrc文件

# vim ~/.bashrc


在文件末尾添加以下内容:

QTDIR=/opt/qt-4.8.4
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH MANPATH LD_LIBRARY_PATH


说明:若没有配置好环境变量,在QT工程保存后在工程目录下执行qmake *.pro时不能生成Makefile文件,



编译arm版本的QT

1、将qt-everywhere-opensource-src-4.8.4.tar.gz在进行一次解压,解压/qt-4.8.4-arm这个文件夹下,

2、和编译PC版本的一样,重新配置一下./configure,就好,具体参考如下:

./configure -prefix /opt/qt-4.8.4-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-tslib -DQT_QLOCALE_USES_FCVT -I/opt/tslib-1.0/include  -L/opt/tslib-1.0/lib-no-pch


#make
#make install


使用gmake && gmake install 似乎效果一样。

配置选项要根据自己的硬件选取,这样编译出来的库文件才会比较小。

当然这里也可以生成一个自动配置文件,

#cd /qt-4.8.4-arm
#sudo gedit autoconfig.sh


加入以下内容保存.

#!/bin/sh
./configure \
-opensource \
-confirm-license \
-release -shared \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-depths 16,24,32  \#这里不能写成16,24,18,否则
-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

exit


文件中的内容就是需要配置的内容,同样如果需要指定安装路径可以在开始加入-prefix=/usr/local/(自己的路径)

上面的主要参数含义说明如下:

-embedded arm: 表示将编译针对 arm 平台的 embedded 版本;

-xplatform qws/linux-arm-g++: 表示使用 arm-linux 交叉编译器进行编译;

-qt-mouse-tslib: 表示将使用 tslib 来驱动触摸屏;

其他还有很多参数我也不太了解,后面使用的过程中再慢慢体会.

将安装所需文件安装到开发板,并配置开发板QT环境

装好后把目录下的imports、lib、mkspecs 、plugins文件夹拷到开发板上的/opt/Qt目录下,目录随便,和环境变量里的一致就行。然后配置开发板的环境变量,让他能找到Qt,编辑/etc/profile文件:

#vi /etc/profile
在编辑之前先将原文件备个分,#cp /etc/profile /etc/profile_bk18
# Ash profile
# vim: syntax=sh
# No core files by default
#ulimit -S -c 0 > /dev/null 2>&1
export set HOME=/root
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 QWS_DISPLAY="LinuxFB:/dev/fb0"
export set QWS_DISPLAY="LinuxFB:mmWidth130:mmHeight100:0"
export set QWS_KEYBOARD="TTY:/dev/tty1"
export set QT_PLUGIN_PATH=$QTDIR/plugins/
export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/
export set PATH=$QPEDIR/bin:$PATH
USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]# '
PATH=$PATH
……….
保存退出,使用source 命令使之生效
#source /etc/profile


这样配置后在执行通过交叉编译生成的可执行QT程序时才能成功运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: