最近交叉编译了tslib-1.4,把主要过程和要注意的地方写下来。
1-./autogen.sh
2-echo ac_cv_func_malloc_0_nonnull=yes>$ARCH-linux.cache
3-./configure --host=$ARCH-linux --prefix=/usr/local --cache-file=$ARCH-linux.cache --enable-inputapi=no
--enable-inputapi=no:看你的触摸屏驱动是否支持ioctl操作,如果支持就不用写上,不支持就要添上,如果不添加会有
ts_open:Inappropriate ioctol for device
ts_open: No such file or directory
等错误(网上别人的文档是这么说的,我没有试过不加这个参数会怎样,感兴趣的试一下)
4-编译并安装后会在/usr/local(可以随意指定,但是最好要和你的开发板的路径相同,我试过一次不同时,运行./ts_calibrate,会报not found的错误)下有bin,etc,include,lib,在你的开发板上的相同路径建立这些文件夹,并把关于tslib的相关东西考到这些文件内。
5-/etc/ts.conf配置
module_raw input #这句一定要
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
6-在你的开发板的/etc/profile文件里添加运行tslib的环境变量(一定要放到/etc/profile,我放到/etc/init.d/rcS里就没有作用,愿因是export只能在当前shell和它的子shell有用,不能影响登录的shell)
# /etc/profile
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/arm/X11R6/bin
export PATH
export TSLIB_ROOT=/usr/local
export TSLIB_TSDEVICE=/dev/event0(你的开发板dev下的触摸屏设备节点文件)
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib(这句我注释掉的原因是:有一种说法是使用 LD_LIBRARY_PATH这样设置不安全,我的做法是把路径添加到/etc/ld.so.conf文件中,然后执行ldconfig命令,这样就可以了。ldconfig在你的交叉编译工具里就有)
这样大概就差不多了,运行./ts_calibrate如果还提示ts_open: No such file or directory,用env命令看一下,当前系统是否有你设置的tslib环境变量,
没有的话会提示这个错误的,我在第一次设置/etc/profile文件就没有好使,修改了一下,重启系统就好用了。
运行./ts_calibrate进行触摸屏校准,再运行./ts_test测试效果
将tslib打包进Qt
进入源码目录
./configure -embedded arm -xplatform qws/linux-arm-g++ -qt-sql-sqlite -no-qt3support -depths 16 -qt-mouse-tslib -I/usr/local/include -L/usr/local/lib -nomake demos -nomake examples
make
make install
期间遇到好多问题,参考了一些列文章
感谢万能的google,大部分人都能从中找到答案,走向了make之路。但是也有人试了别人的方法都不成功,成了未解之谜。
其实有两个方法,能让我们更深入一点看到我们我们这些错误从何而来,从而帮助我们去自己解决问题。
1。 在./configure 的选项里加上 -verbose选项,出错信息会更丰富,而不是没头没脑的来一句测试失败了
2。 还有个方法就是根据提示的出错信息,去$QTDIR/config.test目录下去找对应的测试例子,因为单独编译,这样你就把问题大大的缩小了,找到问题的概率也变大了。
昨天在本站论坛就 有朋友碰到“The tslib functionality test failed!”的问题,最后通过测试config.test/unix/tslib目录下的小例子(这些小例子正是./configure会调用测试, 给出正确或出错信息的。)最后发现是版本不兼容的原因。
其实还有一个方法,去读./configure文件,这才是真正的万能钥匙。 刚开始你可能漫无头绪,其实加些打印(如果是bash写的,就用echo;如果是perl写的,就用print),过一阵之后,你会发现自己几乎解决绝大部分问题。
这是QTCute里面的一段文字,对我们真的很有启发
参考的网站资料:
1.华清远见:http://www.embedu.org/Column/Column97.htm
2.CuteQt:http://www.cuteqt.com/blog/?tag=%E8%B0%83%E8%AF%95
3.QtForm.org:http://www.qtforum.org/index.php?page=Thread&postID=96421&s=1139c1ca29512d3637ef4ca64d15e0e6863c8c1c#post96421
4.csdn博客:http://blog.csdn.net/chen2qiao/archive/2009/09/14/4550505.aspx
遇到的问题和解决:
(1)
ScreenOptionsMasterPrefs.cpp:148: 错误: 显式特例化不能有存储类型
ScreenOptionsMasterPrefs.cpp:148: error: explicit template specialization cannot have a storage class
错误:显式特例化不能有存储类型
但是任何一个用低版本gcc写的软件 ,在用高版本gcc编译安装的时候出现错误 ,都可以通过修改源码改正 错误
把那个static 去掉,,,
#模板类中,如果模板那个参数类型已经指定(在函数声明实现的时候),必须把声明和实现放在一个文件中,这个时候把函数声明为static会冲突
#如果是一个一般的模板类,声明和定义可以分开,这个是到链接时候才知道类型,把函数声明为static不冲突
130行 static void MovePref<bool>( int &iSel, bool bToSel, const ConfOption *pConfOption )
改为 void MovePref<bool>( int &iSel, bool bToSel, const ConfOption *pConfOption )
(2)
configure.ac error possibly undefined macro AS_HELP_STRING
这个是编译 tslib1.4的错误
意思是,将宏AS_HELP_STRING改为 宏AC_HELP_STRING
(3)
./hello -qws
Error: QWSTslibMouseHandlerPrivate: ts_open() failed with error: 'No such file or dire'
add:export QWS_MOUSE_PROTO=tslib:/dev/event0
感谢:
http://blog.csdn.net/maidisula/archive/2009/07/23/4373067.aspx
http://hi.baidu.com/a263238386/blog/item/95b03424bec1b1398644f9e5.html