700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Tslib1.20和Qt 4.8.4与在ARM开发板上的移植 多点触摸

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

时间:2024-03-11 03:40:58

相关推荐

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

//参考 文章/emouse/archive//01/29/2881311.html

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

1 下载tslib1.20

/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'CCLDts_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 statusmake[2]: *** [ts_test] 错误 1make[2]:正在离开目录 `/home/samba/tslib/tslib-1.20/tests'make[1]: *** [all-recursive] 错误 1make[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 cleanmake make install

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

tslib的开发板移植与测试

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

/usr/local/tslib/lib文件下除去pkgconfig目录外其他所有文件拷贝到开发板/lib目录下/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/event1export TSLIB_CONFFILE=/etc/ts.confexport TSLIB_PLUGINDIR=/lib/tsexport TSLIB_CALIBFILE=/etc/pointercalexport TSLIB_CONSOLEDEVICE=noneexport 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 -ltsQMAKE_CXX = arm-linux-g++ -ltsQMAKE_LINK = arm-linux-g++ -ltsQMAKE_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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。