Tslib1.20和Qt 4.8.4与在ARM开发板上的移植 多点触摸

//参考 文章 https://www.cnblogs.com/emouse/archive/2013/01/29/2881311.html

 

由于这几天做 ARM触摸屏移植。走了好多弯路。所以写下这篇笔记。希望能帮到大家快速的是实现TsLib在QT上的移植。

1 下载tslib1.20

https://github.com/libts/tslib/releases

这里面有所有版本的tslib。

网络上常用的tslib1.4不支持多点触摸。所以要注意根据自己的需求选择一个合适的版本。

2 解压、配置

解压 tslib-1.20

tar zxvf tslib-1.20.tar.gz

cd tslib-1.19/

$ CC=arm-linux-gcc ./configure --prefix=`pwd`/now_tslib --host=arm-linux

注意:不要加 --enable-static=yes --enable-shared=no 这个会导致 不能生成动态的.so文件。

3 编译

解压和配置之后,执行 make 编译 如果出现下面的错误

$ make
...
make[2]: 正在进入目录 `/home/samba/tslib/tslib-1.19/tests'
  CCLD     ts_test
../src/.libs/libts.a(ts_setup.o): In function `scan_devices':
ts_setup.c:(.text+0xbc): undefined reference to `EVIOCGPROP'
ts_setup.c:(.text+0x148): undefined reference to `EVIOCGPROP'
ts_setup.c:(.text+0x1c8): undefined reference to `EVIOCGPROP'
ts_setup.c:(.text+0x244): undefined reference to `EVIOCGPROP'
collect2: ld returned 1 exit status
make[2]: *** [ts_test] 错误 1
make[2]:正在离开目录 `/home/samba/tslib/tslib-1.20/tests'
make[1]: *** [all-recursive] 错误 1
make[1]:正在离开目录 `/home/samba/tslib/tslib-1.20'
make: *** [all] 错误 2

解决方案 打开 src/tslib.h

在文件中加入这个

#define EVIOCGPROP(len)          _IOC(_IOC_READ, 'E', 0x09, len)         /* get device properties */
 

执行
make clean
make 
make install

完成之后会生成一个 now_tslib的文件夹。这个里面就是编译好的tslib库。

tslib的开发板移植与测试

按照上面的操作方法,交叉编译安装后的文件在/usr/local/tslib目录下,因此需要拷贝的文件如下:

  1. /usr/local/tslib/lib文件下除去pkgconfig目录外其他所有文件拷贝到开发板/lib目录下
  2. /usr/local/tslib/etc下的ts.conf拷贝到开发板的/etc下,在复制对应目录之前修改文件如下,也可以复制完成后修改。

下面是ts.conf文件的第一行与第二行  

# Uncomment if you wish to use the linux input layer event interface
# module_raw input

去掉# module_raw input前面的注释,一定要注意中间的空格也去掉,module顶格。

最后添加环境变量,通过超级终端在开发板系统中添加环境变量,可以在开发板文件系统的/etc/profile文件里添加,也可以直接添加。

 
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts

export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0

说明:
                TSLIB_TSDEVICE        //触摸屏设备文件名。
                TSLIB_CALIBFILE        //校准的数据文件,由ts_calibrate校准程序生成。
                SLIB_CONFFILE        //配置文件名。
                TSLIB_PLUGINDIR         //插件目录
                TSLIB_CONSOLEDEVICE        //控制台设备文件名
                TSLIB_FBDEVICE        //设备名

                以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发板上的/dev目录下的设备节点相对应。

        注意:下面的event1不是一定的。有些设备是touchscreen0 或者event0 

               查看自己的设备 使用 cat /proc/bus/input/devices 就可以看到自己设备基本信息  

最后运行测验程序

ts_calibrate 进行校验
ts_test      进行测试

QT 的交叉编译与安装

和PC平台下的编译类似,通过运行./configure进行配置生成makefile文件,然后编译安装,只是因为是针对嵌入式平台需要进行一些针对性配置,这里生成一个自动配置文件,可以通过修改文件来方便的更改配置。

# cd qt-everywhere-opensource-src-4.8.4
#sudo gedit autoconfig.sh

在原本的上面 加入

-qt-mouse-tslib \
-I/usr/local/tslib/include \
-L/usr/local/tslib/lib

上面的主要参数含义说明如下:
-embedded arm: 表示将编译针对 arm 平台的 embedded 版本;
-xplatform qws/linux-arm-g++: 表示使用 arm-linux 交叉编译器进行编译;
-qt-mouse-tslib: 表示将使用 tslib 来驱动触摸屏;

运行./autoconfig.sh 生成makefile文件,生成成功最后会输出如下信息

如果编译出现缺少链接信息错误:

warning: libts-0.0.so.0, needed by , not found (try using -rpath or -rpath-link)
undefined reference to `ts_read_raw'
undefined reference to `ts_open'
undefined reference to `ts_fd'
undefined reference to `ts_config'
undefined reference to `ts_close'
undefined reference to `ts_read'
collect2: ld returned 1 exit status

解决方法如下:

修改qt-everywhere-opensource-src-4.8.4/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加lts参数):

QMAKE_CC                = arm-linux-gcc -lts

QMAKE_CXX               = arm-linux-g++ -lts

QMAKE_LINK              = arm-linux-g++ -lts

QMAKE_LINK_SHLIB        = arm-linux-g++ -lts

接下来执行make 进行编译,时间同样需要很长的时间,视个人电脑配置而定,时间大概在半个小时左右吧。

最后make install安装,安装完成后可以在安装目录/usr/local/Trolltech/QtEmbedded-4.8.4-arm 下查看对应文件。

开发板配置

在开发板上的使用其实很简单,只需要拷贝相应的库文件并设置环境变量即可,拷贝的方法按照个人喜好,我是挂载nfs来实现拷贝。

root@emouse:/armnfs# cp -R /usr/local/Trolltech/QtEmbedded-4.8.4-arm/lib /armnfs/qt 

设置环境变量:

export QTDIR=/opt/qt484 
export LD_LIBRARY_PATH=$QTDIRlib:$LD_LIBRARY_PATH 
export PATH=$QTDIR/bin:$PATH 
export QWS_MOUSE_PROTO=tslib:/dev/input/touchscreen0 
export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0" 
export QT_QWS_FONTDIR=/opt/qt484/lib/fonts

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值