嵌入式开发板上自启动qt程序调用ts_calibrate 发生ts_open : No such file or directory 解决办法

关于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程序,按键也成功触发触控。

下一步,需要能有更好的在程序内触发外部脚本或者程序,并且传递正确的环境变量。

 

你可能感兴趣的:(嵌入式Linux开发,QT开发)