在博创三剑客up-star2410平台上,做的qt的例子

来源:互联网 发布:淘宝女装软文 编辑:程序博客网 时间:2024/06/06 01:25

在博创三剑客up-star2410平台上,做的qt的例子  

2011-07-09 19:38:06|  分类: 嵌入式学习 |  标签:arm9实验  |字号 订阅

用了几天,终于做出一个例子了。好高兴。

  
环境

       Xp下装虚拟机,虚拟机上装LINUX,(REHAT或其他)


IP地址

       Windows:192.168.1.180

       虚拟机LINUX:192.168.1.12

       开发板:192.168.1.193(原厂设定)


目录

       虚拟机LINUX下NFS共享目录是:/up-Star2410。

       虚拟机NFS共享目录挂载到开发板/root/host下。

       应用程序hello_gh放在虚拟机LINUX的/up-Star2410/hello目录里。


一、实验目的 

1、学会QT/E在ARM设备上的移植方法与步骤。

2、学习QT中信号与槽的编程。

3、掌握QT/E在ARM设备上的常用输入输出设备移植方法。


二、实验内容 

1、移植QT/E到UP-ARM2410CL上。

2、在QT/E中添加触摸屏鼠标等设备支持。

3、在Qt Designer下编写程序,ARM设备上运行。


三、预备知识 

1、熟悉使用C++语言程序设计。

2、掌握Linux下常用编辑器的使用。

3、掌握Linux下程序编译。

4、熟悉Qt程序设计接相关设备的使用。


四、实验室设备和工具 

硬件:up-Star认证考试实践板、PC机Pentumn500以上, 硬盘80G以上。

软件:PC机操作系统RHEL4 +xshell + ARM-Linux开发环境

qt-embedded-linux-opensource-src-4.4.0.tar.bz2

tslib-1.4.tar.bz2

arm-linux-gcc-3.4.1.tar.bz2


五、实验步骤 
5.1编译QT/E环境 
1、拷贝并解压QT/E库及触摸屏库到实验目录for_arm 

在虚拟机LINUX输入下列命令:

#cd /home/sprife/qt4/ 94

#mkdir for_arm

#cd for_arm

#cp /up-Star2410/gui/Qt/src/qt-embedded-linux-

opensource-src-4.4.0.tar.bz2 ./

#cp /up-Star2410/gui/Qt/src/tslib-1.4.tar.bz2 ./

#tar xjvf qt-embedded-linux-opensource-src-4.4.0.tar.bz2

#tar xjvf tslib-1.4.tar.bz2


2、编译tslib1.4触摸屏库 

在虚拟机LINUX输入下列命令:

#cd tslib-1.4

#vi build.sh

修改该脚本文件为如下:

#/bin/sh

export CC=arm-linux-gcc

./autogen.sh

echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

./configure --host=arm-linux --cache-file=arm-linux.cache -prefix=$PWD/../tslib1.4-install

make

make install

退出保存后编译:

#./build.sh


3、编译QT/E库 

在虚拟机LINUX输入下列命令:

#cd /home/sprife/qt4/for_arm/

#cp -a tslib1.4-install/lib/* qt-embedded-linux-opensource-src-4.4.0/lib/

#cp -a tslib1.4-install/include/ts* qt-embedded-linux-opensource-src-4.4.0/include/

#cd qt-embedded-linux-opensource-src-4.4.0

#./configure -embedded arm -xplatform qws/linux-arm-g++ -depths 16 -little-endian -qt-mouse-linuxtp -qt-mouse-tslib -I/home/sprife/qt4/for_arm/tslib1.4-install/include -L/home/sprife/qt4/for_arm/tslib1.4-install/lib -prefix /mnt/nfs/Trolltech/qt-embedded-4.4.0

#make

#make install

./configure 配置选项过长,使用该命令时候请仔细检查不要写错。

-prefix 选项要特殊注意,该指定目录必须要与实际NFS目录对应.


4、测试触摸屏及QT/E程序 
1)建立NFS共享目录/up-Star2410 (此目录如果存在就不用在建立了)

在虚拟机LINUX输入下列命令:

#cd /

#mkdir up-Star2410

#cd up-Star2410

#mkdir Trolltech

#cd Trolltech

#mkdir qt-embedded-4.4.0

#cd qt-embedded-4.4.0

#cp /home/sprife/qt4/for_arm/qt-embedded-linux-opensource-src-4.4.0/ lib/ ./ -arf

#cp /home/sprife/qt4/for_arm/tslib1.4-install/etc/ ./ -arf

