大家好,我是情报小哥!
本文为【从单片机步入嵌入式Linux】系列文章的第六篇,前面几篇文章从uboot->内核->根文件系统,从基本的移植到烧录,算是比较完整的介绍了Linux系统的一个全貌,并且从相对比较底层的角度跟大家一起来构建了一个比较粗糙的嵌入式Linux平台。
以后遇到其他的平台都是类似的做法,烧录的形式和相关配置原理上都大同小异。因为我们本次的目的是要移植Qt5.6,那么触摸屏是肯定要玩起来的,比较方便的就是使用tslib库来配合使用了。
01
何为tslib
前面在移植Linux内核的时候,已经把touch触摸驱动编译进了内核了,那么上电便会自动加载相应的驱动。
那很多人该疑问了,有了驱动不就可以了吗?为何还要弄一个tslib库,可以直接进入tslib库的官网(访问:http://www.tslib.org/)了解一下它,进入官网后便会看到下图:
明显的可以看到其就是一个用于处理滤波触摸屏事件的C库,一款基于LGPLv2的免费软件,为触摸屏提供一个适配器层,可以完成校准,消抖等功能,从而为上层应用程序提供一个统一的接口,比如QT,MiniGUI等都可以调用相应的接口进行访问。
所以tslib并不属于驱动层, 而是一个应用软件的C库。
02
安装tslib
tslib的安装还是比较简单的,通过在PC上进行交叉编译,并安装到相应的文件夹中,然后把安装的文件移植到板级平台上,配置好相应的环境变量即部署好了tslib库使用环境。
下面小哥简单描述一下该过程 :
1、在进行tslib交叉编译之前需要确认编译环境是否安装好autoconf、automake、libtool,这三个东西都属于automake工具,主要是用于配置脚本和自动创建makefile等,而tslib编译所采用的就是这种方式。
如果没有安装就采用如下命令进行安装:
1sudo apt-get install autoconf automake libtool
2、这里我们采用常用的tslib-1.4,该源文件可以直接在tslib官网上进行下载。
下载下来一般都是压缩文件,直接解压以后执行如下命令:
1./autogen.sh
2./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes CC=/home/book/WorkSpace/Qt/src/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc CXX=/home/book/WorkSpace/Qt/src/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++ -prefix=/home/book/WorkSpace/Qt/src/tslib-1.4/touch_root
3make CROSS_COMPILE=/home/book/WorkSpace/Qt/src/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux- ARCH=arm -j8
4make install CROSS_COMPILE=/home/book/WorkSpace/Qt/src/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux- ARCH=arm -j8
执行autogen.sh脚本从而生成./configure脚本,然后通过执行configure脚本用于指定安装路径等参数,第三步命令则是编译tslib库,然后采用make install进行安装,这样tslib便会安装到第二步所指定的安装路径。
一切执行顺利便可以在安装路径中看到如下内容:(此过程与busybox安装其实是类似的)
3、因为之前加载的触摸屏驱动是输入子设备,这样在tslib安装目录中的etc目录下修改ts.conf文件,使得其支持input输入子系统,然后保存退出,这样tslib安装文件就准备好了。
4、下面我们把该touchroot文件夹进行压缩转移到之前制作好的nfs网络共享文件系统路径下(NFS网络文件系统设置和使用查找往期文章)来进行测试,并进行解压。
1tar zcvf touch_root.tar.gz touch_root/
2mkdir ../../busybox/usr/local
3cp touch_root.tar.gz ../../busybox/usr/local/
4cd ../../busybox/usr/local/
5tar zxvf touch_root.tar.gz
虽然已经把安装的文件放到了板级根文件系统中,那怎样让Linux系统中运行的应用程序找到所安装的tslib目录呢?
一种是应用程序直接以绝对路径进行查找,这样太过死板,而另外一种则是配置好预定义的环境变量,应用程序只需要查找系统的环境变量既可以找到对应的tslib安装路径。(环境变量等知识可以查找往期文章)
5、在根文件系统中的etc目录中创建profile文件,并进行如下环境变量配置,系统在启动过程中便会执行profile文件中的内容,从而设置好相应的环境变量,以后应用程序便能找到安装路径了。
如果一切顺利,便可以执行tslib中bin文件中的测试程序来检测是否安装成功。
比如ts_print测试触摸屏驱动是否正常,运行应用程序以后,然后点击触摸屏,即可输出相应的坐标数据:
还有ts_calibrate程序主要用于校准,一运行屏幕便会出现如下画面。
点击屏幕上的提示点,即可完成校准。
同时还会在环境变量所配置的生成校准文件的路径下,生成校准文件-pointercal供每次启动使用,这样用户就不需要每次都进行校准了。
那么tslib库的安装和部署就暂时讲到这里,其他平台也都大同小异,主要是一些配置根据对应的平台和使用情况进行修改即可。
同时如果对触摸这块比较感兴趣还可以研究一下tslib开源代码进行原理性学习,一些算法还是可以借鉴一下的~
好了,这里小哥就介绍了一下tslib触摸库的简单安装与测试的相关知识,希望本文能够对你有帮助,本系列文件还会持续更新。
全部0条评论
快来发表一下你的评论吧 !