资源描述
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
可能是因为系统自带的autoconf工具里面没有定义这个宏,查看一下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工具平台中有,解压后进入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 --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
再执行
#./configure --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 input //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
#!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=none //控制台设备文件名,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_calibrate //系统开启时运行该触摸屏校正程序
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/目录下生成pointercal文件
三、遇到问题
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);
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 = ts_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 中,测试结果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/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
#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文件就没有好使,修改了一下,重启系统就好用了。
展开阅读全文