在前面的操作中我们已经测试了驱动的使用,但是那种方式是不够直观的。下面我们借助一个第三方的应用程序通过UI来测试下我们的驱动是否工作正常,并且将完成的驱动直接添加到内核中以便可以开机自动加载。
tslib
Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能(万能的度娘给出的定义)。
至于Tslib是如何工作的,不是属于我们这一章节要将的东西,这里要讲如何去编译、配置以及使用这个tslib让我们测试触摸屏驱动。
tslib编译
我们使用的tslib版本号为1.21,下载源码以后解压。文件夹里有个autogen.sh文件可以用来自动生成Makefile。但是有些时候需要安装些依赖的库,我们直接apt安装就可以了。完成以后就可以直接运行autogen.sh。
makefile生成以后我们要进行配置,指定我们使用的交叉编译器arm-linux-gnueabihf,以及目录
./configure --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/path/tslib-1.21/arm-tslib
最后加红加粗的部分是tslib最后编译完成后的生成路径,我们根据实际需求改写就可以。完成以后就make和make install就可以了
make
make install
编译完成后我们关注的就是指定的编译输出了。
在bin下就是执行文件,我们可以看下执行文件的属性
可以看出来生成的执行文件属于ARM架构的,说明我们编译的文件没有问题。
移植tslib到文件系统
编译完成后就可以吧我们的arm-tslib整个文件夹复制到根目录下了,可以放在/usr/lib目录下。然后配置环境变量/etc/profile
1 #!/bin/shexport
2
3 TSLIB_ROOT=/usr/lib/arm-tslib
4 export TSLIB_FBDEVICE=/dev/fb0
5 export TSLIB_TSDEVICE=/dev/input/event1
6 export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
7 export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
8 export TSLIB_CALIBFILE=/etc/pointercal
9 export LD_PRELOAD=$TSLIB_ROOT/lib/libts.so
主要要注意的就是TSLIB对应的硬件,第4行的就是我们屏幕对应的framebuffer文件,第5行里的event后面的数值需要根据实际情况修改;最后一行的LD_PRELOAD是不知道为什么有些时候找不到libts.so,需要我们直接显性的指定。
下面可以直接通过source /etc/profile的命令直接使能新修改的profile文件,或者直接重启,直接运行文件测试下我们的驱动
如果配置什么的没问题,就会在屏幕上显示
中间的小十字坐标会随着我们手指滑动运动,点击中间的Draw按钮可以有类似画图的效果。
这样就说明我们的驱动程序没问题了!
移植驱动至内核
由于触摸屏的驱动是我们嵌入式开发必须要使用的,就需要我们把这个测试完成的驱动文件(.c文件)移植到内核,通过编译内核的时候直接编译进去,就免去了每次启动系统以后手动加载ko文件的过程。方法很简单,先将驱动复制到内核里(驱动一般都在driver下)由于是触摸屏的驱动,可以直接放在drivers/input/touchscreen路径下。
复制完驱动源文件以后要修改驱动路径下(触摸屏驱动文件所在文件夹下)的Makefile文件,只用在最后添加规则就可以了
重新编译内核,启动系统以后可以看一下
input这一行就是加载的触摸屏驱动信息。这就说明触摸屏驱动加载成功,但是还要查一下上报的event事件是哪一个!然后修改一下/etc/profile里的tslib配置
用source命令重新加载一下profile。用tslib里的测试命令测试一下,没问题就可以了!