Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)

      本小节主要介绍Tslib-1.4库的编译与移植,下节主要Qt5.8的移植,以及Qt5.8与Tslib-1.4的对接,实现在Qt上的触摸功能;

一、开发环境以及工具

PC系统:Linux version 4.10.0-38-generic (buildd@lgw01-amd64-059) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #42~16.04.1-Ubuntu SMP Tue Oct 10 16:32:20 UTC 2017

交叉编译器:arm-xilinx-linux-gnueabi-gcc 

硬件平台:赛灵思(XILINX)ZYNQ-7000开发板

二、前言

       首先介绍下交叉编译器的使用方法,gcc(编译c语言——.c程序)、g++编译器(编译c++——.cpp程序)在PC Linux系统上一般是装好的,用他们编译好的程序只能在X86平台(32位系统,如Windows、Linux)、或者X64平台(64位PC系统)上运行,PC的CPU一般是Intel架构或者AMD架构;而Linux的嵌入式平台,CPU一般是ARM架构;如果需要在嵌入式平台上运行程序,那么就需要用该ARM平台所对应的交叉编译器(arm-linux-gcc或者arm-linux-g++)编译程序源码,然后拷贝到ARM开发板上运行。如果该应用程序还需要依赖某些库文件(比如动态库.So),那么就需要把该库的绝对路径添加到环境变量$LD_LIBRARY_PATH中,程序运行时就会链接到该.So库正常运行了。以上纯属个人在工作中的理解,有错误的地方请大家指正。

工具链下载:https://download.csdn.net/download/psy6653/10493762?utm_source=bbsseo

交叉编译器安装、使用的演示:

