环境
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这个程序可以运行了。