tslib库的安装及各种错误处理
tslib 是一个开源程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖动、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。
1.准备工作
确保已安装 autoconf、automake 和 libtool。如果没有安装,或者不确定,可输入下列命令进行安装:
$ sudo apt-get install autoconf
$ sudo apt-get install automake
$ sudo apt-get install libtool
2.下载源码
从网上下载 tslib 源代码,本文以 tslib-1.4.tar.gz 为例。下载后,得到 tslib-1.4.tar.gz,解压缩:
$ tar -zxvf tslib-1.4.tar.gz
3.配置
进入解压的目录,执行如下命令:
$ cd tslib
$ ./autogen.sh
$ ./configure --prefix=/nfsroot/tslib --host=arm-none-linux-gnueabi
ac_cv_func_malloc_0_nonnull=yes
--prefix 指定安装路径,用户可以自行指定 tslib 的安装目录。
--host 指定交叉编译器,如果交叉编译器是 arm-none-linux-guneabi-gcc,则指定arm-none-linux-guneabi
错误3.1 执行./autogen.sh时,出现了如下错误:
./autogen.sh: 4: autoreconf: not found
解决方法:
sudo apt-get install autoconf automake libtool
错误3.2 执行./configure --host=arm-linux --prefix=/usr/local/tslib
提示错误:
ts_test.o(.text+0x218): In function `main':
: undefined reference to `rpl_malloc'
fbutils.o(.text+0x234): In function `open_framebuffer':
: undefined reference to `rpl_malloc'
collect2: ld returned 1 exit status
make[2]: *** [ts_test] Error 1
make[2]: Leaving directory `/home/gfpeak/Desktop/tslib/tests'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/gfpeak/Desktop/tslib'
make: *** [all] Error 2
解决方法:
原因是在 tslib-1.4/config.h 中有一行定义 “#define malloc rpl_malloc”,
直接注释掉这行定义即可,除非你自己实现了一个 malloc 版本。
4.编译
执行make指令:
$ make
错误4.1 执行 make 出错
error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
解决方法:
修改./tests/ts_calibrate.c文件中的open函数
修改为cal_fd = open (calfile, O_CREAT | O_RDWR,0);(据说是交叉编译器版本问题)
5.安装
$ make install
编译生成的库,头文件等都拷贝到 prefix 指定的路径中。
如果可以看到该指定的路径下有 4 个文件夹:/bin、/etc、/lib、/include,则表示安装完成。
6.修改 ts.conf 内容
为了在移植开发板的时候,可以制定输入模块,需要修改 ts.conf 文件的内容。
进入安装目录下的/etc/文件夹,修改 ts.conf 文件的内容。
$ vi ts.conf
找到#module_raw input 那一行,去掉注释#。
7.移植到开发板
将安装路径下的 tslib 整个文件夹,下载到开发板上。
8.设置开发板环境
在 /etc/profile文件的末尾添加上如下条目:
export TSLIB_ROOT=/usr/local/tslib /* 指定 tslib 目录路径 */
export TSLIB_TSDEVICE=/dev/input/event0 /* 指定触摸屏设备 */
export TSLIB_CALIBFILE=/etc/pointercal /* 指定校准文件的存放位置*/
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf /* 指定 tslib 配置文件的路径*/
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts /* 指定 tslib 插件文件的路径*/
export TSLIB_FBDEVICE=/dev/fb0 /* 指定帧缓冲设备 */
export QWS_MOUSE_PROTO=/dev/input/event0 /* 指定鼠标设备 */
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib /* 添加 tslib 库 */
其中 TSLIB_ROOT 更改为自己实际存放的 tslib 的绝对路径。
TSLIB_TSDEVICE 和 QWS_MOUSE_PROTO 这两项需要查看自己的开发板触摸屏设备对应/dev/input/下的文件。
9.执行测试命令
重新启动开发板,使系统重新读取/etc/profile 的环境变量,进入 tslib/bin 目录,执行如下命令:
# cd /usr/local/tslib/bin
# ./ts_calibrate
阅读(1078) | 评论(0) | 转发(0) |