原理都一样,我就随便下载一个交叉编译重新安装;cross_compilers.tar.gz(交叉编译器源码包,一般是arm-linux-xxx的压缩包,我的是自己压缩的,再解压演示的

解压该源码包(我是在/opt目录下解压的)

tar -zxvf cross_compilers.tar.gz 

然后进入解压目录的bin目录下,我们可以看到该交叉编译器的许多工具

Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第1张图片

如何使用该交叉编译器呢?我习惯vim /etc/profile文件,在$PATH路径下增加该交叉编译器bin路径

PATH=PATH=$PATH:/mnt/workspace/qt/cross_compilers/bin/

让刚所修改的环境变量立即生效

source /etc/profile

让后我们在终端terminal中输入arm后,再按Tab键(自动补齐功能),我们就可以看到以arm开头的一些交叉编译器工具的文件,意思是环境变量设置成功,交叉编译器已经成功安装,并能使用。

或者输入命令查看交叉编译器的版本

arm-xilinx-linux-gnueabi-gcc -v
Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第2张图片

三、Tslib库的安装与编译

在编译Tslib-1.4库文件前,需要添加

解压tslib-1.4库源码

unzip tslib-master.zip

进入解压的tslib-master目录:首先清除源码并运行autogen.sh脚本

./autogen-clean.sh
./autogen.sh

但提示./autogen.sh: 3: ./autogen.sh: autoreconf: not found的错误,可看出缺少autoreconf,度娘说是移植tslib前需要安装的插件,也就是一个准备工具。

1、下载了一个autoconf-2.69.tar.xz包进行安装

Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第3张图片

需要解压两次,第一次把.tar.xz解压成.tar包,再把所生成.tar解压成目录

xz -d autoconf-2.69.tar.xz 
tar -xvf autoconf-2.69.tar

进入解压所得到的autoconf-2.69目录运行配置,--prefix参数为安装路径

./configure --prefix=/usr/local/

但又提示configure: error: no acceptable m4 could be found in $PATH.

Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第4张图片

2、下载一个m4-1.4.13.tar.gz进行安装

先解压m4-1.4.13.tar.gz,再进入所解压的m4-1.4.13目录

tar -zxvf m4-1.4.13.tar.gz
cd m4-1.4.13/

m4-1.4.13目录下,运行./configure配置,再make、make install,其中--prefix参数表示该工具所安装的路径,没提示错误表示安装成功。

./configure --prefix=/usr/local/
make
make install

再回头进入autoconf-2.69,同样运行./configure配置,再make、make install安装,

./configure --prefix=/usr/local/
make
make install

再回到tslib-master目录下运行autogen.sh脚本,提示Can't exec "aclocal": No such file or directory at /usr/local/share/autoconf/Autom4te/FileUtils.pm line 326. autoreconf: failed to run aclocal: No such file or directory错误


3、需安装一个automake工具来解决

下载一个automake-1.16.tar.xz,用同样方法解压再进入automake-1.16解压目录进行安装


./configure --prefix=/usr/local/
make
make install

再回到tslib-master目录下运行autogen.sh脚本提示configure.ac:64:error:possibly undefined macro: AC_DISABLE_STAT ICIf this token and others are legitimate, please use m4_pattern_allow. See the Autoconf documentation.
    configure.ac:65: error: possibly undefined macro: AC_ENABLE_SHARED
    configure.ac:66: error: possibly undefined macro: AC_LIBTOOL_DLOPEN
    configure.ac:67: error: possibly undefined macro: AC_PROG_LIBTOOL
    autoreconf: /usr/local/bin/autoconf failed with exit status: 1

4、需安装一个libtool工具

下载一个libtool-2.4.tar.gz,用同样方法解压再进入libtool-2.4解压目录进行安装

tar -zxvf libtool-2.4.tar.gz
cd libtool-2.4/

./configure --prefix=/usr/local/
make
make install

5、成功编译Tslib

再回到tslib-master目录下运行autogen.sh脚本,成功运行并没有错误提示,

Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第5张图片再没有报错的情况下生成了/configure


要make编译tslib,必须要有Makefile文件,那么就需要先运行所生成的./configure进行配置,然后再生成Makefile;--host 指定交叉编译工具链的前缀,--prefix 指定所编译生成Tslib库的执行文件、头文件和动态库的路径。

./configure  --host=arm-xilinx-linux-gnueabi --prefix=/home/Arm-tslib CC=/opt/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi/bin/arm-xilinx-linux-gnueabi-gcc


再make、make install,没有报错就表示成功了。

make
make install

cd  /home/Arm-tslib目录,生成的bin目录有执行文件,lib有.So、.la库文件,include目录下有.h头文件,etc有配置文件等

Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第6张图片

总结:

            如果需要成功安装和编译Tslib-1.4库,指定交叉编译器(当更换平台时,更换平台的编译器即可),需要安装四个工具(autoconf、mp4、libtool、automake)。如果PC Linux系统能够联网,而且/etc/apt/sources.list源没什么问题,可以用sudo apt-get install  automake autoconf libtool libsysfs-dev命令自动安装,效果都一样。这四个工具以及tslib库的源码我已在本平台上传,需要的可以下载(资源名:tslib库及其安装工具)

Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第7张图片

四、Tslib的移植以及触摸屏的校正

        把编译生成的tslib库Arm-tslib拷贝到开发板上任意路径,我拷贝到/sat目录下,并把目录名Arm-tslib改成tslib,这里最重要就是设置环境变量,为什么要设置?我前言有提到,运行应用程序需要链接它的依赖库,怎么找它额依赖库,就在环境变量的路径下面寻找。那么可以自己新建一个脚本,在运行tslib相关应用程序前先执行下脚本;

#!/bin/sh
export TSLIB_ROOT=/sat/tslib                                            
export TSLIB_TSDEVICE=/dev/input/event0 
export TSLIB_CALIBFILE=/etc/pointercal   
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf    
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts  
export TSLIB_FBDEVICE=/dev/fb0   
export TSLIB_CONSOLEDEVICE=none  
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/li

其中

TSLIB_TSDEVICE          //触摸驱动坐标上报的接口名,可以在dev/input/目录下查看,本测试开发板为event0
TSLIB_CALIBFILE         //校准的数据文件,由ts_calibrate校准程序生成。 
TSLIB_CONFFILE          //配置文件名。 
TSLIB_PLUGINDIR         //插件目录 
TSLIB_CONSOLEDEVICE     //控制台设备文件名 


TSLIB_FBDEVICE          //fb0为ARM中的一块内存,我们可以理解为PC的显存,要显示应用层的图形界面都不能绕过它

下面运行Tslib的ts_calibrate应用程序,首先检测显示屏的大小为1024x600分辨率,然后一次点击四个角落和中心点5个光标,判断所点击的位置和坐标打印是否相符和,运行完后之程序会自动退出;

Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第8张图片

运行程序之前,显示的是串口终端的信息

运行Tslib的ts_calibrate应用程序后,左上角会有一个十字光标,当我们点击下十字光标,串口终端就会打印Topleft X=45 Y=71,其他的四个点同样会打印出所被点击点的坐标,演示结果如下:

Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第9张图片

运行ts_test程序,点击draw按钮时,就可以随意绘图,点击qiut就会退出该应用程序;

Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第10张图片

Qt5.8与触摸Tslib-1.4库ARM-ZYNQ平台的移植(一)_第11张图片

那么tslib的移植以及校准就算完了,下一节介绍Qt5.8与触摸的对接即Qt5.8与触摸Tslib-1.4库在嵌入式ARM-ZYNQ平台的移植(二)。

你可能感兴趣的:(qt界面编程)