本文介绍:触摸屏tslib库交叉编译并移植ARM,校准及测试。
下载tslib:Tags · libts/tslib · GitHub
在tslib的官方github上选择一个版本下载即可。
本实验版本为:tslib-1.12.tar.gz。
1. 配置
1.1 安装依赖库:
$ sudo apt-get install autoconf automake libtool
1.2 解压
将tslib-1.20.tar.gz放于ubuntu某目录入,解压并进入:
$ tar zxf tslib-1.12.tar.gz
$ cd tslib-1.12
1.3 配置编译选项
生成config文件:
$ ./autogen.sh
输出如下:
zengzr@ubuntu:/data/open_source/tslib-1.12$ ./autogen.sh
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4/internal'.
libtoolize: copying file 'm4/internal/libtool.m4'
libtoolize: copying file 'm4/internal/ltoptions.m4'
libtoolize: copying file 'm4/internal/ltsugar.m4'
libtoolize: copying file 'm4/internal/ltversion.m4'
libtoolize: copying file 'm4/internal/lt~obsolete.m4'
configure.ac:58: installing './compile'
configure.ac:24: installing './config.guess'
configure.ac:24: installing './config.sub'
configure.ac:7: installing './install-sh'
configure.ac:7: installing './missing'
Makefile.am: installing './INSTALL'
plugins/Makefile.am: installing './depcomp'
configure配置选项:
configure配置:
$ ./configure --host=arm-linux --prefix=/data/arm-linux/libs/tslib-1.12-arm
上面的配置可能会出错,最终运用的是下面的:
$ ./configure --host=arm-linux --prefix=/data/arm-linux/libs/tslib-1.12-arm ac_cv_func_malloc_0_nonnull=yes
配置后,生成的Makefile中可验证相关配置,如下:
2. 编译
2.1 编译
$ make
2.2 错误处理
错误信息如下:
CC fbutils-linux.o
CCLD ts_test
fbutils-linux.o: In function `open_framebuffer':
fbutils-linux.c:(.text+0x288): undefined reference to `rpl_malloc'
collect2: ld returned 1 exit status
Makefile:584: recipe for target 'ts_test' failed
make[2]: *** [ts_test] Error 1
make[2]: Leaving directory '/data/open_source/tslib-1.12/tests'
Makefile:489: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/data/open_source/tslib-1.12'
Makefile:398: recipe for target 'all' failed
make: *** [all] Error 2
重新执行configure配置,加上ac_cv_func_malloc_0_nonnull=yes项:
$ ./configure --host=arm-linux --prefix=/data/arm-linux/libs/tslib-1.12-arm ac_cv_func_malloc_0_nonnull=yes
配置完再重新make即可。
2.2 安装
执行安装命令:
$ make install
即可在指定的安装目录下生成相关库文件,如下:
zengzr@ubuntu:/data/arm-linux/libs/tslib-1.12-arm$ ls
bin etc include lib share
3. 测试
3.1 移植到ARM
编译出来的库在安装路径tslib-1.12-arm下,如下:
zengzr@ubuntu:/data/arm-linux/libs/tslib-1.12-arm$ ls lib/
libts.la libts.so libts.so.0 libts.so.0.7.2 pkgconfig ts
将tslib-1.12-arm复制到开发板的/lib目录下,并命名为tslib-1.12,路径为/lib/tslib-1.12。
配置环境变量,终端输入:
$ export LD_LIBRARY_PATH=/lib/tslib-1.12/lib:$LD_LIBRARY_PATH
3.2 运行校准程序
Tslib库的bin目录下还有个触摸屏校准程序ts_calibrate,可在ARM上运行的:
[root@GEC210 ~]#/lib/tslib-1.12/bin/ts_calibrate
Couldn't open tslib config file: No such file or directory
ts_config: No such file or directory
ts_setup: No such file or directory
可见,不能顺利运行,报错了!
这是因为开发板的环境还没配置好,解决见下节。
3.3 配置运行环境
在tslib库的READ.md上有相关环境变量的介绍,如下:
由上可见,tslib也是依赖fb(LCD驱动)、input/event(触摸屏驱动)等的,请保证开发板的相关驱动已移植好。
根据上述环境变量,配置如下:
# tslib environment variables
export TS_ROOT=/lib/tslib-1.12
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TS_ROOT/lib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FDDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=$TS_ROOT/etc/pointercal
export TSLIB_CONFFILE=$TS_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TS_ROOT/lib/ts
特别说明:
如何确定触摸屏设备?
触摸屏设备通常为/dev/input/event*,若有多个event,可用以下方法:
在开发板串口上输入:#cat /dev/input/event0 (逐个event尝试)
然后触摸屏幕,串口上有输出的则为触摸屏设备。
3.4 问题处理
调试中遇到问题记录如下:
问题1:
Couldn't open tslib config file: No such file or directory
ts_config: No such file or directory
ts_setup: No such file or directory
解决1:
#export TSLIB_CONFFILE=/lib/tslib-1.12/etc/ts.conf
问题2:
Couldnt load module input
No raw modules loaded.
ts_config: No such file or directory
ts_setup: No such file or directory
解决2:
#export TSLIB_PLUGINDIR=/lib/tslib-1.12/lib/ts
最终,成功运行,在开发板LCD上显示有个“+”号,追着它点5次即可完成校准。
输出如下:
[root@GEC210 ~]#/lib/tslib-1.12/bin/ts_calibrate
xres = 800, yres = 480
Took 1 samples...
Top left : X = 65 Y = 50
Took 1 samples...
Top right : X = 774 Y = 27
Took 1 samples...
Bot right : X = 775 Y = 419
Took 4 samples...
Bot left : X = 65 Y = 425
Took 1 samples...
Center : X = 402 Y = 248
-10.503601 0.986122 0.000340
0.225342 0.020684 0.988734
Calibration constants: -688364 64626 22 14768 1355 64797 65536
bin目录下的其他几个测试程序,如:(ts_calibrate ts_harvest ts_print ts_print_raw ts_test)也可以跑来试下。
注:若出现更多其他问题,请参考:
Ubuntu下交叉编译tslib库并移植到ARM板上_曾哥zengzr的博客-CSDN博客_linux内核编译移植到arm板