APP下载

基于Qtopia的数码相框软件开发

2012-07-05周洁

华东交通大学学报 2012年2期
关键词:源码相框数码

周洁

(华东交通大学信息工程学院,江西 南昌330013)

数码相框作为数码相机的衍生品,近年来备受市场青睐。但由于一直以来在嵌入式Linux上开发系统软件和应用程序缺乏强大的开发环境,中低端的数码相框产品无论是在支持媒体播放格式种类、功能还是图形环境方面都有很大可改进的空间。Qtopia的出现为使用嵌入式Linux作为操作系统的消费电子产品提供了开发图形应用程序的便捷手段,很大程度上解决了移动设备上开发应用软件的难题。研究在mini2440开发板上,通过基于Qtopia的嵌入式软件开发,实现了一款能使用户有较好使用体验的数码相框产品。

1 系统平台介绍

数码相框的硬件平台采用友善之臂mini2440开发板。板上集成了三星主频为400 MHz的高端微处理器S3C2440,64MB的SDRAM,128 MB的Nand Flash,2 MB的Nor Flash,以及一些常用的外设接口[1]。其中S3C2440采用ARM920T内核,其低功耗、简单、优雅且全静态设计非常适用于对成本和功耗敏感型的应用。在软件方面,使用Linux-2.6.32.2内核,运行环境Fedora9,根文件系统为缺省安装的文件系统。

整个系统软件由引导装载程序(U-Boot)、设备驱动(包括帧缓冲frame buffer)、嵌入式Linux内核、文件系统(YAFFS)以及基于QT/Embedded和Qtopia的应用程序组成[2],系统平台软件结构如图1所示。

图1 系统平台软件框架Fig.1 Software framework of system platform

2 Qt/Embedded和Qtopia体系结构

目前基于嵌入式Linux的主流GUI系统主要包括MiniGUI、Microwindows、OpenGUI、Qt/Embedded,这些GUI在接口定义、体系结构、功能特性存在很大差别,采取的技术路线也有所不同。MiniGUI是国内研发的一款性能优良、轻量级跨操作系统的嵌入式图形用户界面支持系统,采用了可伸缩的系统架构,其建立在比较成熟的图形引擎之上,如SVGALib和LibGGI,开发的重点在于窗口系统、图形接口之上,但由于支持力量薄弱,其维护和再开发成本不可预计。MicroWindows与MiniGUI均为自由软件,目前开发的重点在底层的图形引擎之上,主要特色在于提供了类似X的客户/服务器体系结构,它以较小的资源消耗、通用的帧缓冲技术、灵活的分层设计模式和丰富的API等特点获得了广泛的关注。由于其底层图形引擎存在无任何硬件加速能力、算法低效、代码质量较差的问题,因此在窗口系统和图形接口方面的功能还比较欠缺。OpenGUI性能稳定,最底层是用汇编实现的快速图形引擎,非常适合于基于X86平台的实时系统。但由于其内部使用私有API,因此在可移植性和可配置性的表现较差,并且不支持多进程[3-5]。

Qt/Embedded是Trolltech公司开发的GUI开发工具Qt的嵌入式版本。Qt/Embedded类库完全采用C++封装,控件资源丰富,可移植性好。由于Qt/Embedded不依赖于XServer或者Xlib,直接调用帧缓冲进行图形绘制,节省了大量的系统资源,提高了效率。

Qtopia是一个基于Qt/Embedded的类似桌面系统的应用环境。作为一款面向嵌入式Linux的全方位应用程序开发平台,Qtopia不仅提供了用于个人信息管理、办公、娱乐、Internet网络交流的应用程序,还为嵌入式应用程序提供了开发库[4]。从图2所示的Qt/Embedded体系结构可以看出GUI系统的图形库窗口组建都是由Qt/Embedded实现的。Qt/Embedded作为Qtopia的基础类库,为其提供了底层支持。Qtopia包含PDA和Phone两个版本。本文所述的数码相框应用程序使用PDA这个版本进行开发。

