向tiny6410移植tslib(tslib-1.4)
环境:RedHat
已安装交叉编译器
tslib版本:1.4
首先在redhat文件系统的/usr/local/tslib 创建目录
拷贝源代码tslib-1.4.tar.gz到/usr/local/tslib/ 下并解压
进入到刚刚解压的文件夹
执行以下命令:
# ./autogen.sh # ./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes -–cache-file=arm-linux.cache -prefix=/usr/local/tslib/__install
-prefix=/usr/local/tslib/__install代表的是安装的位置 我这里把编译后的文件生成在/usr/local/tslib/__install目录下。如没有相应的文件夹则需要自己手动创建。
如果执行sh脚本出现错误 则需要安装库 执行下面的语句即可
sudo apt-get install autoconf automake libtool
如果在配置时报错提示
C++ compiler cannot create executables
则安装GCC库即可
sudo apt-get install gcc-multilib
# make # make install
然后将会在__install目录下生产bin etc include lib这几个文件夹。
将__install/lib/ 下的所有文件包括子目录拷贝到文件系统的/lib/目录下
将__install/etc/ 下的所有文件包括子目录拷贝到文件系统的/etc/目录
设置环境变量脚本tslib.sh
创建一个文件tslib.sh 文件内容如下:
#!/bin/sh export TSLIB_ROOT=/opt/tslib export TSLIB_TSDEVICE=/dev/touchscreen-1wire export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts export TSLIB_CONSOLEDEVICE=/dev/tty export TSLIB_FBDEVICE=/dev/fb0
然后启动开发板
# source tslib.sh
在之前的__install/bin/ts_calibrate拷贝到开发板
# 。/ts_calibrate
这时我们将会在屏幕上看到要求触目校准的画面信息。
这时发现根本就无法进行屏幕校准。可能 跟友善的一线触摸有关系,故我在网上搜索了相关的资料
在网上的某个帖子解决了问题
http://blog.csdn.net/yf210yf/article/details/7352470
由于tiny6410的一线触摸,所以需要改程序,照别人的:
打开tslib/plugins/input-raw.c
把其中的ts_input_read 函数改成如下:
static int ts_input_read(struct tslib_module_info *inf, struct ts_sample *samp, int nr) { printf ("HEAD=== ts_input_read in INPUT-RAW.C\n"); struct tslib_input *i = (struct tslib_input*)inf; struct tsdev *ts = inf->dev; struct input_event ev; int ret = nr; int total = 0; unsigned long jjts; while(total<nr) { ret =read(ts->fd, &jjts,sizeof(jjts)); //if (ret==-1) continue; if (ret==-1) return 0; samp->pressure=(jjts>>31)& 0x01; samp->x=(jjts>>16)& 0xffff; samp->y=jjts & 0xffff; samp++; total++; } ret=total; return ret; }
特别注意:
参照网上许多资料,上面讲的都是if (ret==-1) continue;做了以后,发现触摸屏能校准,但是运行qt程序时,光标能移动,但是点击无效。所以改成
if (ret==-1) return 0;问题解决。
# export PREFIX=/opt/tslib 设置目标位置 # ./autogen.sh 用于生成configure脚本 # echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache 产生一个cache文件arm-linux.cache,欺骗configure # CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX --cache-file=arm-linux.cache # make # make install
编译成功后在目标位置产生/bin、/etc、/include、/lib 4个文件夹 (11)修改/opt/tslib/etc/ts.conf 文件,删除其中内容,改为
module_raw input module pthres pmin=1 module variance delta=30 module dejitter delta=100 module linear
第一行是tslib从linux的输入设备读取数据时需要用到的模块,这里指定的模块为input,具体需要用到哪个模块,需要参考其他数据。 第二行的pthres为Tslib提供的触摸屏灵敏度门槛插件。 第三行的variance为Tslib提供的触摸屏滤波算法插件。 第四行的dejitter为Tslib 提供的触摸屏去噪算法插件。 第五行linear为Tslib提供的触摸屏坐标变换插件。
将/opt下的tslib文件夹拷贝到arm文件系统的/opt下
再将tslib/lib/* 复制一份到开发板的lib目录下
# cp /opt/tslib/lib/* /lib/ -rf
设置环境变量脚本tslib.sh
#!/bin/sh export TSLIB_ROOT=/opt/tslib export TSLIB_TSDEVICE=/dev/touchscreen-1wire export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts export TSLIB_CONSOLEDEVICE=/dev/tty export TSLIB_FBDEVICE=/dev/fb0
在开发板的/etc/profile文件后面加上
source /tslib.sh
启动arm板,命令行下执行脚本
校准触摸屏
cd /opt/tslib/bin
./ts_calibrate
会出现校准画面,完成后生成pointercal 文件
链接
ln -s /opt/tslib/etc/pointercal /etc/pointercal
至此,tslib1.4移植完成
linux内核下载地址: https://www.kernel.org/pub/linux/kernel