关于tslib在嵌入式开发平台的移植,网上已经有了许多的相关结束。
正常开机后,在控制台直接调用ts_calibrate 发生ts_open : No such file or directory,那么需要在开机启动的时候做一些列的TSLIB的相关环境变量配置。
详情可见: http://hi.baidu.com/whymekongjian/item/adfc350c669ccf1facdc70f9
原本我的机子arm2410完美运行ts_calibrate.
最近接一个项目,要求在arm板子上跑个QT程序,qt程序里面在特定的情况下,从程序调用ts_calibrate引发触屏调试。
这个也不难,一个QProcess 类 一个start函数就可以解决。
我在控制台上运行编译好的qt程序,按键触发程序调用ts_calibrate 成功!
一切似乎都很完美。
but...
应软件设计的要求,应用程序要求开机自动重启。我的做法是在linux系统的初始化脚本/etc/init.d/rcS 目录里面添加 qt程序的运行脚本。
这样qt就可以开机自动开启了。
但是。但qt自启动后,按键居然无法触发 ts_calibrate程序的运行。
ts_open: No such file or directory
在网上查了一遭,网上大部分的帖子要解决的不一样。因为在普通情况下,无论是直接调用ts_calibrate,还是从应用程序调用都是成功了。
百思不得其解。
后来查了ts_open 函数,以TSLIB_TSDEVICE为参数。 在终端执行 echo$TSLIB_TSDEVICE
返回的是 "/dev/event0"
猜测打不开的原因是不是TSLIB_TSDEVICE这个环境变量在自启动的时候不对?
于是写了一个简单的脚本文件
#!bin/sh
#testts.sh
echohello
echo$TSLIB_TSDEVICE
exec/usr/local/tslib/bin/ts_calibrate
而在qt程序里面从直接调用程序改成调用这个脚本。
开机之后,在终端手动运行qt程序,按键成功触发触控程序。 并且脚本在终端打印出
hello
/dev/event0
自启动的时候,无法依旧是ts_open 错误,这次看到了:终端只打印了
hello
原来还是环境变量的问题。
分析原因,应该是在qt程序中调用外部程序,但是外部程序不知道处于什么原因,无法使用原来的这一套环境变量。
为了解决燃眉之急,
先在终端下,执行env命令
查看所有的环境变量
将该环境变量的配置在
testts.sh
exec执行语句之前。
修改过后
自启动qt程序,按键也成功触发触控。
下一步,需要能有更好的在程序内触发外部脚本或者程序,并且传递正确的环境变量。