首页 > 范文大全 > 正文

基于ARM9的Qtopia在utu2440上的移植及其应用开发

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于ARM9的Qtopia在utu2440上的移植及其应用开发范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:该文首先简要分析了Qtopia的实现技术和应用现状,然后详细论述了如何在基于s3c2440架构的开发板上移植Qt

>> 基于arm9qtopiautu2440上的移植及其应用开发 基于ARM9内核的2440开发板的汉字显示与窗口移动的实现 嵌入式Linux在ARM9(TQ)上的移植 基于ARM9的RTU设计 基于Linux的Qtopia移植在ARM平台上的实现 ARM9平台上KVM移植的研究和实现 基于ARM9的多协议异构开发平台的设计与实现 基于ARM9的环境监测与设计开发 基于ARM9 S3C2410A在智能大棚系统中的应用 基于ARM9的BOOTLOADER的设计与实现 基于ARM9的Bootloader的分析及设计 基于ARM9的语音报警系统设计 基于ARM9无线监控系统的设计 基于ARM9的温室茶树培养监测系统 基于ARM9的IIC串行通信 基于ARM 920T S3C2440AL―40的EOS移植研究 基于ARM9的数字视频监控系统的设计与实现 基于ARM9的嵌入式信息系统的架构方案 基于ARM9和GPRS的实时电力负控管理系统的设计 基于ARM9的小区变电所远程监控系统的设计 常见问题解答 当前所在位置: */

#define V4L2_PIX_FMT_SBGGR8v4l2_fourcc('B','A','8','1') /*8BGBG.. GRGR.. */

2.2.7 生成Makefile

首先一定要确认上文所提到的环境变量设置正确,然后开始生成Makefile。在/opt目录下新建Qtopia目录,该目录用于存放编译完成以后的文件,作为SDK的默认目录。

#mkdir /opt/Qtopia

然后进入build,执行如下命令:

#cd $QTOPIA_DEPOT_PATH../build

#../qtopia-opensource-4.3.2/configure -image $QTOPIA_IMAGE -prefix $QTOPIA_RUN_ON_TARGET -xplatform linux-arm-g++ -arch arm -displaysize 240x320 -no-qvfb -no-bluetooth -no-infrared -no-modem -no-drm extra-qtopiacore-config "-depths 4,8,16,32 -qt-mouse-linuxtp -no-mouse-pc -no-mouse-bus -no-mouse-yopy -no-mouse-vr41xx -no-mouse-tslib -no-mouse-qvfb" -extra-qt-config "-qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg" 2>&1 | tee logfile

对于其中的配置参数,有些虽然是Qtopia编译的默认参数,但为了安全和清晰还是加上。

2.3 编译&安装

#make

#make install

说明:make install默认将将编译完成后的IMAGE安装在$QTOPIA_IMAGE指定的地方,当然你也可以通过make install IMAGE=$OTHER_PLACE重新指定安装的位置。由于qtopia安装的时候没有为我们拷贝zoneinfo,所以还要拷贝一下:

#cp -avf $QTOPIA_DEPOT_PATH/etc/zoneinfo $QTOPIA_INSTALL/etc

qtopia运行的时候需要一些运行库:

#cd /usr/local/arm/3.4.1/arm-linux/lib

#cp -v libstdc++*so* $QTOPIA_IMAGE/lib/

配置至此结束,Qtopia已完成编译。当然,嵌入式开发不可预知的错误很多,而且不尽相同。“成功是相同的,失败是不同的”,这句话应用在嵌入式开发中十分合适。

2.4 Qtopia的挂载和运行

通过NFS方式挂载后,首先需要先定义一下Qtopia运行所需要的环境变量:

#export PATH=$PATH:/opt/qtopia/bin

#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/qtopia/lib

#export QWS_MOUSE_PROTO=LinuxTP:/dev/ts0

#export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0"

其中关于QWS_MOUSE_PROTO的定义,在笔者的板子上触摸屏是/dev/ts0,但是有些(好像更多的)是/dev/touchscreen/0,若出现找不到触摸屏的情况可以考虑更改此处的定义,必要的时候可能还需要在/dev下建立符号链接来兼容Qtopia。

若这样依然不能解决问题,可以直接修改源码该文件为:

$QT_DEPOT_PATH/qtopiacore/qt/src/gui/embedded/qmouselinuxtp_qws.cpp。

运行成功后,建议修改一些关于板子的配置文件,将环境变量、设备符号链接等配置的命令加入自启动脚本,下次启动后便可以直接运行Qtopia进入“桌面”了。

3 Qtopia平台的完善

3.1 Mplayer播放器的移植

