免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3414 | 回复: 1
打印 上一主题 下一主题

[系统安装] qt-embedded-free-3.3.8+tslib 1.4 在s3c2440和AM1808上的移植过程记录 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-27 15:03 |只看该作者 |倒序浏览
s3c2440开发板的移植过程

系统:fedora 6
交叉编译器:arm-linux-gcc 3.4.1

源码:tslib-1.4.tar.gz
     qt-x11-free-3.3.8.tar.bz2
     qt-embedded-free-3.3.8.tar.bz2

源码下载和交叉编译环境的安装略过。

1.tslib的编译
[root@dolphin tslib]# ./autogen.sh
[root@dolphin tslib]# echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
[root@dolphin tslib]# ./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=/tslib --enable-inputapi=no
[root@dolphin tslib]# make
[root@dolphin tslib]# make install

2.qt-x11-free-3.3.8的编译
[root@dolphin qt-x11-free-3.3.8]# export QTDIR=$PWD
[root@dolphin qt-x11-free-3.3.8]# export PATH=$QTDIR/binPATH
[root@dolphin qt-x11-free-3.3.8]# export LD_LIBRARY_PATH=$QTDIR/libLD_LIBRARY_PATH
[root@dolphin qt-x11-free-3.3.8]# ./configure -prefix /opt/qt-x11-free-3.3.8
[root@dolphin qt-x11-free-3.3.8]# make
[root@dolphin qt-x11-free-3.3.8]# make -C tools/qvfb
[root@dolphin qt-x11-free-3.3.8]# mv tools/qvfb/qvfb bin
[root@dolphin qt-x11-free-3.3.8]# make install

3.qt-embedded-free-3.3.8的编译

[root@dolphin qt-embedded-free-3.3.8]# export QTDIR=$PWD
[root@dolphin qt-embedded-free-3.3.8]# export QTEDIR=$QTDIR
[root@dolphin qt-embedded-free-3.3.8]# export PATH=$QTDIR/binPATH
[root@dolphin qt-embedded-free-3.3.8]# export LD_LIBRARY_PATH=$QTDIR/libLD_LIBRARY_PATH
[root@dolphin qt-embedded-free-3.3.8]# ./configure -prefix /opt/qt-embedded-free-3.3.8 -no-libjpeg -no-gif -qt-libpng -embedded arm -thread -no-cups -no-stl -no-mouse-pc -no-mouse-yope -no-mouse-bus -no-mouse-vr41xx -qt-mouse-tslib -I/tslib/include -L/tslib/lib -lts -qconfig local -depths 4,8,16,32 -qvfb
[root@dolphin qt-embedded-free-3.3.8]# make
[root@dolphin qt-embedded-free-3.3.8]# make install

PS:qt-embedded-free-3.3.8不能直接支持tslib,在编译前修了一些源代码的

4.arm中关于tslib 和 qt的配置
export QTDIR=/Qtopia/qt-2.3.7
export QTEDIR=$QTDIR
export LD_LIBRARY_PATH=$QTDIR/libLD_LIBRARY_PATH

rm /dev/h3600_tsraw
ln -s /dev/touchscreen/0  /dev/h3600_tsraw
export V_ROOT=/tslib
export TSLIB_TSEVENTTYPE=H3600
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/h3600_tsraw
export TSLIB_CALIBFILE=/tmp/gwis/pointercal
export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$V_ROOT/lib/ts
export QWS_MOUSE_PROTO=tslib:/dev/h3600_tsraw
export LD_LIBRARY_PATH=$V_ROOT/libLD_LIBRARY_PATH

ts.conf文件
module_raw input
module_raw h3600
module pthres pmin=1
module variance delta=20
module dejitter delta=100
module linear

