tslib 是一个开源的第三方库,用于触摸屏性能调试,使用电阻屏的时候一般使用 tslib 进行校准。虽然电容屏不需要校准,但是由于电容屏加工的原因,有的时候其不一定精准,因此有时候也需要进行校准。最主要的是 tslib 提供了一些其他软件,我们可以通过这些软件来测试触摸屏工作是否正常。最新版本的 tslib 已经支持了多点电容触摸屏,因此可以通过 tslib 来直观的测试多点电容触摸屏驱动,这个要比观看 eventX 原始数据方便的多。
tslib 的移植很简单,步骤如下:
1 、获取 tslib 源码
官网源码
2.拷贝到ubuntu
root@ubuntu:~/tslib# ls
test tslib-1.21 tslib-1.21.tar.xz
解压得到:tslib-1.21源码
3.交叉编译、测试 tslib
先配置工具链:
root@ubuntu:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin# ls
arm-linux-gnueabihf-addr2line arm-linux-gnueabihf-gfortran
arm-linux-gnueabihf-ar arm-linux-gnueabihf-gprof
arm-linux-gnueabihf-as arm-linux-gnueabihf-ld
arm-linux-gnueabihf-c++ arm-linux-gnueabihf-ld.bfd
arm-linux-gnueabihf-c++filt arm-linux-gnueabihf-nm
arm-linux-gnueabihf-cpp arm-linux-gnueabihf-objcopy
arm-linux-gnueabihf-elfedit arm-linux-gnueabihf-objdump
arm-linux-gnueabihf-g++ arm-linux-gnueabihf-ranlib
arm-linux-gnueabihf-gcc arm-linux-gnueabihf-readelf
arm-linux-gnueabihf-gcc-4.9.4 arm-linux-gnueabihf-size
arm-linux-gnueabihf-gcc-ar arm-linux-gnueabihf-strings
arm-linux-gnueabihf-gcc-nm arm-linux-gnueabihf-strip
arm-linux-gnueabihf-gcc-ranlib gdbserver
arm-linux-gnueabihf-gcov runtest
arm-linux-gnueabihf-gdb
2.配置环境变量PATH
//1/更改.bashrc
vi .bashrc
//2.添加以下内容:
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
//3.更新.bashrc
source .bashrc
//4.查看是否成效
gec@ubuntu:~$ arm-linux-gnueabihf-gcc -v
3.交叉编译 tslib:
//0.正点原子要安装这三个东东,感觉没必要,出错时就安装吧
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
//1.--prefix=/确保了宏TS_CONF为/etc/ts.conf
./configure --host=arm-buildroot-linux-gnueabihf --prefix=/
make
//2.make install安装时出错,一定要加上DESTDIR=$PWD/tmp
make install DESTDIR=$PWD/tmp
//3.安装成功
gec@ubuntu:~/tslib/tslib-1.21/tmp$ ls
bin etc include lib share
4.拷贝到开发板实验
使用nfs服务或者tftp把tmp目录的所有文件拷贝到/tmp中
//1.tmp为我们想要的目标
root@ATK-IMX6U:/mnt# ls
HZK16 freetype_show_font_angle show_file untitled
MSYH.TTF item show_line utf8.txt
chrdevbase.ko main show_pixel
freetype_show_font show_ascii simsun.ttc
freetype_show_font.c show_chinese tmp
//2.拷贝库文件和可执行文件到到系统的默认路径下,当然也可以用export 临时成效
cp tmp/lib/*so* -d /lib
cp tmp/bin/* /bin
cp tmp/etc/ts.conf -d /etc
5.配置 tslib
打开/etc/ts.conf 文件,找到下面这一行:
module_raw input
如果上面这句前面有“#”的话就删除掉“#”。
打开/etc/profile
文件,在里面加入如下内容:
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
第 1 行,TSLIB_TSDEVICE 表示触摸设备文件,这里设置为/dev/input/event1,这个要根据具体情况设置,如果你的触摸设备文件为event2那么就应该设置为/dev/input/event2,以此类推。
第 2 行,TSLIB_CALIBFILE 表示校准文件,如果进行屏幕校准的话校准结果就保存在这个文件中,这里设置校准文件为/etc/pointercal,此文件可以不存在,校准的时候会自动生成。
第 3 行,TSLIB_CONFFILE 表示触摸配置文件,文件为/etc/ts.conf,此文件在移植 tslib 的时候会生成。
第 4 行,TSLIB_PLUGINDIR 表示 tslib 插件目录位置,目录为/lib/ts。
第 5 行,TSLIB_CONSOLEDEVICE 表示控制台设置,这里不设置,因此为 none。
第 6 行,TSLIB_FBDEVICE 表示 FB 设备,也就是屏幕,根据实际情况配置,我的屏幕文件为/dev/fb0,因此这里设置为/dev/fb0。
全部配置好以后重启开发板,然后就可以进行测试了。
6.tslib测试
电容屏可以不用校准,如果是电阻屏就要先进行校准!校准的话输入如下命令:
ts_calibrate
校准完成以后如果不满意,或者不小心对电容屏做了校准,那么直接删除掉/etc/pointercal文件即可。
最后我们使用 ts_test_mt 这个软件来测试触摸屏工作是否正常,以及多点触摸是否有效,执行如下所示命令:
ts_test_mt
这时出错:
root@ATK-IMX6U:/lib/modules# ts_test_mt
Couldn't load module input
No raw modules loaded.
ts_config: Success
ts_setup: Success
原因找不到module input插件:
root@ATK-IMX6U:/mnt# ls /mnt/tmp/lib/ts/
debounce.la iir.la linear.la pthres.la variance.la
debounce.so iir.so linear.so pthres.so variance.so
dejitter.la input.la lowpass.la skip.la waveshare.la
dejitter.so input.so lowpass.so skip.so waveshare.so
evthres.la invert.la median.la touchkit.la
evthres.so invert.so median.so touchkit.so
插件是放在/tmp/lib/ts目录下。拷贝到lib目录了,执行以下命令:
cp tmp/lib/ts /lib -fr
查看:
root@ATK-IMX6U:/mnt# ls /lib/ts/
debounce.la iir.la linear.la pthres.la variance.la
debounce.so iir.so linear.so pthres.so variance.so
dejitter.la input.la lowpass.la skip.la waveshare.la
dejitter.so input.so lowpass.so skip.so waveshare.so
evthres.la invert.la median.la touchkit.la
evthres.so invert.so median.so touchkit.so
OK,重新执行ts_test_mt命即可。(移植成功)
附上正点原子的关闭qt默认程序(如果测试tslib不行的话可考虑这个原因):
Starting crond: OK
Running local boot scripts (/etc/rc.local)/etc/profile: line 35: syntax error ne ar unexpected token `fi'
error
-sh: /etc/profile: line 35: syntax error near unexpected token `fi'
-sh: /etc/profile: line 35: `fi'
根据内核打印出的消息。到/etc/rc.local
//配置qt环境
echo 30000 > /proc/sys/vm/min_free_kbytes
echo "0" > /sys/class/graphics/fb0/blank
source /etc/profile
//注释qt程序即可
#/opt/qt5.5.1/apps/QDesktop/QDesktop >/dev/null 2>&1 &
exit 0