Qtopia 2.2 桌面和程序 在ARM-LINUX上发布

2019-07-12 20:35发布

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    重启桌面后,就会看到图标。点击图标即可运行相应程序。