• 10595阅读
  • 4回复

Qt-Embedded-4.5.3 arm版编译和触摸屏移植 [复制链接]

上一主题 下一主题
离线nannan
 
只看楼主 倒序阅读 楼主  发表于: 2010-05-12
在板子上移植触摸屏对一个新手来讲肯定不是一件容易的事情,以前编译过一个Qt的arm版本库
源码可以到这里下载 我的交叉编译工具是3.4.1
Qt 源代码ftp://ftp.trolltech.com/qt/source/

,configure里没加什么配置选项,只是简单这样

./configure -embedded arm -xplatform qws/linux-arm-g++ -no-qt3support -qt-mouse-linuxtp

这样编译时间很长,但对于新手来讲是非常保险的做法
先讲一下我触摸屏的理解,网上解决触摸屏的方法很多是采用tslib,我一开始也是使用了tslib,
效果很不错,可以运行的很好,但我的项目中用到了sqlite驱动,开发板上运行是老是说找不到驱动
,我很无语 ,关注了网上的一些做法,Qt中的触摸屏驱动有linuxTP,也是参考了网上的这篇文章
http://blog.chinaunix.net/u3/93598/showart_2133624.html,在此我要说一声谢谢,谢谢你的
分享,库编译好了以后要运行examples/qws/mo1usecalibration 这程序,这将在/etc下形成校准文件,
但这个驱动的底层需要进行修改才可以正常工作,好,这些做完以后,你就可以理解我下面的工作了


1.
Qt 源代码ftp://ftp.trolltech.com/qt/source/ 从网站上下载
qt-embedded-linux-opensource-src-4.5.3.tar.gz
2. tar  zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
cd qt-embedded-linux-opensource-src-4.5.3
打开src/gui/embedded/qmouselinuxtp_qws.h
修改linuxtp的底层代码
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW

qmouselinuxtp_qws.cpp中的部分源码
#if defined(QT_QWS_IPAQ)
# ifdef QT_QWS_IPAQ_RAW
mousedev = QLatin1String("/dev/h3600_tsraw");   //注意这里是你开发板的节点号,没有的话自建链接文件,如果你连触摸屏节点文件都没有可以仔细看我以前的帖子
# else
mousedev = QLatin1String("/dev/h3600_ts");  
# endif
#else
mousedev = QLatin1String("/dev/ts");
#endif
} else {
mousedev = device;
}

注释掉qmouselinuxtp_qws.cpp中的一些代码,以免触摸屏上下和左右颠倒(我就碰到了这个问题)
//#ifdef QT_QWS_SHARP
// samples[currSample] = QPoint(1000 - data->x, data->y);
//#else
samples[currSample] = QPoint(data->x, data->y);
//#endif

//#if defined(QT_QWS_SCREEN_COORDINATES)
mousePos = handler->transform(mousePos);
//#endif
未经上述修改之前,出现了上下颠倒的情况,修改后成功!
3../configure -embedded arm -xplatform qws/linux-arm-g++ -no-qt3support -qt-mouse-linuxtp
make
睡个觉
make install
默认这会在/usr/local下安装
是这样的路径
/usr/local/Trolltech/QtEmbedded-4.5.3-arm
cd /usr/local/Trolltech/QtEmbedded-4.5.3-arm 在这里建立
将bin目录下的qmake 改名armqmake以免和PC 上的qmake冲突
mv bin/qmake -t bin/armqmake
脚本文件set-env
添加内容
export QTEDIR=$PWD
export PATH=$PWD/bin:$PATH
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
这样你每次使用你交叉编译是先运行这个脚本。



在板子上设置你的Qt环境变量,我是通过nfs服务器来给Qt提供库和字体的
zylinux 是我的一个nfs目录,读者可根据自己的情况而定
mount -o proto=tcp -t nfs 192.168.0.1:/zylinux /mnt -o nolock&&export LD_LIBRARY_PATH=/mnt/lib:$LD_LIBRARY_PATH&&export QWS_MOUSE_PROTO=LinuxTP:/dev/touchscreen/0&&export QWS_SIZE=640x480&&export QT_QWS_FONTDIR=/mnt/lib/fonts&&export QWS_DISPLAY=LinuxFb:mmWidth45:mmHeight60:0



LD_LIBRARY_PATH  //指定库位置
QWS_MOUSE_PROTO  // LinuxTP是你的使用的触摸库,如果使用tslib,它就是Tslib后面跟着你的触摸屏节点号    这个可以决定你使用什么设备,像LinuxTP就指明你用了触摸屏,插鼠标就没用了。
QT_QWS_FONTDIR  //指定字体位置
QWS_DISPLAY   //显示设置
如果你还需要使用插件的话,请在板子上建立自己的目录比如QtSqlite的目录
/usr/local/Trolltech/QtEmbedded-4.5.3-arm/plugins/sqldrivers
插件我还没看过可以直接指定的。
5
在/usr/local/Trolltech/QtEmbedded-4.5.3-arm目录下的example/qws/mousecalibration
把程序拷到刚才你的那个nfs 服务器目录下运行
解释下这个程序
如果你的/etc没有校准文件,终端提示打不开那个文件
第一看到information 提示10s后进入校准程序
进行校准,这将在/etc 下形成那个文件,过会儿,将进入测试程序,如果你不出问题的话,
你这时触摸就可用,你点到哪,指针将跟到哪?
好了就这样。
原文链接:转载请注明出处
http://hi.baidu.com/armlinuxhouse/blog/item/25ba0712356867f0c3ce79de.html ,有问题可以发我博客
[ 此帖被nannan在2010-05-13 10:33重新编辑 ]
离线tt67
只看该作者 1楼 发表于: 2010-05-14
我最近也才把这个搞定 。。QT 编译 很痛苦
红联 www.linux110.com linux 命令查询 www.lx138.com
离线hdzhangzhe
只看该作者 2楼 发表于: 2010-05-21
我是新手,想问一下,你产用的Linxu内核是哪个版本的啊,我在2.6.24下,怎么也移植不成功啊,郁闷,指点一下啊,谢谢
离线nannan
只看该作者 3楼 发表于: 2010-05-23
我用的原厂的,公司自带的2.4.18的内核,当然我也自己编过2.6.24.4的内核,使用网上的方法和驱动代码,做好lcd ,fb,和touchscreen的驱动,网卡的驱动,但是
你自己做的和公司做好,就会发现明显的不足,比如,我做的那个,触摸屏,放上去点一下,就相当于点了n下,搞的那个mouseclibrate程序生成的校准文件相当不准确,
还有Qt程序在上面老是一闪一闪,很不爽 ,所以用板子自带的内核比较好。
离线zscwind
只看该作者 4楼 发表于: 2010-05-24
新手,留名以后学习
快速回复
限100 字节
 
上一个 下一个