#cp /home/sprife/qt4/for_arm/tslib1.4-install/bin/ ./ -arf


2)ARM端挂载NFS共享目录 

在ARM端输入下面的命令:    

#mount -o nolock,rsize=4096,wsize=4096  192.168.1.12:/up-Star2410  /mnt/nfs

输入下列命令时,如果出错,则需要检查目录位置是否正确或虚拟机ip地址是否是命令中指定的。

如果执行后,出错:

RPC:Time out

解决办法:

在虚拟机LINUX下,执行命令:

route del default后,返回ARM端,重新执行mount命令。


3)设置环境变量 (ARM端)

在ARM端输入下面的命令:

cd /mnt/nfs/Trolltech/qt-embedded-4.4.0

输入下列环境变量设置命令

export QTDIR=$PWD

export LD_LIBRARY_PATH=$PWD/lib

export TSLIB_TSDEVICE=/dev/event0 #这一句要注意看event0是不是在/dev下,不是的话,按实际的改一下

export TSLIB_PLUGINDIR=$PWD/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CONFFILE=$PWD/etc/ts.conf

export POINTERCAL_FILE=$PWD/etc/ts-calib.conf

export QWS_MOUSE_PROTO=tslib:/dev/event0 #这一句要注意看event0是不是在/dev下,不是的话,按实际的改一下

export TSLIB_CALIBFILE=$PWD/etc/ts-calib.conf

export LANG=zh_CN

 


4)执行触摸屏校准程序(在qt-embedded-4.4.0下)

#./bin/ts_calibrate

出错:

./bin/ts_calibrate: error while loading shared libraries: libts-0.0.so.0: cannot y

解决办法:

利用echo $LD_LIBRARY_PATH,发现环境变量不对。重新执行export LD_LIBRARY_PATH=$PWD/lib

再执行#./bin/ts_calibrate

出错:

ts_open: No such file or directory

原因:

export TSLIB_TSDEVICE=/dev/input/event0指定的event0不在/dev/input下

改为:

export TSLIB_TSDEVICE=/dev/event0

再执行#./bin/ts_calibrate

出错:

Segmentation fault

原因:

 1、ts.conf文件中的各个设置选项之前不能有空格,否则会出现:     Segmentation fault 错误,我就不小心在module...之前多了个空格,害我查了好久。

 2、 不要在pointercal对应的目录下,建立一个空的ts-calib.conf文件,否则在运行ts_calibrate时,也可能会出现Segmentation fault错误。我这次就是这个问题。


5)执行QT/E带触摸屏的例子程序

在宿主机端拷贝编译好的ARM端可执行程序,在虚拟机LINUX输入下列命令:

#cp /home/sprife/qt4/for_arm/qt-embedded-linux-opensource-src-4.4.0/examples/widgets/digitalclock/digitalclock  /up-Star2410/Trolltech/qt-embedded-4.4.0/

ARM端输入下面的命令,执行该程序:

#./digitalclock –qws

出错:

./digitalclock: error while loading shared libraries: libz.so.1: cannot open shared object file:y

解决办法:

在虚拟机LINUX下,用find命令查找缺的文件libz.so.1,然后复制过去,命令如下:

# find / -name "libz.so.1",显示:

/arm2410cl/Trolltech/qt-embedded-4.4.0/lib/libz.so.1

则,执行

# cp /arm2410cl/Trolltech/qt-embedded-4.4.0/lib/libz.so.1 ./lib/

再次在ARM端执行#./digitalclock –qws,还提示少文件,提示信息与刚才类似。于是用同样的方法复制有关文件到./lib文件夹,命令如下:

#cp /arm2410cl/Trolltech/qt-embedded-4.4.0/lib/librt.so.1 ./lib/

# cp /arm2410cl/Trolltech/qt-embedded-4.4.0/lib/libstdc++.so.6 ./lib/

# cp /arm2410cl/Trolltech/qt-embedded-4.4.0/lib/libgcc_s.so.1 ./lib/

说明:

ARM端的当前路径是/mnt/nfs/Trolltech/qt-embedded-4.4.0,也就是挂载后的路径。

然后在ARM端执行:

up-tech:/mnt/nfs/Trolltech/qt-embedded-4.4.0 #./digitalclock -qws

出错:

QWSTslibMouseHandlerPrivate: ts_open() failed with error: 'No such file or directory'

Please check your tslib installation!

Segmentation fault

解决办法:

环境变量不对,应改成:

export QWS_MOUSE_PROTO=tslib:/dev/event0 原来不是这个目录。

至此,digitalclock这个程序可以运行了。