最近在mini2440开发板上成功移植了一套linux2.6.27.9。为了测试触摸屏,编译了一下tslib1.3,因为触摸屏在linux2.6.27上的使用与以前的linux稍有不同,现把过程记录下来,以供参考。
下载,解压tslib1.3后,在tslib1.3的目录下
使用./autogen.sh生成configure文件,并运行
./configure --host=arm-linux --target=arm-linux --prefix=$PWD/build --enable-inputapi=yes
并设置PLUGIN_DIR=tslib-1.3/plugins(tslib解压路径下的plugins路径,此环境变量很重要,没有话编译时会报“only absolute run-path ...”的错误)
make
make install
将生成的build文件夹全部拷入自己的文件系统中的/root/tslib 目录下(mkdir 生成)。
编译没问题,要说明一下环境变量的设置。新的linux中取消了touchscreen接口。在内核的配置菜单中已没有touchscreen interface一项。只有mouse interface, event
interface(此接口是其它两个接口的基础)选项。这几个选项分别对/drivers/input/mousedev.c /drviers/input/evdev.c /driver/input/tsdev.c(这个在linux2.6.27.9中已没有了),因此输入子系统只会生成event0,mouse0,不象以前还生成ts0。
因此,网上流行的环境变量在我的系统下就不能正常工作了,触摸屏没有反应。看了tslib1.3的代码,原来在定义USE_INPUT_API宏的时,就会调用event的接口进行触摸操作。于是在tslib的config.h中加入#define USE_INPUT_API 1,重新编译,再在根文件系统的profile中,注掉#export TSLIB_TSEVENTTYPE=H3600,(不注也可以,因为这时这个环境变量不起作用了。),再修改环境变量TSLIB_TSDEVICE的值为/dev/event0,tslib可以正常操作了。
注:看了tslib的configure的帮助,应该可以用参数--enable-inputapi=yes指定加入USE_INPUT_API宏的,但我试过多次,都不能自动加入宏。最后只好手工加入了。
以下是环境变量的设置.
export V_ROOT=/tslib
#export TSLIB_TSEVENTTYPE=H3600
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=$V_ROOT/etc/pointercal
export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$V_ROOT/share/ts/plugins
export LD_LIBRARY_PATH=$V_ROOT/lib:$LD_LIBRARY_PATH
做完这些,ts_calibrate可以进行校正了,校正成功后,把生成的tslib/etc/pointercal文件拷到/etc目录下。运行ts_test,却发现触摸屏不能正常操作,这个网上有相关的资料,把/tslib/etc/ts.conf中被注掉的#module mousebuts恢复即可。
注:顺便说一下,要想在qte中使用tslib,除了qte编译时加--qt-mouse-tslib参数外,还要加入环境变量如下
export QWS_MOUSE_PROTO=Tslib:/dev/event0