分类: LINUX
2009-01-08 15:39:08
我的做法:(本人原来的文件系统放于/nfs/cramfs下)
我在/nfs/cramfs下新建了一个tslib目录,只copy了一些需要的文件
mkdir /nfs/cramfs/tslib
mkdir /nfs/cramfs/tslib/tests //放置测试程序
mkdir /nfs/cramfs/tslib/plugins
mkdir /nfs/cramfs/tslib/lib
mkdir /nfs/cramfs/tslib/config
开始拷贝文件到文件系统:
cp /opt/host/armv4l/armv4l-unknown-linux/tslib/bin/* /nfs/cramfs/tslib/test
cp /opt/host/armv4l/armv4l-unknown-linux/tslib/etc/* /nfs/cramfs/tslib/config
cp /opt/host/armv4l/armv4l-unknown-linux/tslib/lib/* /nfs/cramfs/tslib/lib //其实不需要 .a 和.la 的文件
安装的时候你可能没有看到plugins目录,要是在/opt/host/armv4l/armv4l-unknown-linux/tslib下没有,你就到你编译tslib的当前目录去找下plugins
我是自己找到之后copy到/opt/host/armv4l/armv4l-unknown-linux/plugins目录的
cp /opt/host/armv4l/armv4l-unknown-linux/plugins/*.so /nfs/cramfs/tslib/plugins/ //触摸屏插件模块库
mount –t nfs –o nolock 192.168.0.155:/nfs /tmp使板子mount上PC
要是你不想自己指定环境变量,你可以做一些硬链接,包括以下内容:(要自己指定环境变量此步骤不需要)(建议初学者还是直接指定环境变量吧)
ln -s /dev/fb/0 /dev/fb0
//帧缓冲设备板子上为/dev/fb/0,但程序默认为/dev/fb0,所以做了一个链接/dev/fb0到/dev/fb/0
ln -sf /dev/touchscreen/0raw /dev/touch/UCB1x00(若上文中你修改了了tslib关于打开触摸屏驱动设备结点的位置,这里也不需要修改)
我得触摸屏设备节点文件为/dev/touchscreen/0raw所以,建立链接 /dev/ts 到/dev/touchscreen/0raw
(这里要自己针对自己板子具体的文件进行设置,要不然也会报错)
还有一些库之间的链接,你就自己解决吧,比如,lib默认库的位置是/lib,因此你需要做链接到/lib ,还有配置文件等等.我这里就不罗嗦了。
指定环境变量
export QWS_MOUSE_PROTO=TPanel:/dev/touchscreen/0raw
export T_ROOT=/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/touchscreen/0raw //指定触摸屏设备节点文件
export TSLIB_CALIBFILE=$T_ROOT/etc/pointercal //指定触摸屏校准文件pintercal的存放位置
export TSLIB_CONFFILE=$T_ROOT/config/ts.conf //指定TSLIB配置文件的位置
export TSLIB_PLUGINDIR=$T_ROOT/plugins //指定触摸屏插件所在路径
校准
运行校准程序校准屏幕(5点校准)
cd $T_ROOT/tests
./ts_calibrate //板子上陆续出现5个光标,点击完毕后会生成校准文件pintercal存放在$T_ROOT/etc/下面
********************************************
ts_calibrate是一个应用程序,在屏幕上画几个按钮,将用户点击后从ts驱动获得的数据和
屏上的坐标位置通过一套算法来获得校准数据写到一个校准文件里。
******************************************
可能遇到的错误分析:
在测试的时候,运行./ts_calibrate又出现了令人十分之郁闷的错误:
ts_config: Success
追查后应该是在打开ts_config中出现了错误(居然报Success)
那么错误就定位在 ts_config 里。并且可以进一步确定是在加载插件模块时出的错
查询了ts_load_module.c这个文件发现网上和自己的不太一样(网上公布的源码是1.4或者是0.1.1的吧)我的是1.3的
我下载了tslib-0.1.1的后重新实验 就发现错误的是这样子的(第一个错误是由ts.conf所决定的)
Couldnt load module pthres
No raw modules loaded
tsconfig: Success
阅读了tslib 的原代码,知道了cstdlib 库里的一个函数: getenv
是用来得到指定系统环境变量的值。是为了测试 tslib 是否得到正确的环境变量。
其环境变量默认的值在readme中有注明。
加载插件模块时出出错分析:
ts_calibrate会打开ts_config
ts_config函数里首先会读取 tslib 配置文件(ts.conf,由 TSLIB_CONFFILE环境变量指定,在tslib/etc下面),
然后根据这个文件逐个加载插件库
1.3版本的ts.conf内容为
module mousebuts
moudle variance xlimit=50 ylimit=50 pthreshold=3
moudle dejitter xdelta=1 ydelta=1 pthreshold=3
moudle linear
ts_config又会调用ts_load_module加载库。从这个函数里,程序先是得到配置文件中指定加载的模块名,
然后根据模块名构造了一个 so 文件文件名,然后调用了系统函数 dlopen 加载库!
Linux 下的加载dlopen 类似于 Windows 下动态链接库的函数:dlopen
错误就应该出在构造的库文件名是错误的---其指定的文件不存在
---从而导致 dlopen无法加载。所以才提示找不到文件或目录!
那么这样就是应该把需要的mousebuts.so variance.so dejitter.so linear.so应该复制到/tslib/plugins中
(上面修正后作了这一步,就可以拉,就不会出现错误拉)