Qtopia 2.2 桌面和程序 在ARM-LINUX上发布
应用学生要求,将繁复的Qtopia 的ARM版程序发布整理一下.作为一个整体的章节推出.
首先假设阅读者已经大体知道QT类库的使用,以及QT程序命令行开发流程(uic,designer,如何编译),并且设计好一些程序在Windows 桌面机上或Qtopia X11模拟器测试通过了.
现在你接下来的任务的就是怎么把程序在ARM-LINUX上运行起来.本文内容主要就是讲述如何实现这一目标.
在ARM-LINUX上运行程序,必然是一个交叉编译的程序.因此你需要分别在桌面LINUX的准备好编译环境,以及在ARM-LINUX开发板上准备好运行环境.
以下是我目前的编译环境.
OS: RHEL 5. 编译器 arm-linux-gcc 4.3.2/4.3.2 (eabi版本)
类库 qte 2.2 for arm
运行环境是 s3c2440 开发板. arm-linux 2.6.30.
编译环境的安装与使用
qtopia 是一个开源产品,只负责提供源码,并无技术支持或专门集成工具(这种情况在新版本得到改善了).但为方便开发使用.我们把类库和工具集放在了arm-qtopia-all-4.3.3.tgz这样压缩包里.简单安装就可以使用.
在使用arm-qtopia 库前请安装 arm-linux-gcc 4.3.2或者更高版本.
安装.
tar xvzf arm-qtopia-all-4.3.3.tgz -C /
这样所有工具,编译好的库及源代码都安装在 /arm-qtopia之下.
编译程序流程.
1.首先要在一个终端到/arm-qtopia目录下,运行用下列命令设置环境变量
. set-env #注意.与set-env之间空格.
2.检查QTDIR是否指向/arm-qtopia/qt2
echo $QTDIR
3.创建针对arm-linux-gcc的Makefile
3.1 如果是模拟器版本移植过来的项目,简单把Makefile 里的编译工具 CC/CXX由 gcc/g++改成arm-linux-gcc/arm-linux-g++即可.
3.2 或者直接用tmake重新生成一个Makefile .这样Makefile里一般Makefile.
tmake -o Makefile yourproject.pro
如果一个项目Makefile 创建成功,就不必重复执行这一步了.
4.编译 make
注意因为Qtopia 程序过于复杂,不能直接用arm-linux-gcc 编译,需要用专门Makefile来编译.
如果成功,此时应该看到一个arm 的程序了.可以用file 命令查看一下CPU.
回顾一下这个流程,基本上跟x86-qtopia的流程是一样的,只是编译器与类库换成ARM版的.
然后下一步就是把这个arm 版的Qtopia 程序放到ARM上调试了.
ARM板上Qtopia 程序运行
ARM Qtopia 程序虽然复杂,但本质上也是一个调用很多so(动态库)的gcc 程序.因此在开发板的运行主要需要同时把qtopia 的库和程序一同放到开发板上.
同时Qtopia 程序也有两种运行模式.一种是作为独立程序运行,完整占有整个设备的屏幕.这个一般在封闭式产品发布都是用这个模式,如ATM机,彩票机等.
另外一种象
利用qtopia
的桌面.把开发程序在放入Qtopia 环境中.用一个图标来调用,这个一般用于PDA,或智能手机桌面上.这个程序与其它程序共享桌面.我们下面分别讲解如果在ARM板上实现这两个模式.
独立运行模式.
独立运行模式只需要在开发板上传输应用程序和Qtopia 的运行库和Qtopia 所需的字体.因为启动独立程序时需要配置一大堆环境变量,所以往往需要写一个shell 脚本来调用.
如果是调试状态,这一些文件往往是拷入某一个NFS目录当中.独立运行一般需要字体在$QTDIR/lib/fonts下面. 还有一个是libqte.so,如果使用tslib来操作触摸屏,还需要libts.so.为了简化处理。你可以直接把$QTDIR/lib下的所以文件拷贝到到一个指定的NFS路径上。然后在运行脚本的环境变量指向这个库路径就行。
cp -ra $QTDIR/lib /home/hxy/arm-qtopia/qt
上述命令把所有库文件,字体拷入到/home/hxy/arm-qtopia/qt目录下,以后就可以重复使用。
然后写一个运行脚本。来把自已程序调用起来,假设这个程序叫 dialog.每种开发板都有大体上差不多的脚本格式。变化较大的是QTopia的输入设备的配置。
一般嵌入式设备里,采用的输入设备主要有USB键盘和鼠标,以及触摸屏。不同开发板因为驱动的关系,会使用不同的设备结点文件来操作设备。比如USB鼠标,有的开发板配成 /dev/input/mouse,有的配成/dev/input/mice. 触摸屏也经常配成不同名字,大部分配置成 /dev/input/event0,有的采用原始数据的会配成 /dev/hs3600,或/dev/hs3600_tsraw
.这个可以查询开发板的产商资料或者直接查看一下开发板上/bin/qtopia这个脚本里用了哪一个。并且到/dev目录下检查一下。对应文件是否存在。
export set QT_BASE=/mnt/arm-qt
#设置qtopia 发布目录
export set QTDIR=${QT_BASE}/qt
#---跟触摸屏相关库TSLIB的配置。告诉libts.so 使用哪一些配置--
# 触摸屏的设备结点
export set TSLIB_TSDEVICE=/dev/input/event0
#tslib 的配置文件路径
export set TSLIB_CONFFILE=/usr/local/etc/ts.conf
#tslib 插件目录
export set TSLIB_PLUGINDIR=/usr/local/lib/ts
#tslib 使用触摸屏定位文件路径。
export set TSLIB_CALIBFILE=/etc/pointercal
#告诉QTOPIA使用USB键盘。
export set QWS_KEYBOARD="USB:/dev/event1"
#告诉QTOPIA使用哪一个鼠标协议
export set QWS_MOUSE_PROTO="TPanel:/dev/input/event0"
#告诉应用程序从哪里去找Qtoptia的动态库。
export set LD_LIBRARY_PATH=$QTDIR/lib
#执行Qtopia 程序
./dialog -qws &
其中关于QWS_MOUSE_PROTO可以用如下取值。
TPanel:/dev/hs3600_tsraw .使用用hs3600设备结点,
USE:/dev/input/mice .使用USB鼠标
以下是在ARM板的运行效果图,注意在运行独立程序里,最好关闭Qtopia桌面,否则两个程序会互相争夺输入设备。
Qtopia桌面发布
在Qtopia 桌面发布分为两个步骤。第一是把Qtopia 桌面本发在开发板进行发布。第二步是把应用程序加入到桌面当中。
主要牵涉到QTE2库和桌面库(主要是libqtopia.so)库的发布
一般是在/arm-qtopia/ 执行
make install,它将会在/arm-qtopia/qtopia/image下生成
opt/Qtopia 目录,把这个目录拷贝到开发板上。
如果中间有编译不成功,可以试着手动安装,即将qtopia 目录下列子目录。
apps etc i18n pics services
bin help lib plugins sounds
拷贝到安装目录里去。然后把$QTDIR/lib也拷贝到lib下面。
然后编写桌面的启动脚本。这个脚本跟独立运行的脚本很像,需要配置一些环境变量,只不过qtopia 桌面的可执行文件是
qpe.
export set HOME=/root
#必设,告诉桌面,其QT根目录哪,按实际安装目录写
export set QTDIR=/opt/Qtopia
#必设,告诉桌面,其QTopia 桌面根目录哪,按实际安装目录写
export set QPEDIR=/opt/Qtopia
export set KDEDIR=/opt/kde
#设置桌面用的键盘
export set QWS_KEYBOARD="USB:/dev/input/event1"
#设置桌面的鼠标
export set QWS_MOUSE_PROTO="TPanel:/dev/input/event0 USB:/dev/mouse0"
#设置tslib 的参数
export set TSLIB_TSDEVICE=/dev/input/event0
export set TSLIB_CONFFILE=/usr/local/etc/ts.conf
export set TSLIB_PLUGINDIR=/usr/local/lib/ts
export set TSLIB_CALIBFILE=/etc/pointercal
#必设,告诉桌面运行从哪里找动态库
export LD_LIBRARY_PATH=$QTDIR/lib
#必设,告诉桌面调用可执行文件,从哪里路径执行
export set PATH=${QTDIR}/bin:${PATH}
#调用桌面,这里路径按实际路径设。
./arm-qtopia/qtopia/bin/qpe -qws
把程序加入到Qtopia桌面
把程序加入桌面有如下几个步骤。
1.准备桌面图标(比较麻烦,一般建议用现成图 标)
2.编写一个桌面描述文件(.desktop文件)
3.把应用程序拷贝到指定目录。
假设这个桌面现在安装在/opt/Qtopia目录下。
第一步因为需要制作不同尺寸的PNG图标,并且重编译Qtopia 的资源文件,比较费时。一般建议找现成图标即可。
第二步,编译桌面描述文件,可以参考如下模板改写
[Desktop Entry]
Comment=my first Qtopia program #程序说明
Exec=myprog #你的执行文件名称
Icon=DateBook #图标资源名,建议采用现成图标
Type=Application #类型,不变
Name=hxyDemo #显示在英文界面的图标下方的说明。
Name[ja]=カレンダー #显示在日文界面的图标下方的说明。
Name[no]=Avtalebok
Name[de]=Termin kalender #显示在德文界面的图标下方的说明。
Name[hu]=Naptár
Name[zh_CN]= 我的演示 #显示在中文界面的图标下方的说明。
改写完成,将其拷入Qtopia 目录下的apps/Applications 目录,这样这个图标就会在桌面第一个页下显示。在本例子就是
cp my.desktop /opt/Qtopia/apps/Applications
第三步:将程序拷入bin目录。
cp myprog /opt/Qtopia/bin
重启桌面后,就会看到图标。点击图标即可运行相应程序。