图2 Qt/Embedded体系结构Fig.2 Structure of Qt/Embedded system

3 Qtopia开发环境的搭建及其移植[7-9]

3.1 建立Qtopia开发环境

搭建编译平台是嵌入式GUI开发的必要工作。Qtopia的软件开发环境主要包含嵌入式Linux操作系统、软件开发工具链以及相关源码包。本文的开发环境是在PC上安装VMware Workstation 6.5.1和Fedora9,内核版本为Linux-2.6.32.2,采用arm-linux-gcc-4.4.3交叉编译器,源码包为Qtopia-free-src-2.2.0。

由于Qtopia-2.2.0已经包含了Qt/Embedded,tmake以及QtX11,因此只要把Qtopia-2.2.0源码包安装好,就不需要再单独安装这三个包了。其中tmake为跨平台makefile生成器,QtX11为Qt开发工具包,包括:qvfb(虚拟帧缓冲)、moc(用于Qt C++扩展的metra-object编译器)、uic(用户界面编译器)、Qt designer(图形设计器)等。

为了对Qtopia进行交叉编译,需要准备如下的源码包:

e2fsprogs-1.41.6.tar.gz:提供uuid支持,文件系统相关的库。

jpegsrc.v6b.tar.gz:jpeg图形编码解码程序库。

libpng-1.2.16.tar.gz:png图形编码解码程序库。

tslib-1.4.tar.gz:触摸屏中间件,提供滤波、去抖、校准等功能。

zlib-1.2.3.tar.bz2:压缩解压程序库。

3.2 Qtopia-2.2.0在S3C2440上的移植

移植步骤可分为:

1)Qtopia相关库文件的编译安装

建立两个目录分别存放交叉编译生成的动态链接库文件和必要的头文件。

mkdir/home/arm/lib

mkdir/home/arm/include

vim/etc/profile ;修改后需重启才能生效

在pathmunge下一行添加

pathmunge/usr/local/arm/4.4.3/bin;交叉编译器路径

完成e2fsprogs、jpeg、png、tslib、zlib库文件的交叉编译安装。特别要注意的是触摸屏中间件tslib编译时可能因为版本的不同有较大差别,对于tslib-1.3.tar.bz2,在编译前要根据本身触摸屏程序的数据结构修改defaulttseventtype变量的值,默认为UCB1X00,使用该版本的tslib库必须更改为H3600。而对于tslib-1.4.tar.gz版本,则不需修改,可直接在生成的配置文件ts.conf中选择不同的数据结构类型。

2)使用下面的configure参数配置编译安装Qtopia。

./configure-qte'-embedded-no-xft-qconfig qpe-depths 16,32-system-jpeg-qt-zlib-qt-libpng-gif-no-g-exceptions-no-qvfb-xplatform linux-arm-g++-tslib’-qpe‘edition pda-displaysize 240x320-fontfamilies“helvetica fixed micro smallsmooth smoothtimes unifont”-xplatform linux-arm-g++-luuid’-qt2‘-no-opengl-no-xft’-dqt‘-no-xft-thread’

设置开发板环境变量:

export QPEDIR=/home/qtopia-home/nfs/arm-qtopia/qtopia-2.2.0/qtopia

export QTDIR=/home/qtopia-home/nfs/arm-qtopia/qtopia-2.2.0/qt2

export DQTDIR=/home/qtopia-home/nfs/arm-qtopia/qtopia-2.2.0/dqt

export TMAKEDIR=/home/qtopia-home/nfs/arm-qtopia/qtopia-2.2.0/tmake

export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++

export PATH=$QPEDIR/bin:$QTDIR/bin:$DQTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QPEDIR/lib:$QTDIR/lib:$TMAKEDIR/lib:$LD_LIBRARY_PATH

