高达exvsmbon移植平台bluez-2.25至mipsel平台上的一些问题.

请问触摸屏移植有关问题 - 驱动开发当前位置:& &&&请问触摸屏移植有关问题请问触摸屏移植有关问题&&网友分享于:&&浏览:36次请教触摸屏移植问题近期在做mips上移植触摸屏的课题。网上的方法都看遍了,tslib-1.3,tslib-1.4都可移植到板子上,但是依然不能实现触摸屏的校准功能。下面描述一下自己所遇到的问题,希望能得到大家的指正。目标平台:mips交叉编译工具:mipsel-linux-gcc.内核:linux-2.6.22.19-29-sigma触摸屏:未手动安排触摸屏驱动,将屏插入到板子的usb接口。cat
/proc/bus/input/devices 显示如下:I: Bus=0003 Vendor=0eef Product=0001 Version=0112N: Name=&HOLTEK Touch&P: Phys=usb-tangox-ehci-hcd-1.1/input0S: Sysfs=/class/input/input1U: Uniq=H: Handlers=mouse0 event0& B: EV=bB: KEY=401 0
0 0 0 0 0 0B: ABS=fcat /dev/input/event0,手摸触摸屏,有反应。经过排查错误,tslib-1.3或者1.4都已经./autogen.sh ./configure,make,make install成功。其中./configure --host=mipsel-linux --prefix=/nfsroot/8654root/mnt/config/tslib
ac_cv_func_malloc_0_nonnull=yes --disable-inputapitslib-1.3时:export TSLIB_ROOT=/export TSLIB_TSDEVICE=/dev/input/event0;export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/export POINTERCAL_FILE=$TSLIB_ROOT/etc/export TSLIB_PLUGINDIR=$TSLIB_ROOT/share/ts/export TSLIB_CONSOLEDEVICE=export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.export TSLIB_FBDEVICE=/dev/fb0;export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH;export TSLIB_TSEVENTTYPE=UCB1x00;运行./ts_calibrate可显示光标,x轴正确,但是y轴其实在78%的时候便已经超出。查看源码presure值一直为正。按光标没法进入下一个点校正。将ts_calibrate函数getxy()中的
if (index & MAX_SAMPLES-1)
index++;改为
if (index & MAX_SAMPLES-1) &
index++; &
在prssure值不等于0的情况下也可跳出循环,则显示如下:Took 127 samples...Top left : X = 19912 Y = 29152Took 127 samples...Top right: X = 19912 Y = 27934Took 127 samples...Bot right: X = 19912 Y = 34397Took 127 samples...Bot left : X = 19912 Y = 37781Took 127 samples...Middle: X = 19912 Y = 37470902...015463524...005005Calibration constants: 5 8 36可以看到读到的值都是错的。尝试export TSLIB_TSEVENTTYPE为其它的值,也都不行。tslib-1.4时:export TSLIB_ROOT=/export TSLIB_TSDEVICE=/dev/input/event0;export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/export POINTERCAL_FILE=$TSLIB_ROOT/etc/export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/export TSLIB_CONSOLEDEVICE=export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.export TSLIB_FBDEVICE=/dev/fb0;export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH;export TSLIB_TSEVENTTYPE=UCB1x00;./ts_calibrate不可显示光标,读值也不对。个人分析:从ts_read_raw读到的数便是错的,猜想可能是tslib里面所定义的几个结构 struct ts_ struct h3600_ts_ struct mk712_ts_ struct arctic2_ts_ struct collie_ts_ struct corgi_ts_都不满足/dev/input/event0的设备文件所读到的数,有可能是选错了触摸屏所对应的驱动类型,但是全部试过都不行,是否是tslib中未出现的类型?是否可能是我的触摸屏根本就没有安装驱动程度,但是又为何cat /dev/input/event0时可以有反应??--disable-inputapi项尝试过不加,但是也不行。纠结了好久了啊,希望大家给意见,谢谢,谢谢!!!!!------解决方案--------------------
QVFB方式使用USB触摸屏,这主要看触摸屏控制器厂家的支持,自己搞驱动很麻烦的,要在触摸屏驱动层、TSLIB和QTEmbedded这几个方面做修改,要对linux系统环境变量、usb或串口触摸屏驱动、QTEmedded都非常熟悉才能调通。 TSLIB官网的驱动是不能直接校准触摸屏的。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有linux下bluez的移植~
bluez的移植可以用两个字概括:麻烦!原因是它不是单纯的bluez的编译,它还需要其他很多的库的支持,下面先列举一下这些库的麻烦依赖关系吧:
bluez-libs-3.36(不需要其他库)
bluez-utils-3.36:glib-2.16.5
dbus-1.0.2:libxml2-2.7.4
libsndfile-1.0.17
libusb-0.1.12
前面两个必须的,后两个看你的配置,bluez4也一样;
下面开始编译:
Bluez移植到arm
&&&搞了好几天的蓝牙协议栈(bluez)的移植,现在终于有点小成就了,写下来和大家分享。以下介绍Bluez移植的基本步骤。
&&&一,linux内核的配置
&&&&&&&&Linux&2.6版本之后的内核一般都有蓝牙模块的配置,所以你不用再打补丁了。由于我也是处于摸索阶段,所以我暂时用的是开发板上自带的内核。
&&&&#tar&&zxvf&&&linux.2.6.*
&&&解压缩内核,进入内核目录。在名令行输入
#&make&disclean/make&clean/make&rmproper,
选择这三个中的任意一个&对内核进行清理,关于这三个命令的区别你可以google一下,然后自己去区分。
#make&menuconfig/make&config&/make&oldconfig&/make&xconfig
输入如这三个命令中的任何一个,对内核进配置,这几条命令的区别,请你自己google。推荐使用make&menuconfig&。进入内核配置界面之后,根据你的自己的需要进行选择。关于内核的配置请单独查看内核配置方面的文档。
#make&zImage&ARCH=arm
CROSS_COMPILE=arm-linux-
到此内核镜像就已经做好了。
二,编译bluez协议栈。
&&&移植过蓝牙协议栈的人,肯定会觉得,Bluez协议栈的编译是最麻烦的一件事情。其实,如果你能理清楚bluez-utils所依赖的一些库,你就能很快的cross-compile交叉编译出一套能在开发板上跑起来的程序。关键是如何去理清楚协议,我总结出来的方法是,倒着推,你不知道bluez-utils依赖那些库,那就先直接编译bluez-utils,根据编译显示的错误,分析错误,找出来它所依赖的库,这样一步一步的分析下去,你就可以把蓝牙协议栈交叉编译出来。如果你不会分析错误或则不想去分析,可以,那你就直接把错误粘贴到网上,让搜索引擎给你找。
由于时间的仓促,这里我只列出我已经总结出来的Bluez所需要的几个库,以及几个库编译的先后顺序。
注:/opt/libs&和/opt/utils是我自己编译时用的路径,你可以随便的选取。
1,编译安装bluez-lib-3.36.tar.gz
&&&这个库不需要什么依赖,直接解压,配置,编译然后安装即可。
&&#tar&zxvf&bluez-lib-3.36.tar.gz
&&#./configure&--profix=/opt/libs&--host=arm-linux&--target=arm-linux&CC=arm-linux-gcc
&&#make&install
2,编译安装
&&这个库是后面的dbus依赖的,你也可以用expat来代替libxml2,官方网站上说dbus必须依赖于他们中的一个。
&&#tar&zxvf
libxml2-2.7.4.tar.gz
&&#./configure&--profix=/opt/libs&--host=arm-linux&--target=arm-linux&&&&&CC=arm-linux-gcc
&&#make&install
3,编译安装dbus-1.0.2.tar.gz
&&#tar&zxvf&dbus-1.2.16.tar.gz
&&#echo&ac_cv_have_abstract_sockets=yes&arm-linux.cache
&&#./configure&--profix=/opt/libs&--host=arm-linux&--target=arm-linux&&&&&CC="arm-linux-gcc&-I/opt/libs/include&-L/opt/libs/lib"&--cache-file=arm-linux.cache&--with-x=no
&&#make&install
4,编译安装glib-2.16.5
&&#tar&&-zxjf&
glib-2.16.5.tar.bz2
#echo&ac_cv_type_long_long=yes&arm-linux.cache
#echo&glib_cv_stack_grows=no&&arm-linux.cache
#echo&glib_cv_uscore=no&&arm-linux.cache
#echo&c_cv_func_posix_getpwuid_r=yes&&arm-linux.cache
#echo&ac_cv_func_posix_getgrgid_r=yes&&
注意:"&"和"&&"的区别
#./configure&--profix=/opt/libs&--host=arm-linux&--target=arm-linux&&&&&CC="arm-linux-gcc&-I/opt/libs/include&-L/opt/libs/lib"&--cache-file=arm-linux.cache
#make&install
5,编译安装libusb-0.1.12.tar.gz
&&&这个库不需要什么依赖,直接解压,配置,编译然后安装即可。
&&#tar&zxvf&&libusb-0.1.12.tar.gz
&&#./configure&--profix=/opt/libs&--host=arm-linux&--target=arm-linux&CC="arm-linux-gcc&-I/opt/libs/include&-L/opt/libs/lib"
&&#make&install
6,编译安装bluez-utils-3.36.tar.gz
&&#tar&zxvf&bluez-utils-3.36.tar.gz
&&#./configure&--profix=/opt/libs&--host=arm-linux&--target=arm-linux&&&&&CC="arm-linux-gcc&-I/opt/libs/include&-L/opt/libs/lib"&--disable-audio
&&#make&install
这样Bluez协议栈就编译好了。
三,烧写到开发板上
实际上放到板上的只需要
l2cap.o&&&&&&&&&&&&&&&&
libbluetooth.so.2.11.2&&&&&&&&&
start.sh& &
libbluetooth.so&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
bnep.o&&&&&&&&&&&&&&
libbluetooth.so.2&&&&&&&&&&&&&&&&&&&&&&&&&&&
hci_usb.o&&&&&&&&&&&&&&&&&&&&&
start.sh是启动模块的支持,也可以insmod进去,其他的是程序要用到的库。
可能遇到的错误及解决方法:
a、编译程序的时候
wen@wen-desktop:~$ arm-linux-gcc
-I/home/wen/bluez/bluez-libs-3.36_install/include&
-L/home/wen/bluez/bluez-4.69/lib/.libs client.c -o
client_arm/tmp/ccGbPHFl.o(.text+0x38): In function `main':
: undefined reference to `hci_get_route'
/tmp/ccGbPHFl.o(.text+0x48): In function `main':
: undefined reference to `hci_open_dev'
/tmp/ccGbPHFl.o(.text+0xd4): In function `main':
: undefined reference to `str2ba'
collect2: ld returned 1 exit status
wen@wen-desktop:~$ arm-linux-gcc
-I/home/wen/bluez/bluez-libs-3.36_install/include&
-L/home/wen/bluez/bluez-4.69/lib/.libs -lbluetooth client.c -o
client_arm
wen@wen-desktop:~$
-lbluetooth 就是代表-llibbluetooth.so -L
&包含库的目录& -lbluetooth
就是找此目录下的libbluetooth.so或者libbluetooth.a去链接
b、libgmodule.so :invalid
libgmodule.so在glib里面,再在配置文件中改为CC="arm-linux-gcc
-L/glib_lib_dir"
c、storage.c:286:
error: `ENOKEY' undeclared (first use in this
在 bluez-utils-3.36/input/storage.c 中添加宏定义:#define ENOKEY 161
d、__libc_csu_init undefined reference to
`__init_array_end'
配置文件里面的编译器加-shared为:CC="arm-linux-gcc -shared 。。。"
e、cc1: error: unrecognized command line
option "-fvisibility=hidden
说是编译器版本太低的缘故。在高版本里面才支持"-Wno-pointer-sign"、"-fvisibility=hidden"。
后来使用PC上的编译器(gcc版本4.4.1,而arm-linux-gcc是3.4.4)试了一下,就没出现这个错误,由此可推断确实是编译器版本问题。既然低版本没有这个指令,我就删掉libusb-compat-0.1.3/libusb/Makefile里面的"-Wno-pointer-
sign"和"-fvisibility=hidden",之后OK(如果其他Makefile也有,也要删)。编完之后也要将库和头文件复制到工具链里面去。
f、configure: error: Netlink library is required
解决方法: apt-get install
libnl-dev&&&&
h、 解决安装glib的编译错误
&stack pointer
echo ac_cv_type_long_long=yes&arm-linux.cache
glib_cv_stack_grows=no&&arm-linux.cache
glib_cv_uscore=no&&arm-linux.cache
ac_cv_func_posix_getpwuid_r=yes&&arm-linux.cache
i、configure: error: Could not find a
glib-genmarshal in your PATH
网上:解压glib2-devel-2.4.7-1.tar.gz, 将文件复制到/usr/local下面
实际:$ sudo apt-get install libglib2.0-dev
原来下载个这东西就行了
j、checking for growing stack pointer...
configure: error: cannot run test program while cross
#echo ac_cv_type_long_long=yes&arm-linux.cache
glib_cv_stack_grows=no&&arm-linux.cache
glib_cv_uscore=no&&arm-linux.cache
c_cv_func_posix_getpwuid_r=yes&&arm-linux.cache
k、checking for posix getpwuid_r... configure:
error: in `/home/yan/glib-2.22.4':
configure: error: cannot run test program while cross
See `config.log' for more details.
解决方法:ppcst# echo ac_cv_func_posix_getwuid_r=yes
l、源代码安装glib-2.22.5
root@zhupan-desktop:/home/zhupan/glib-2.22.5# ./configure
configure: error:
*** You must have either have gettext support in your C library, or
*** GNU gettext library.
(http://www.gnu.org/software/gettext/gettext.html
i. 尝试 apt-get install gettex,错误,提示:E: 无法找到软件gettext
ii. 下载gettext-0.16.1安装
configure: error: Netlink library is required
configure: error: dbus library is required
1、wen@wen-desktop:~/bluez/bluez-4.69$ export
DBUS_CFLAGS=/home/wen/bluez/libxml/include&&&
/libxml2/libxml
wen@wen-desktop:~/bluez/bluez-4.69$ export
DBUS_LIBS=/home/wen/bluez/libxml/lib
2、把编译出来的两个lib的pkconfig里面的.pc放到/usr/lib/pkgconfig/里面,或者设置在PKG_CONFIG_PATH里面
n、. 编译D-Bus,can not run test program while
cross compiling
[mystic@moolenaar]$ ./configure --host=arm-linux
--prefix=/bluez/dbus& CC=arm-linux-gcc
checking for getpeereid... no
checking abstract socket namespace... configure: error: cannot run
test program while cross compiling
See `config.log' for more details.
执行./configure时要在宿主系统中运行一些测试程序,因为是交叉编译所以这个测试是一定通不过的。不过没问题,我们可以在configure时指定cache-file文件来屏障掉测试程序,在下面编译glib包时会遇到同样的问题。
处理方法:
在源码包根目录下执行
[mystic@moolenaar]$ echo ac_cv_have_abstract_sockets=yes
& arm-linux.cache
[mystic@moolenaar]$ ./configure --host=arm-linux
--prefix=/bluez/dbus& CC=arm-linux-gcc
--cache-file=arm-linux.cache
o./configure出现
checking for C compiler default output file name... configure:
error: C compile cannot execulable
查看:config.log文件,发现是环境变量(LIBS&
LDFLAGS)设置错误,和lib
p、configure: error: libxml library is
缺少xml库,下载编译安装后,copy& libxml-2.0.pc
/usr/lib/pkgconfig 就可以了。
q、/bin/rm: cannot remove `libtoolT': No such
file or directory
Done configuring
libxml的配置出现以上问题;
解决:可以直接编译make,不影响
r、/tmp/ccs2uTxL.o(.text+0x38): In function
: undefined reference to `hci_get_route'
/tmp/ccs2uTxL.o(.text+0x48): In function `main':
: undefined reference to `hci_open_dev'
/tmp/ccs2uTxL.o(.text+0xd4): In function `main':
: undefined reference to `str2ba'
collect2: ld returned 1 exit status
解决方法:
-lbluetooth
client.c:3:22: bluetooth.h: No such file or directory
client.c:4:16: hci.h: No such file or directory
client.c:5:20: hci_lib.h: No such file or directory
client.c:6:19: rfcomm.h: No such file or directory
解决方法:
-I/头文件目录
t、[转]error: cannot run test program while
cross compili
在交叉编译的时候总是使用configure --host=arm-linux 嘿嘿但是在CONFIGURE中有很多的
测试程序是不可以在HOST上运行的就会出现: error: cannot run test program while cross
注意到abstract socket namespace在configure中查找abstract
socket可以看到类似这样&的结构
echo "$as_me:$LINENO: checking abstract socket namespace"
echo $ECHO_N "checking abstract socket namespace... $ECHO_C"
if test "${ac_cv_have_abstract_sockets+set}" = then
echo $ECHO_N "(cached) $ECHO_C"
其中ac_cv_have_abstract_sockets是我们要查找的变量
ac_cv_have_abstract_sockets=yes&arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache
OK这样就搞定了
u、问题:arm_linux -randlgcc cannoe
解决办法:到root权限下make& 并检查arm-linux-gcc
有没有加到PATH中
v、configure: error: GLib library version 2.14
or later is required
1 设置环境变量GLIB与LIBS, ./configure --help里面查看;
2 把编出来的库lib/pkconfig/*.pc放到/usr/lib/pkgconfig
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。嵌入式设备中触摸屏使用非常广泛,但触摸屏的坐标和屏的坐标是不对称的,需要校准。校准广泛使用的是开源的tslib。Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。&1.Tslib工具交叉编译与安装编译tslib-1.4.tar.gz步骤:#&tar&&zxvf&&tslib-1.4.tar.gz#&cd&&tslib#&export&&PATH=/opt/gcc-3.4.6/bin:$PATH#&./autogen.sh#&./configure&&--host=mipsel-linux&&--prefix=/TSLIB#&make#&make&&install注意:以上步骤使用root用户权限执行在/TSLIB目录下生成的文件夹则是需要移植的工具包。A)可能遇到的问题与解决方法(ubuntu系统)下面是我在移植Tslib工具过程中所遇到的一些问题与解决方法:问题1.执行./autogen.sh提示./autogen.sh:&4:&autoreconf:not&found解决方法:没有安装automake&工具,(ubuntu&10.04)用下面的命令安装:sudo&apt-get&install&autoconf&automake&libtool&问题2.执行./autogen.sh后出现错误信息:libtoolize:&`configure.in'&does&not&existTry&`libtoolize&--help'&for&more&information.autoreconf:&libtoolize&failed&with&exit&status:&1解决方法:#whereis&libtoolizelibtoolize:&/usr/bin/libtoolize&/usr/local/bin/libtoolize发现出现该错误信息是由于系统中安装了两个ilbtoolize工具链。将/usr/local/bin/libtoolize删除后问题解决(将/usr/bin/libtoolize删除后问题依然存在)。&问题3.执行./autogen.sh出现错误信息:/autogen.sh:&4:&autoreconf:&not&found&解决方法:安装autoconf工具包。&问题4.执行make后出现错误信息:&&/usr/local&&is&a&directory&&..解决方法:该问题出现原因是由于配置好环境变量后,但系统编译时仍无法找到工具链导致。打开新的窗口,重新配置环境变量后编译此问题解决。&问题5.执行make后出现错误信息:ts_test.o:&In&function&`main':ts_test.c:(.text+0x3b4):&undefined&reference&to&`rpl_malloc'fbutils.o:&In&function&`open_framebuffer':fbutils.c:(.text+0x2f8):&undefined&reference&to&`rpl_malloc'collect2:&ld&returned&1&exit&status解决方法:执行#&./configure&&--host=mipsel-linux&&--prefix=/TSLIB后,在config.h中将&#define&malloc&&rpl_malloc&malloc&注释掉,编译通过。&问题6.执行make后出现错误信息:In&function&&open&,inlined&from&&main&&at&ts_calibrate.c:227:/usr/include/bits/fcntl2.h:51:&error:&call&to&&__open_missing_mode&&declared&with&attribute&error:&open&with&O_CREAT&in&second&argument&needs&3&argumentsIn&function&&open&,&&&&inlined&from&&main&&at&ts_calibrate.c:229:/usr/include/bits/fcntl2.h:51:&error:&call&to&&__open_missing_mode&&declared&with&attribute&error:&open&with&O_CREAT&in&second&argument&needs&3&arguments解决方法:sudo&vim&/home/loongson/workspace/tslib/tests/ts_calibrate.c&+227将cal_fd&=&open&(calfile,&O_CREAT&|&O_RDWR);改为cal_fd&=&open&(calfile,&O_CREAT&|&O_RDWR,0666);229行将cal_fd&=&open&("/etc/pointercal",&O_CREAT&|&O_RDWR);改为cal_fd&=&open&("/etc/pointercal",&O_CREAT&|&O_RDWR,0666);&B)可能遇到的问题与解决方法(2F系统):问题1.&执行./autogen.sh后出现错误信息:Configure.ac:25:error:possibly&undefined&macro:AC_DISABLE_STATIC&&&&&If&this&token&and&others&are&legitimate,please&use&m4_pattern_allow.&&&&&See&the&Autoconf&documentation.Configure.ac:26:error:possibly&undefined&macro:AC_ENABLE_SHAREDConfigure.ac:27:error:possibly&undefined&macro:AC_LIBTOOL_DLOPENConfigure.ac:28:error:possibly&undefined&macro:AC_PROG_LIBTOOL解决方法:重新安装libtool到/usr目录下。&2.Tslib移植Tslib移植步骤如下:1.将安装目录TSLIB拷贝到文件系统的根目录下。2.在文件系统/etc下创建一个空的校准文件pointercal(此步骤可省略)。执行ts_calibrate并校准完毕后,校准数据会被存放在该文件中(文件系统需可写,若是cramfs文件系统可参考备注1)。3.修改TSLIB/etc/ts.conf文件,打开module_raw&input。(注意:module_raw&inut前不能有空格,参照问题2)4.制作一个可运行脚本run.sh,内容如下:(备注:以下环境变量的配置也可写在文件系统的/etc/profile文件下)&[cpp]&
#!/bin/sh&&
export&TSLIB_ROOT=/TSLIB&&
export&LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH&&
export&TSLIB_CONSOLEDEVICE=none&&
export&TSLIB_FBDEVICE=/dev/fb0&&&
export&TSLIB_TSDEVICE=/dev/event0&&
export&TSLIB_TSEVENTTYPE=INPUT&&
export&TSLIB_CALIBFILE=/etc/pointercal&&&
export&TSLIB_CONFFILE=/TSLIB/etc/ts.conf&&&
export&TSLIB_PLUGINDIR=/TSLIB/lib/ts&&
cd&/TSLIB/bin&&
./ts_calibrate&&&&
(备注:若需在qt或SDL等图形界面使用tslib,需要另外配置其他环境变量,这里不作叙述)5.将文件系统和带触摸屏驱动的内核烧写到目标板上,上电运行run.sh即可看到校准界面。按屏幕光标点触5次后,程序在/etc下生成pointercal坐标校准文件(/etc目录需可写)。6.校正完成后可执行/TSLIB/bin/ts_print查看输出坐标是否正确。&可能遇到的问题与解决方法下面是我在运行Tslib工具是所遇到的问题与解决方法:问题1.运行run.sh出错,提示&ts_open:no&such&file&or&directory&解决方法:引起此错误的情况较多,触屏校正程序执行时会先去打开触屏的设备节点,LOONGSON-1B开发板的触屏设备节点对应为/dev/event0,查看系统环境变量是否配置正确,查看/dev/目录下是否存在触屏的设备节点event0。&问题2.出现:no&raw&modules&loadtsconfig:no&such&file&or&directory解决方法:/TSLIB/etc/ts_conf&文件中语句modle_raw&input前可能存在空格,把空格去掉。&问题3.结合图形界面使用tslib时,出现无法load&module的错误解决方法:如Tslib读取触点坐标的例子程序ts_pirnt中,加载h3600.so、pthres.so、&等等模块时使用了dlopen()函数打开;在/TSLIB/etc/ts_conf配置没有错误的情况下,出现load&module的错误可能是编译程序时没有把libts库加入一起编译,导致程序使用dlopen()打开.so文件出现错误所致。&备注若文件系统不可写,校正后程序就无法在文件系统的/etc/目录下创建pointercal校准文件。一般根文件系统/tmp目录都设置为ramfs类型,该文件夹内可写;在根文件系统中/etc目录下,创建一个名为pointercal的空链接文件,操作如下:#cd&/etc#ln&&s&../tmp/pointercal&pointercal这样在执行校准程序后就会在/tmp目录下生成一个校准文件pointercal。&3.Tslib ts_calibrate校准原理&&& Tslib&是触摸屏驱动和应用层之间的适配层,它从触摸屏驱动处获得原始的设备坐标数据,通过一系列的去噪、去抖、坐标变换等操作,来去除噪声并将原始的设备坐标转换为相应的屏幕坐标。tslib为应用层提供了2个主要的接口ts_open(),ts_close();ts_read()和ts_read_raw(),其中ts_read()读取校正后的相对坐标数据,ts_read_raw()读取校正前的实际坐标。&&& 从tslib默认的ts.conf文件中可以看出,tslib&从触摸屏驱动采样到的设备坐标进行处理再提供给应用端的过程大体如下:  raw&device&--&&variance&--&&dejitter&--&&linear&--&&application  module&&&&&&&&&module&&&&&&&module&&&&&&module&&& 校准情况下,tslib对驱动采样到的数据进行处理的一般过程如下:&&&&1.读取屏上5个点的坐标(Top&Left,Top&Right,Bottom&Left,Bottom&Right,Center),在进行一系列的变换,取样的5个点,实际上是包含3个不同的X值,3个不同的Y值。和scaling&值一共7个值,一起保存到/etc/pointercal中.&&& 2.这个/etc/pointercal文件主要是供linear插件使用。而我们每次的触摸的操作都进行多次触摸坐标变换。&4.Tslib配置文件ts.conf介绍&&& Tslib&的配置文件ts.conf&同样是个十分重要的部分,在ts.conf&中配置了需要加载的插件、插件加载顺序以及插件的一些约束参数,这些配置参数对触摸屏的触摸效果具有十分重要的影响。其中:pthres&为Tslib&提供的触摸屏灵敏度门槛插件&默认参数为pmin=1; && &variance&为Tslib提供的触摸屏滤波算法插件&默认参数为delta=30; && &dejitter&为Tslib&提供的触摸屏去噪算法插件&默认参数为delta=100; &&&  linear为Tslib&提供的触摸屏坐标变换插件。&&& 由于各种因素的影响,在不同的硬件平台上,相关参数可能需要调整。以上参数的相互关系为:采样间隔越大,采样点越少,采样越失真,但因为信息量少,容易出现丢笔划等丢失信息情况,但表现出来的图形效果将会越好;去噪算法跟采样间隔应密切互动,采样间隔越大,去噪约束应越小,反之采样间隔越小,去噪约束应越大。去抖算法为相对独立的部分,去抖算法越复杂,带来的计算量将会变大,系统负载将会变重,但良好的去抖算法可以更好的去除抖动,在进行图形绘制时将会得到更好的效果;灵敏度和ts&门槛值为触摸屏的灵敏指标,一般不需要进行变动,参考参考值即可。
阅读(...) 评论()}

我要回帖

更多关于 安卓跨平台移植 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信