无论是作为何种用途,在utu2440这块以主频为最大亮点的开发板上,下面为它添加对媒体播放的支持。首选播放器当然是MPlayer,这里选择的是最新的MPlayer-1.0rc2版本,交叉编译器仍然选择arm-linux-gcc 3.4.1。

需要注意的是,虽然这里用的是最新的1.0rc2版本,但是对于我们需要移植的目标板2440而言,一些特性不能被很好支持。所以不仅要做一些参数上的配置,还需要编译一些附加的库来提供支持。

3.2 编译libmad

由于utu2440开发板并没配备专门用于音频或者视频解码的DSP芯片,所有解码任务均有CPU完成。由于arm本身没有浮点运算单元,所有浮点运算均由软件模拟实现,速度之慢可想而知。而MPlayer自带的音频解码器为完全浮点运算的mp3lib,另一个ffmp3库启动时有明显的延迟,而且在解码某些MPG文件的时候会有兼容性问题,所以我们需要先编译音频解码库mad,为MPlayer的音频解码提供支持。

参考configure的帮助后,很容易写出如下命令行:

#./configure CC=arm-linux-gcc --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=/project/MPlayer/mad

配置完成后,接着make install。成功后就能得到相应的mad库文件了,一个include文件夹,一个lib文件夹。

3.3 配置Mplayer

#./configure --enable-cross-compile --host-cc=gcc --cc=arm-linux-gcc --as=arm-linux-as --ar=arm-linux-ar --ranlib=arm-linux-ranlib --target=armv4l-linux --enable-static --prefix=/tmp/mplayer --disable-dvdread --disable-mencoder --disable-live --enable-fbdev --disable-mp3lib --enable-mad --language=en --disable-win32dll --disable-armv5te --disable-armv6 --with-extraincdir=/project/MPlayer/mad/include --with-extralibdir=/project/MPlayer/mad/lib 2>&1 | tee logfile

--enable-cross-compile: 开启交叉编译模式。

--host-cc=gcc --cc=arm-linux-gcc --as=arm-linux-as --ar=arm-linux-ar --ranlib=arm-linux-ranlib: 分别指定host和target端编译器的相关信息

--target=armv4l-linux: MPlayer支持很多架构的处理器,此处我们选择的2440所使用的armv4l-linux。

在早期的pre版本中,必须要指定armv4l-linux,否则相应的优化无法被编译进目标文件。但是在rc2版本中,也可直接指定arm-linux即可.这里为了清晰起见还是写的全一点。

--enable-static: 开启静态编译模式。这里强烈建议开启,可以省去很多麻烦。如果使用动态编译在strip时会出错。

--prefix=/tmp/mplayer: 设置安装的路径,如果使用static模式,这个参数无所谓,因为最后直接从当前目录拷出编译以后的mplayer文件就行了。

--disable-dvdread: 禁用libdvdread库,没有人会用开发板外接光驱来看DVD.

--disable-mencoder: MEncoder (A/V encoder),MPlayer’s Movie Encoder, 是一个用来编码MPEG-4的简单视频编码器,这里我们关掉它,因为不需要它。

--disable-live: 禁用555Live流媒体,对播放媒体文件必然没关联,所以禁用之。

--enable-fbdev: 开启对帧缓冲设备的支持,这个一定要选上。

--disable-mp3lib --enable-mad: 禁用使用浮点运算单元的mp3lib库,开启我们刚刚编译完成的mad库来进行音频解码。

--disable-win32dll: 禁用win32的动态链接库支持。

--disable-armv5te --disable-armv6: 禁用armv5te和armv6指令扩展。

注:处理器并不支持这两种指令扩展,所以关掉,否则放任何文件程序都会崩溃。

3.4 播放的设置和优化

经过若干测试。对于320*240大小的MPEG1/AVI片源大都能很流畅的播放。

播放mp3或者以mp3为音频编码的视频时,可以通过ac参数加载我们编译的mad库来解码:

/mplayer $(MediaFile) Cac mad

在由于CPU速度不够造成的影音不同步,可以通过framedrop参数让mplayer做丢帧处理以保证影音同步,./mplayer $(MediaFile) Cac mad Cframedrop

3.5 关于在Qtopia界面集成的问题

MPlayer没有专门给Qtopia开发的客户端,所以GUI界面需要一个用JAVA写的MPlayer GUI插件,可以在SourceForge上获得,由于性能关系,移植后速度很慢,这里不建议使用。

4 Qtopia交叉开发环境的建立

开发Qtopia应用程序有许多方法可行,可以使用简洁的文本编辑器+编译器的命令行方式组合,也可以使用功能强大的KDevelop、QDevelop等强大的IDE,甚至可以在Windows环境下用喜欢的工具书写代码、绘制图形界面,然后在Linux环境下编译、挂载。

