⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 用tslib校准触摸屏(成功).rtf

📁 包含触摸屏驱动源码(for s3c2410)以及触摸屏驱动,USB键盘鼠标移植详细步骤,tslib触摸屏校准程序的移植使用,包括错误解决方法.
💻 RTF
📖 第 1 页 / 共 2 页
字号:
linuxforum论坛中的hawkhjg就是胡军国
tslib是一个触摸屏的库,它提供诸如滤波、去抖、校准之类的功能,为不同的触摸屏提供了一个统一的接口。
我是用qte3.3.6是支持tslib的,你只要按网上的帖子去做可以了,还有你一定要看它自带的文件,我一开始也搞了很久,好像是少了一个什么参数,后来看了说明才知道
1、如何获得最新的tslib源代码?

export CVSROOT=:pserver:anoncvs@cvs.handhelds.org:/cvs
cvs login
(password:anoncvs)
cvs co apps/tslib

这样获得的tslib源代码是最新的,目前是稳定版本。
2.[root@linux tslib]# ./autogen.sh  --host=arm-linux
(第一次是:./autogen.sh)


这面这句表示将编译适合arm架构CPU的库,其实找开autogen.sh这个文件,我们将发现这是一个批处理的shell文件,其中—host=arm-linux是./configure的参数

一切OK!

现在来做真正的配置:
[root@localhost tslib]# export PATH=/WirelessCard/arm-cross-3.4.1/usr/local/arm/3.4.1/bin/:$PATH



[root@localhost tslib]./configure --host=arm-linux --prefix=/apps/tslib/build

[root@localhost tslib]# make 
make时,出现下列错误:

ts_test.o(.text 0x218): In function `main':

: undefined reference to `rpl_malloc'

在当前目录查找了rpl_malloc,发现configure里有#define malloc rpl_malloc一行。分析configure 脚本相关的代码,原来是ac_cv_func_malloc_0_nonnull引起的,OK我们不让它检查了,产生一个cache文件arm-linux.cache,欺骗configure:
[root@localhost tslib]#echo "ac_cv_func_malloc_0_nonnull=yes" >$ARCH-linux.cache



[root@localhost tslib]#  ./configure --prefix=/apps/tslib/build  --host=arm-linux --cache-file=$ARCH-linux.cache
 
[root@localhost tslib]#make && make install
成功
在/apps/tslib/tslib目录下生成了build目录。

3.编辑ts.conf

module_raw input
module pthres
module variance delta=30
module dejitter delta=100
module linear
修下这几项,其余全删...

3.把/apps/tslib/tslib目录下生成了build目录打包成build.tar,在开发板中用ftp的形式从主机上下载build.tar.主机需事先安装好Serv-u并配置好.
在开发板中将build.tar解压到相应目录.
修改/etc/profile文件,在其中加入以下环境变量的设置。其解释类上,不同于TSLIB1.3的是,TLIB1.4通过配置文件ts.conf中module_raw h3600语句来加载对应的设备结构体定义。已废除了TSLIB_TSEVENTTYPE宏。
                +

                  export V_ROOT=/xxx/xxx/build
                +

                  export TSLIB_TSDEVICE=/dev/touchscreen/0raw
                +

                  export TSLIB_CALIBFILE=/etc/pointercal
                +

                  export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf
                +

                  export TSLIB_PLUGINDIR=$V_ROOT/lib/ts
                +

                  export TSLIB_CONSOLEDEVICE=none
                +

                  export TSLIB_FBDEVICE=/dev/fb0
          o

            一个值得注意的问题是:TSLIB1.4在ts_config函数中通过while((p=fgets(buf,BUFF_SIZE,f))!=NULL)来加载ts.conf中的语句,而buf只有512byte。所以对于ts.conf没有用的定义语句,请将其删除,以防止误发生段错误。
在开发板中进行如下测试:

[root@/usr/build/bin]#./ts_test
./ts_test: error while loading shared libraries: libts-0.0.so.0: cannot open shared object file: No such file or directory

参考了下面的做法,主要是在/etc/profile中增加了:
export LD_LIBRARY_PATH=$T_ROOT/lib  //指定tslib库文件路径

运行ts_test,触摸屏出现图象.但有一行提示:[root@/usr/build/bin]#./ts_test
selected device is not a touchscreen I understand

我把/etc/profile中选择触摸屏设备的语句改成:
export TSLIB_TSDEVICE=/dev/input/event0

重新运行./ts_calibrate,成功


./ts_calibrate   //板子上陆续出现5个光标,点击完毕后会生成校准文件pintercal存放在/etc/下面
********************************************

 

ts_calibrate是一个应用程序,在屏幕上画几个按钮,将用户点击后从ts驱动获得的数据和

屏上的坐标位置通过一套算法来获得校准数据写到一个校准文件里。 

******************************************

运行./ts_test,成功.














1.编译

前段时间非常的郁闷…因为在运行生成校准程序ts_calibrate时总是出现一个错误:ts_open:Inappropriate ioctol for device

后来无数折腾后经过nanfansky指点才知道是自己板子的触摸屏驱动不支持ioctl操作,狂汗…

 

重新编译tslib

 

cd tslib-1.3

 

export CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc   //指定交叉编译器

 

./autogen.sh   //生成config文件

 

export PATH=/usr/local/arm/2.95.3/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

 

 

****************************************************

在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

(这里要自己针对自己板子具体的文件进行设置,要不然也会报错)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -