我有个习惯即每前进一步都要认真的把路铺好,免得回头时找不到回归的路。经验告诉我每做一件事之前,弄懂它原理是非常有必要的,否则我敢保证,你肯定会出现这样或那样的错误。因此先不要急着去想怎么去移植,看看触摸屏的工作原理吧。
首先触摸屏的最原始的数据来自设备驱动文件,然后进入tslib,具体过程如下:
Raw driver---à calibrate--àvariance------àdejitter------àlinear---------àapplication
(设备驱动) (校准) (滤波) (去噪) (坐标变换) (应用程序)
从这里我们很明显的看出设备文件之与tslib 有关,与我们的qt程序没有直接联系,也就是说tslib 给应用程序提供了一个统一接口,因此像网上说的要在qt源代码里的qmouselinuxtp_qws.h
加入 #define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW
修改qmouselinuxtp_qws.cpp里面的 /dev/h3600_tsraw, 是完全没必要的,我曾经也被忽悠了。只要测试tslib1.4成功了,编译qtopia的时候加入触摸屏支持即可。
准备好了吗?那就开始吧。
1.编译tslib1.4
tar xzvf tslib-1.4.tar.gz
cd tslib/
export CC=/usr/local/arm/usr/local/arm/3.4.1/bin/arm-linux-gcc
export CXX=/usr/local/arm/usr/local/arm/3.4.1/bin/arm-linux-g++
./autogen.sh
export PATH=/usr/local/arm/usr/local/arm/3.4.1/bin:$PATH
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
#./configure PLUGIN_DIR=/home/xgq/tslib/plugins -prefix=/usr/local/tslib4 -host=arm-linux --cache-file=arm-linux.cache 2>&1 | tee conf_log
Make
Make install
这样tslib1.4编译安装完毕。
2.编译qtopia core 4.3.3
./configure -prefix /usr/local/Trolltech/qtopiacore_ts -embedded arm -xplatform qws/linux-arm-g++ -depths 8,16,32 -no-qt3support -no-largefile -no-mouse-linuxtp -no-mouse-pc -no-mouse-pc -no-mouse-bus -no-mouse-yopy -no-mouse-vr41xx -no-mouse-qvfb -qt-mouse-tslib -I /usr/local/tslib1.4/include -L /usr/local/tslib1.4/lib 2>&1 | tee conf_log (这种颜色的配置加入了触屏支持)
make 2>&1 | tee make_log
make install
这样qtopia core 4.3.3也编译完了,够简单吧
3.设置环境变量
#!/bin/sh
export QTDIR=/usr/qt
export QPEDIR=/usr
#export LD_LIBRARY_PATH=/usr/qt/lib
export HOME=/usr
export TSLIB_TSDEVICE=/dev/touchscreen
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/usr/qt/tslib4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=/usr/qt/tslib4/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export POINTERCAL_FILE=/etc/pointercal
export QWS_DISPLAY=LinuxFb:mmWidth35:mmHeight45:0
export QWS_SIZE=320x240
export QWS_MOUSE_PROTO=Tslib:/dev/touchscreen
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/qt/tslib4/lib:$QTDIR/lib
4.配置ts.conf
module_raw h3600module
module variance delta=30
module dejitter delta=100
module linear
5.配置rcS
#!/bin/sh
/bin/mount -a
/sbin/ifconfig eth0 192.168.0.15 up
/bin/mknod /dev/can c 98 0
/bin/mknod /dev/touchscreen c 233 0 (我是自己加载驱动所以才有这一步)
/bin/ln -s /dev/sound/dsp /dev/dsp
/bin/ln -s /dev/fb/0 /dev/fb0
就这么简单,在移植过程中我遇到的两个问题就是1.选错module 2.漏写环境变量