Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23581
  • 博文数量: 13
  • 博客积分: 535
  • 博客等级: 中士
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-18 15:50
文章分类

全部博文(13)

文章存档

2011年(1)

2009年(12)

我的朋友

分类: LINUX

2009-12-02 16:45:05

这几天非常的郁闷…

编译完的qtopia4.2.1在移植到开发板上的时候,出现问题了,

问题在触摸屏,使用的是Tslib-1.3来校验屏的,什么环境变量参数都设置好了,可是在运行生成校准程序ts_calibrate时总是出现一个错误:

ts_open:Invalid Argument

 

搜索了相当多的资料,尝试了很多方法,最后稀里糊涂成功校验了触摸屏。

原来出错的主要原因至今未明,可是管不了那么多了,先记录下来经过。

主要是参考的这篇博文:

http://blog.chinaunix.net/u1/33412/showart_282396.html

1. 编译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  我在/real2410/root_nfs/mnt/nfs/下新建了一个tslib目录,copy了一些需要的文件

注:我是用nfs直接加载根文件系统的,根文件系统在pc上的路径在/real2410/root_nfs下,因此注意我建立的tslib目录路径,在开发板上将会是:/mnt/nfs/tslib,这影像到后面一些环境变量的设置。

 

mkdir /real2410/root_nfs/mnt/nfs/tslib

 

mkdir /real2410/root_nfs/mnt/nfs/tests

 

mkdir /real2410/root_nfs/mnt/nfs/tslib/plugins

 

mkdir /real2410/root_nfs/mnt/nfs/tslib/lib

 

mkdir /real2410/root_nfs/mnt/nfs/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/.libs/*.so /root/share/tslib/plugins/     //触摸屏插件模块库

注:原文中为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 启动板子加载nfs根文件系统

执行minicom即可进入(当然之前nfs系统已配置好)。

2.3 做链接

ln -s /dev/fb/0 /dev/fb0

 

//帧缓冲设备板子上为/dev/fb/0,但程序默认为/dev/fb0,所以做了一个链接/dev/fb0/dev/fb/0

 

ln –s /dev/input/tsraw0 /dev/h3600_tsraw

//qtopia要打开/dev/h3600_tsraw,你没有这个文件, 所以 dev下边应该有触摸平的节点, 我得触摸屏设备节点文件为/dev/input/tsraw0

 所以,建立链接 /dev/h3600_tsraw/dev/input/tsraw0

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

 

2.4 指定环境变量

export QWS_MOUSE_PROTO=Tslib: /dev/input/tsraw0

 

export T_ROOT=/mnt/nfs/tslib

 

export LD_LIBRARY_PATH=$T_ROOT/lib  //指定tslib库文件路径

 

export TSLIB_CONSOLEDEVICE=none  //tslib运行需要的控制台,这里就是LCD屏幕 ,设定控制台设备为none,否则默认为/dev/tty,

 

export TSLIB_FBDEVICE=/dev/fb0    //指定帧缓冲设备

 

export TSLIB_TSDEVICE=/dev/input/tsraw0        //指定触摸屏设备节点文件

 

export TSLIB_CALIBFILE=$T_ROOT/etc/pointercal     //指定触摸屏校准文件pintercal的存放位置

 

 

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

注:qte/src/kernel/qwsmouse_qws.cpp里面校准文件默认打开是在/etc下面为/etc/pointercal

可是我得板子的根文件系统为只读,所以我放在/mnt/nfs/tslib/etc下面了,

所以在交叉编译qte的时候需要修改qwsmouse_qws.cpp

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

 

 

export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf   //指定TSLIB配置文件的位置

 

export TSLIB_PLUGINDIR=$T_ROOT/plugins    //指定触摸屏插件所在路径

 

2.5 校准

运行校准程序校准屏幕(5点校准)

cd $T_ROOT/tests

 

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

 

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

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

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

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

至此,完成了校验。

 

阅读(1302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~