这里主要介绍两种使用的较多的开发方式,命令行方式和KDevelop IDE。上文所说的其他方式也试用过,使用起来并不太方便,不推荐使用,仅供参考。下面将以KDevelop IDE中自带的QtopiaHelloworld程序为例介绍如何编译出Qtopia的Helloworld。

4.1 命令行方式

在命令方式下开发,适合于一些比较熟悉命令行的高手们。命令行模式下开发,虽然界面部分很难处理,但是单纯进行无交互界面的功能性开发却是十分的方便。

对于在Linux下开发比较麻烦的Makefile问题,qtopiamake给了我们一个极好的选择。qtopiamake就是qmake的一个衍生版本,使用基本同qmake一致。一般情况下,只需将所有工程文件放在一个文件夹下,如下几条命令即可得到我们编写的Qtopia程序:

#qtopiamake Cproject # 生成.pro工程文件

#qtopiamake // 生成Makefile

#make

#make install

目前qtopiamake所能识别的文件类型有*.c; *.ui; *.y; *.l; *.ts; *.xlf; *.qrc; *.h; *.hpp; *.hh; *.hxx; *.cpp; *.cc; *.cxx,基本涵盖了所有我们Qt(Qtopia)工程所需的各种类型。

首先将工程中能被qtopiamake识别和与工程相关的文件置于一文件夹下,例如KDevelop中的Helloworld模板中的如下文件是有用的:

main.cpp

qtopiahelloworld.html

qtopiahelloworld.cpp

qtopiahelloworld.h

QtopiaHelloworld.png

qtopiahelloworldbase.ui

这里需要提一下,若最后make install时出现下述错误:

ERROR: /opt/Qtopia/bin/sxe_installer does not declare the domain: trusted

All pre-installed programs must declare the trusted domain in their project(.pro) file

Aborted

打开工程文件:

#vim $PROJECTNAME.pro

在文件的SXE部分修改如下,若没有,则手动添加之:

# SXE information

target.hint=sxe

target.domain=trusted

注意,这样会使得程序拥有对硬件的全部访问权。更多的Qtopia SXE安全管理资料可以参照如下的Qtopia文档:

4.2 KDevelop IDE

用IDE进行开发可以大大简化开发过程,但是用KDevelop之前还是需要进行一定的配置工作的。

Ubuntu中的KDevelop源已经更新至最新的3.5.3版本的,该版本比3.5.1要稳定些,使用中崩溃的次数有明显的减少,建议使用,步骤如下:

1) 首先打开Kevelop: C/C++,Project -> New Project.

2) 新建工程类型为C++\Embedded\Qtopia 4 Application,然后起个工程名。

3) 在接下来的对话框中,将所有的目录改为实际的安装目录。如上文所述,采用/opt/Qtopia作为SDK根目录。

4) 一路下一步,最后一定要指定qmake程序的位置:为 /opt/Qtopia/bin/qtopiamake。

5) 工程建立后,KDevelop没能自动设置相关的一些环境变量,所以我们还需手动修改一下:

Project -> Project Options…

在Make Options标签中手动将PATH, QPEDIR, QTDIR设置正确,同理设置Run Options标签中的相关参数,可设也可不设。

6) 将帮助的html文件写好,放于\help\html中,文件名与工程名同名。

注意,帮助文件一定要写,否则会出错。若确实不需要帮助文件,可手工编辑.pro文件删除关于帮助文件的定义字段。

7)接下来就可以Build -> Build Project了,然后再Build -> Install Project。其中:

① 命令行方式开发相同,Makefil也由qtopiamake生成,需按照如上方法修改后方可make install。

② 界面的编辑问题,可以选择KDevelop Designer或官方的Qt Designer。我们认为KDevelop Disigner比Qt Designer好用,相比Qt Designer集成度更高,界面也更美观。但是其生成的ui版本过低,无法进行uic。一个折中的方法就是在Windows下安装,然后用Visual Studio画界面。

5 结束语

目前,随着嵌入式系统的发展,在一些工业控制、仪器仪表制造等领域,越来越多嵌入式系统要求图形显示界面。我们结合项目需求和实现体会,介绍了Qtopia平台配置的方式,以及MPlayer的移植过程,这对同行开发人员在同类项目研究中,缩短了研发周期,降低开发难度,具有一定的借鉴意义。

参考文献:

[1] Trolltech.Online Reference Documentation[EB/OL]..

[2] 倪继利.Qt及Linux操作系统窗口设计[M].北京:电子工业出版社,2006.

[3] 徐广振,张茂青,董里,等.嵌入式GUI应用平台Qtopia在IntelXScale pxa270上的移植[J].自动化信息,2007(3).

[4] 张保立,王俊, 张发明,等.基于QT/Embedded和Qtopia的嵌入式温室无线测控系统GUI设计[J].电子技术,2008(6).