3)编译安装成功之后,必须将所有需要的库文件拷贝到动态链接库目录(一般是安装位置下面的lib目录)。库文件包括交叉编译器中关于arm平台的库文件,之前交叉编译安装准备的库文件,支持Qtopia运行的库文件。

4)将编译生成的Qtopia安装文件添加到根文件系统中,并烧写至mini2440开发板上即完成了Qtopia到S3C2440上的移植。

4 数码相框应用程序开发

4.1 Qtopia功能裁剪

当安装完成Qtopi-2.2.0后,已经具备了数码相框基本的功能,包括:图片的浏览、简单的编辑、幻灯片播放图片;音乐播放;视频播放功能;各种界面设置功能,包括上网协议设置、网络参数设置、数码相框界面设置(字体、背景、主题);安全功能;音量调节;屏幕亮度调节;输入方式设置。其余功能均为冗余,可以根据源码目录src中的general.pri进行整体上的裁剪。方法如下:

接下来可以按自己的方式组织界面。找到源码目录或Qtopia安装目录下的apps文件夹,里面的每个文件夹对应一个选项卡。在其中既可以通过建立目录来增加选项卡,也可以通过删除目录来删除选项卡。每个目录下面的desktop文件对应于某个选项卡下显示的一个程序图标,文件内容为程序图标的设置,而隐藏文件。directory用于设置选项卡属性。

数码相框软件系统包括文件列表主界面、应用程序主界面以及各功能界面。这些功能界面包括图片浏览、文件管理、音乐、视频、网络等。各界面之间的切换和按钮关系如图3所示。

图3 界面切换和按钮的关系Fig.3 Relationship between interface switching and button

4.2 支持读取SD卡的实现

数码相框作为数码相机的衍生品,必须要支持主流的半导体存储卡,并能从中读取图像文件。以SD卡作为外部存储介质。由于Linux-2.6.32.2已经自带了S3C2440的SD卡驱动,因此只需在初始化代码中加入SD平台设备结构就可以实现SD卡自动挂载。在实现过程,SD卡曾一度不能正确识别,启动时一直出现failed to get write protect的错误。由于SD卡侧面移动的开关连接到了控制写保护的引脚,因此有无写保护其实就是检查有无移动开关。在linux-2.6.32.2/drivers/mmc/host/s3cmci.c中应添加如下代码:

disable_irq(host->irq); //在SDI未准备好之前先屏蔽SDI的中断功能

host->irq_state=false;

host->pdata->gpio_detect=S3C2410_GPG(8);//设置GPG8为SD卡插入拔出的检测

host->pdata->gpio_wprotect=S3C2410_GPH(8);//设置GPH8为有无写保护的检测

4.3 文件管理器的实现

由于数码相框的存储介质容量越来越大,必须通过有效的文件管理功能才能管理大量的文件。Qtopia-2.2.0本身不具有文件管理功能,但可以将Qtopia-1.7.0的文件管理器复制到目录qtopia/src/applications/,在编译工程文件qtopia/src/general.pri中添加filebrowser模块,修改源码使其具有搜索文件和文件夹的功能。添加搜索按钮,并通过信号与槽函数显示搜索界面。完成后设置好环境变量(source setQpeEnv),重新编译安装Qtopia即可。递归搜索文件及文件夹的部分关键代码如下:

4.4 背景音乐的实现

背景音乐是通过移植madplay播放器以及相关库文件,然后在源码中添加相关调用和控制实现的。准备的文件如下:

libid3tag-0.15.1b.tar.gz:MPEG音频解码器MAD中所捆绑的ID3标签操控库

madplay-0.15.2b.tar.gz:音乐播放器主程序

libmad-0.15.1b.tar.gz:高精度MPEG音频解码库

