1、Tslib1.4移植 (参照TX2440A的tslib移植) 一、 说明 l tslib版本: tslib-1.4 l 交叉编译器版本: arm-linux-gcc 4.1.2 l 操作系统平台: Linux Red Hat 9.0 l 开发板平台: arm TX2440A 二、 移植 1、学习光盘/源码包中tslib1.4源码包,解压,进入tslib目录,执行 #tar xzvf tslib1.4.gz #./autogen.sh 出现错误:possible undefined macro: AS_HELP_STRING 可能是因为系统自带的autoc
2、onf工具里面没有定义这个宏,查看一下autoconf的版本 #autoconf –V 是2.57版的,在学习光盘/liunx工具平台有2.64版,复制解压,进入autoconf目录,执行 #tar xzvf autoconf.gz #./configure 又出现错误:no acceptable m4 could be found in $PATH 原因是安装autoconf工具,需要GNU的m4工具,但是系统里没有这个工具,所以还要从网上下载, 在http://ftp.gnu.org/gnu/m4/找到m4-1.14.13.tar.bz2,下载完后,或者在学习光盘/linux
3、工具平台中有,解压后进入m4-1.14.13目录,执行 #./configure #make #make install 安装完成后,再进入autoconf目录,执行 #./configure #make #make install 新安装的autoconf工具就把/usr/bin下的可执行程序覆盖了,然后执行 #source /etc/profile 使环境变量生效,再查看 autoconf版本,确保是2.64版。 2、进入tslib目录,执行 #./configure --prefix=/usr/local/tslib --host=arm-linux
4、target=arm-linux --enable-inputapi=no #make 这时会出现一个错误: ts_test.o(.text 0x218): In function `main': undefined reference to `rpl_malloc' 查看一下源码,发现是ac_cv_func_malloc_0_nonnull引起了,那我们需要建一个cache文件,来欺 骗configure,让它不检查这一项,执行 #echo "ac_cv_func_malloc_0_nonnull=yes" > mytslib.cache 再执行 #./config
5、ure --prefix=/usr/local/tslib --host=arm-linux --target=arm-linux --enable-inputapi=no --cache-file=mytslib.cache #make #make install 这一步很重要。 3 、安装完成后,把/usr/local/tslib目录下的所有内容拷贝到根文件系统(利用busybox制作的)的/usr/local/tslib目录下,修改tslib/etc/ts.conf文件,将第二行module_raw input的注释去掉。保留的内容如下: module_raw i
6、nput //tslib从linux的输入设备读取数据时用到模块 module pthres pmin=1//pthres为tslib提供触摸屏灵敏度门槛插件 module variance delta=30// variance为tslib提供触摸屏滤波算法插件 module dejitter delta=100// dejitter为tslib提供去噪算法插件 module linear// linear为tslib提供坐标变换插件 4、设置环境变量脚本 tslib.sh(增加权chmod 777 tslib.sh) ,同时将tslib.sh复制根文件系统usr/bin
7、 #!bin/sh export TSLIB_ROOT=/usr/local/tslib// export TSLIB_TSDEVICE=/dev/event0//触摸屏设备文件名 export TSLIB_CALIBFILE=/etc/pointercal//指定触摸屏校准文件 export TSLIB_CONFILE=$TSLIB_ROOT/etc/ts.conf//指定tslib配置文件存放位置 export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts //tslib需要加载模块所在目录 export TSLIB_CONSOLEDEVICE=n
8、one //控制台设备文件名,tslib运行时控制台设备,这里是LCD,设定none export TSLIB_FBDEVICE=/dev/fb0 //指定帧缓冲设备 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib:$QTLIB//加载库的路径 export QWS_SIZE=320*240//lcd的显示尺寸 export QWS_MOUSE_PROTO=Tslib:/dev/event0 export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0" ts_cal
9、ibrate //系统开启时运行该触摸屏校正程序 4、将根文件系统/usr/local/tslib/bin/ts_calibrate拷贝到/usr/bin下, #cp usr/local/tslib/bin/ts_calibrate usr/bin # chmod 777 usr/bin/ts_calibrate 5、修改根文件系统的启动vi etc/init.d/rcs 增加tslib.sh& 6、制作根文件系统 并烧录到开发板上。启动开发板,这个就是触摸屏校正程序,运行时,屏幕上会依次出 现5个点,点击后会在/etc/目录下生成pointerca
10、l文件 三、遇到问题 1 终端显示:ts_open: No such file or directory 分析ts_open找不到设备文件,分析源程序ts_calibrate int main() { struct tsdev *ts; calibration cal; int cal_fd; char cal_buffer[256]; char *tsdevice = NULL; char *calfile = NULL; unsigned int i; signal(SIGSEGV, sig); signal(SIGINT, sig);
11、 signal(SIGTERM, sig); if( (tsdevice = getenv("TSLIB_TSDEVICE")) != NULL ) //读取环境变量中值,根据终端提示,可知ts = ts_open(tsdevice,0);无法正常打开。对比得知TSLIB_TSDEVICE"和export TSLIB_TSDVICE=/dev/event0。变量名不正确。低级错误。呵呵。总结:遇到问题时,逐步排查,进入源代码查看。 { ts = ts_open(tsdevice,0); } else { #ifdef USE_INPUT_API ts = t
12、s_open("/dev/input/event0", 0); #else ts = ts_open("/dev/touchscreen/ucb1x00", 0); #endif /* USE_INPUT_API */ } 2 /etc/init.d/rcS: line 18: tslib.sh: not found 检查根文件系统usr/bin/tslib.sh ,是不是脚本文件多了^M 字符。(原因不详)一点心得。呵呵 vi usr/bin/tslib.sh 3、将tslib.sh&分别放在etc/init.d/rcs 和etc/profile
13、 中,测试结果tslib.sh 都能正常运行。不存在etc/init.d/rcs异常情况。(但是在开发板终端检查env时,没有显示tslib.sh设置的)与网上说的不同。呵呵。网上说法如下: 在你的开发板的/etc/profile文件里添加运行tslib的环境变量(一定要放到/etc/profile,我放到/etc/init.d/rcS里就没有作用,愿因是export只能在当前shell和它的子shell有用,不能影响登录的shell) # /etc/profile PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/arm/X11R6/
14、bin export PATH export TSLIB_ROOT=/usr/local export TSLIB_TSDEVICE=/dev/event0(你的开发板dev下的触摸屏设备节点文件) export TSLIB_CALIBFILE=/etc/pointercal export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb0
15、 #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib(这句我注释掉的原因是:有一种说法是使用LD_LIBRARY_PATH这样设置不安全,我的做法是把路径添加到/etc/ld.so.conf文件中,然后执行ldconfig命令,这样就可以了。ldconfig在你的交叉编译工具里就有) 这样大概就差不多了,运行./ts_calibrate如果还提示ts_open: No such file or directory,用env命令看一下,当前系统是否有你设置的tslib环境变量, 没有的话会提示这个错误的,我在第一次设置/etc/profile文件就没有好使,修改了一下,重启系统就好用了。