这里的配置最开始我一直没有看明白为什么要ln -s /dev/touchscreen/0  /dev/h3600_tsraw;我后来在移植tslib的时候一直不成功,因为ts.conf文件中我只用了module_raw input这一句。
后来在看qt-embedded-free-3.3.8的源代码的时候发现:在文件/qt-embedded-free-3.3.8/src/embedded/qmouselinuxtp_qws.cpp中有这么一些代码
# ifdef QT_QWS_IPAQ_RAW
    if ((mouseFD = open( "/dev/h3600_tsraw", O_RDONLY | O_NDELAY)) < 0) {
# else
    if ((mouseFD = open( "/dev/h3600_ts", O_RDONLY | O_NDELAY)) < 0) {
# endif
    qWarning( "Cannot open /dev/h3600_ts (%s)", strerror(errno));
    return;
    }
#elif defined(QT_QWS_EBX)
所以我在想是不是因为qt中默认打开的触摸屏设备节点就是/dev/h3600_tsraw,而arm系统中实际的设备节点是/dev/touchscreen/0,所以使用ln -s /dev/touchscreen/0  /dev/h3600_tsraw。
但是ts.conf文件为什么要module_raw h3600还是不是很明白。export TSLIB_TSEVENTTYPE=H3600也不知道是什么意思。

这么做下来  都是正常的。tslib 和 qt都能用。

随便说下,我们最开始用的是tslib 1.3 ,在使用触摸屏的过程中 偶尔会出现按键不弹起的问题  换了tslib 1.4就好了。
另一个问题是按键出现粘连,按一个按键 旁边的按键会动。最后发现问题出现滤波上,板子上有专门的滤波电容,tslib也有滤波。我把滤波电容改下就好了。
分享出来希望对有的人有点帮助。


==============================分割线====================================

这次公司换了新的板子 CPU 是TI 的AM1808 ,主要原因是2440的IDE硬盘读写速度太慢。AM1808带SATA硬盘的。

这次在移植过程中 主要是换了交叉编译环境为arm-nono-linux-gnueabi 4.3.3

移植过程如下:

1.tslib的编译
[root@dolphin tslib]# ./autogen.sh
[root@dolphin tslib]# echo "ac_cv_func_malloc_0_nonnull=yes" >arm-nono-linux-gnueabi.cache
[root@dolphin tslib]# ./configure --host=arm-nono-linux-gnueabi --cache-file=arm-nono-linux-gnueabi.cache --prefix=/tslib --enable-inputapi=no
[root@dolphin tslib]# make
[root@dolphin tslib]# make install

2.qt-x11-free-3.3.8的编译
[root@dolphin qt-x11-free-3.3.8]# export QTDIR=$PWD
[root@dolphin qt-x11-free-3.3.8]# export PATH=$QTDIR/binPATH
[root@dolphin qt-x11-free-3.3.8]# export LD_LIBRARY_PATH=$QTDIR/libLD_LIBRARY_PATH
[root@dolphin qt-x11-free-3.3.8]# ./configure -prefix /opt/qt-x11-free-3.3.8
[root@dolphin qt-x11-free-3.3.8]# make
[root@dolphin qt-x11-free-3.3.8]# make -C tools/qvfb
[root@dolphin qt-x11-free-3.3.8]# mv tools/qvfb/qvfb bin
[root@dolphin qt-x11-free-3.3.8]# make install

3.qt-embedded-free-3.3.8的编译

修改/qt-embedded-free-3.3.8/mkspecs/qws/linux-arm-g++/qmake.conf中的arm-linux-gcc 为 arm-nono-linux-gnueabi-gcc,arm-linux-g++ 为 arm-nono-linux-gnueabi-g++

[root@dolphin qt-embedded-free-3.3.8]# export QTDIR=$PWD
[root@dolphin qt-embedded-free-3.3.8]# export QTEDIR=$QTDIR
[root@dolphin qt-embedded-free-3.3.8]# export PATH=$QTDIR/binPATH
[root@dolphin qt-embedded-free-3.3.8]# export LD_LIBRARY_PATH=$QTDIR/libLD_LIBRARY_PATH
[root@dolphin qt-embedded-free-3.3.8]# ./configure -prefix /opt/qt-embedded-free-3.3.8 -no-libjpeg -no-gif -qt-libpng -embedded arm -thread -no-cups -no-stl -no-mouse-pc -no-mouse-yope -no-mouse-bus -no-mouse-vr41xx -qt-mouse-tslib -I/tslib/include -L/tslib/lib -lts -qconfig local -depths 4,8,16,32 -qvfb
[root@dolphin qt-embedded-free-3.3.8]# make
[root@dolphin qt-embedded-free-3.3.8]# make install

PS:qt-embedded-free-3.3.8不能直接支持tslib,在编译前修了一些源代码的。

4.arm中关于tslib 和 qt的配置
export QTDIR=/Qtopia/qt-2.3.7
export QTEDIR=$QTDIR
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export V_ROOT=/tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/touchscreen0
export TSLIB_CALIBFILE=/tmp/gwis/pointercal
export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$V_ROOT/lib/ts
export QWS_MOUSE_PROTO=tslib:/dev/input/touchscreen0
export LD_LIBRARY_PATH=$V_ROOT/lib:$LD_LIBRARY_PATH

ts.conf文件
module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

新板子的触摸屏的设备节点是/dev/input/touchscreen0。
这样做了 发现tslib可以正常使用,但是qt程序不能使用触摸屏。


接着我又做了两次实验:
1.修改文件/qt-embedded-free-3.3.8/src/embedded/qmouselinuxtp_qws.cpp中的
# ifdef QT_QWS_IPAQ_RAW
    if ((mouseFD = open( "/dev/h3600_tsraw", O_RDONLY | O_NDELAY)) < 0) {
# else
    if ((mouseFD = open( "/dev/h3600_ts", O_RDONLY | O_NDELAY)) < 0) {
# endif
    qWarning( "Cannot open /dev/h3600_ts (%s)", strerror(errno));
    return;
    }
#elif defined(QT_QWS_EBX)
把mouseFD = open( "/dev/h3600_tsraw", O_RDONLY | O_NDELAY)) < 0修改为mouseFD = open( "/dev/input/touchscreen0", O_RDONLY | O_NDELAY)) < 0
还是不行的  。所以以前的猜测看来是错的。qt打开触摸屏应该和这里没关系。

2.修改配置文件,像以前那么做
rm /dev/h3600_tsraw
ln -s /dev/touchscreen/0  /dev/h3600_tsraw
export V_ROOT=/tslib
export TSLIB_TSEVENTTYPE=H3600
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/h3600_tsraw
export TSLIB_CALIBFILE=/tmp/gwis/pointercal
export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$V_ROOT/lib/ts
export QWS_MOUSE_PROTO=tslib:/dev/h3600_tsraw
export LD_LIBRARY_PATH=$V_ROOT/lib:$LD_LIBRARY_PATH

结果还是不行阿。

然后 就木有然后了  到底问题出在那里呢? 个人觉得是QT没有调用到TSLIB。但是为什么没有调用到 就想不出来了。

写了好多,算了分享下,因为发现网上大多是QT4的移植文章。也算是求教了。希望遇到大虾 帮我看下。

如果有人要看怎么修改qt源代码来支持tslib,可以说下 我再发上来。

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015年迎新春徽章
日期:2015-03-04 09:57:09
2 [报告]
发表于 2012-04-27 23:28 |只看该作者
楼主把代码加上<code>标签撒,到处是表情啊

这个还没研究过,建议楼主发到嵌入式版块
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP