1.编译
前段时间非常的郁闷…因为在运行生成校准程序ts_calibrate时总是出现一个错误:ts_open:Inappropriate ioctol for device
后来无数折腾后经过nanfansky指点才知道是自己板子的触摸屏驱动不支持ioctl操作
重新编译tslib
cd tslib-1.3
export CC=/usr/local/arm/3.3.2/bin/arm-linux-gcc //指定交叉编译器
./autogen.sh //生成config文件
export PATH=/usr/local/arm/3.3.2/bin:$PATH
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no
vi src/ts_read_raw.c //修改内容如下
make
***************************************************
编译过程可能会遇到rpath错误
tslib的安装修正
So edit the file Makefile in dir /tslib/plugins
search rpath
change the line to
LDFLAGS := $(LDFLAGS) -rpath `cd $(PLUGIN_DIR) && pwd`
****************************************************
在make之前,为了支持触摸屏,打开src/ts_read_raw.c文件,查看触摸屏驱动程序数据结构,看与ts_read_raw.c结构中的哪个一样,就将代码中的 char *defaulttseventtype="UCB1x00"; 修改为 自己板子上对应的驱动结构。
因为我的驱动对应的是h3600_ts_event结构
typedef struct {
unsigned short pressure;
unsigned short x;
unsigned short y;
unsigned short pad;
} TS_RET;
所以修改为:
char *defaulttseventtype="H3600";
************************************
如果不修改源代码,也可以在后面的测试中重新指定环境变量
export TSLIB_TSEVENTTYPE=H3600 //通过这个对tslib中的设备结构体定义
*****************************************************
如果你触摸屏驱动程序支持ioctl操作,上面的configure操作中的--enable-inputapi=no]你可以删除。
然后就可以make了
*************************************************
2.测试:
2.1 我在/root/share下新建了一个tslib目录,只copy了一些需要的文件
mkdir /root/share/tslib
mkdir /root/share/tslib/tests
mkdir /root/share/tslib/plugins
mkdir /root/share/tslib/lib
mkdir /root/share/tslib/etc
cp /root/2410s/tslib-1.3/tests/.libs/ts_* /root/share/tslib/tests/ //几个所需的测试文件,比如生成的校准文件,测试文件等等
cp /root/2410s/tslib-1.3/src/.libs/libts-0.0.so.0* /root/share/tslib/lib/ //几个所需的库文件
cp /root/2410s/tslib-1.3/src/.libs/libts.so /root/share/tslib/lib/ //几个所需的库文件
cp /root/2410s/tslib-1.3/plugins/*.so /root/share/tslib/plugins/ //触摸屏插件模块库
cp /root/2410s/tslib-1.3/etc/ts.conf /root/share/tslib/etc/ //配置文件
2.2 连接板子
执行minicom
mount –t nfs –o nolock 192.168.0.155:/root/share /mnt/nfs使板子mount上PC,共享路径/root/share
2.3 做链接
ln -s /dev/fb/0 /dev/fb0
//帧缓冲设备板子上为/dev/fb/0,但程序默认为/dev/fb0,所以做了一个链接/dev/fb0到/dev/fb/0
ln -sf /dev/touchscreen/0raw /dev/ts
//qtopia要打开/dev/ts,你没有这个文件, 所以 dev下边应该有触摸平的节点,
相当于, qtopia启动要找 /dev/ts, 但是你只有/dev/touchscreen/0raw,
所以你把ts链接到你的触摸屏的文件就可以了!
我得触摸屏设备节点文件为/dev/touchscreen/0raw
所以,建立链接 /dev/ts 到/dev/touchscreen/0raw
(这里要自己针对自己板子具体的文件进行设置,要不然也会报错)
2.4 指定环境变量
export QWS_MOUSE_PROTO=TPanel:/dev/touchscreen/0raw
export T_ROOT=/mnt/nfs/tslib
export LD_LIBRARY_PATH=$T_ROOT/lib //指定tslib库文件路径
export TSLIB_CONSOLEDEVICE=none //tslib运行需要的控制台,这里就是LCD屏幕 ,设定控制台设备为none,否则默认为/dev/tty,
export TSLIB_FBDEVICE=/dev/fb0 //指定帧缓冲设备
export TSLIB_TSDEVICE=/dev/touchscreen/0raw //指定触摸屏设备节点文件
export TSLIB_CALIBFILE=$T_ROOT/etc/pointercal //指定触摸屏校准文件pintercal的存放位置
********************************************************************
注:qte的/src/kernel/qwsmouse_qws.cpp里面校准文件默认打开是在/etc下面为/etc/pointercal,
可是我得板子的根文件系统为只读,所以我放在/mnt/nfs/tslib/etc下面了,
所以在交叉编译qte的时候需要修改qwsmouse_qws.cpp
**************************************************
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf //指定TSLIB配置文件的位置
export TSLIB_PLUGINDIR=$T_ROOT/plugins //指定触摸屏插件所在路径
2.5 校准
运行校准程序校准屏幕(5点校准)
cd $T_ROOT/tests
./ts_calibrate //板子上陆续出现5个光标,点击完毕后会生成校准文件pintercal存放在$T_ROOT/etc/下面
********************************************
ts_calibrate是一个应用程序,在屏幕上画几个按钮,将用户点击后从ts驱动获得的数据和
屏上的坐标位置通过一套算法来获得校准数据写到一个校准文件里。
******************************************