将上述文件放到madplay文件夹,并创建源码目录src-arm和安装目录target-arm,文件解压至src-arm目录,运行安装脚本mymadplay.sh后,通过ls命令查看到target-arm目录下包含bin.include.lib.man.share子目录,其中lib中的文件就是madplay要调用的库。将编译生成的库和bin目录下的可执行文件复制到安装好的Qtopia中对应的lib、bin目录下,然后调用可执行程序madplay即可实现背景音乐的设置。

4.5 支持汉字功能的实现[10]

具体实现步骤为:

1)进入Qtopia源码目录,设置好环境变量source setQpeEnv。

2)增加编译参数/configure-languages“zh_CN”,告知系统增加简体中文支持。

3)make lupdate确保翻译所必须的文件都存在而且是最新的,针对每种语言通过调整Qtopia的语言配置选项产生翻译文件。

4)bin/nct_lupdate产生源代码中无法找到的字符串的翻译文件。

5)vim i18n/zh_CN/.directory

[Translation]

File=QtopiaI18N

Context=Chinese(MainLand)

[Desktop Entry]

Name[]=Chinese(MainLand)

make lupdate;再一次更新

cd i18n/zh_CN

6)打开翻译窗体界面Linguist,将zh_CN目录下所有ts文件全部翻译并保存。在文件QtopiaDefaults.ts中,修改处,使其支持utf-8的字体格式。

7)在zh_CN目录下执行lrelease*.ts,使每个ts文件生成对应的qm文件供Qtopia调用,make lupdate再次更新。

8)在zh_CN目录下面建立两个空文件:QtopiaRingTones.ts,QtopiaThemes.ts,然后在Qtopia目录下执行make install,启动时选择支持中文。图4,图5为中英文界面对照。

图4 英文界面Fig.4 English interface

图5 中文界面Fig.5 Chinese interface

5 结语

消费电子类等嵌入式产品是否能让用户有更好的使用体验关键在于人机交互技术的体现。Qtopia为基于嵌入式Linux的移动设备提供了一个很好的应用程序开发平台,本文通过Qtopia在mini2440开发板上的移植与应用程序设计,快速开发出了一款高品质的数码相框图形系统。

[1]广州友善之臂计算机科技有限公司.Mini2440用户手册[EB/OL].(2011-04-21)[2012-01-09].http://www.arm9.net/download.asp.

[2]赵拯宇,张雪英,金刚.Qt/Embedded和 Qtopia在 OMAP5912平台上的移植及应用[J].仪器仪表用户,2009,16(2):108-110.

[3]唐浩,代少升.Qt/Embedded在S3C2440平台上的移植与开发[J].电视技术,2010,34(10):32-35.

[4]周恕义,徐晓亮,李晓勇.新型嵌入式多媒体系统架构[J].计算机工程与应用,2011,47(1):64-66.

[5]涂春萍,甘岚,张旭.基于Linux下MiniGUI的图像处理GUI平台设计[J].华东交通大学学报,2011,28(2):55-59.

[6]解超,李善平.基于Linux 的嵌入式GUI[J].计算机工程与应用,2003,39(9):135-137.

[7]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2006:12-20.

[8]吴娴.基于Qtopia的嵌入式软件开发[J].计算机工程与设计,2006,28(21):5190-5192.

[9]任善全,吕强,钱培德,等.一个基于Qt/Embedded的嵌入式Linux应用程序的实现[J].计算机应用与软件,2006,23(2):105-107.

[10]刘汇丹,芮建武,姚延栋,等.基于Qt的国际化图形用户界面设计与实现[J].中文信息学报,2006,20(4):94-99.

猜你喜欢

源码相框数码
面向数据可靠传输的高译码率带反馈的LT码
相框
国内一站式工程设备租赁平台众能联合完成C2、C3两轮融资
浅谈开源操作系统的历史
企业如何保护源码
Naim Audio Uniti Nova数码播放/放大器一体机
相框
沙滩相框
数码暗房
Who am I?5款不可貌相的数码利器