- 论坛徽章:
- 0
|
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,可以说下 我再发上来。 |
|