王晓燕+刘军霞+杨先文 摘 要: 基于嵌入式Qt和Flash开发技术,提出一种适合嵌入式Linux的软件架构。该架构主要由UI界面及交互脚本、运行适配接口和应用主程序三部分组成,分别采用ActionScript,JavaScript和C/C++三种语言实现。遵循软件架构设计思路,实现了一款嵌入式串口通信软件,并且与友善之臂Mini2440内置串口助手进行对比测试。结果表明,该架构运行流畅,在UI展现、用户体验等方面有明显优势,对于嵌入式应用产品的开发具有实用价值。 关键词: 嵌入式Linux; Qt; Flash; 软件架构; 串口通信 中图分类号: TN919?34; TP368.1 文献标识码: A 文章编号: 1004?373X(2017)01?0013?04 Abstract: A software architecture suitable for the embedded Linux is proposed based on Qt and Flash development techno?logies. The architecture is composed of the UI interface and its interactive script, running adapter interface and application main program, and they are implemented with ActionScript, JavaScript and C/C++ respectively. According to the design thought of the software architecture, an embedded serial port communication software was implemented, and performed for comparison test with the serial assistant built in FriendlyARM Mini2440. The results show that the architecture works well, and has obvious advantages in the aspects of UI display and user experience, and a certain practical value for the embedded application product development. Keywords: embedded Linux; Qt; Flash; software architecture; serial port communication 0 引 言 嵌入式Linux操作系统内核开放、功能强大,且又易于裁剪和移植,已經成为嵌入式开发的首选。针对嵌入式Linux的窗口应用开发,已有的成熟技术主要有Micro?Windows/NanoX,OpenGUI,MiniGUI,Qt/Embedded等[1]。无论哪种开发技术,都面临控件功能有限、界面效果呆板、UI与底层代码强耦合等问题,造成其在UI展现、用户体验等方面欠佳。因此,结合当前流行的交互式多媒体技术,研究嵌入式软件架构具有很强的应用背景。 Flash是一个非常优秀的矢量多媒体制作工具,已成为一种交互式矢量图和多媒体的标准[2]。采用Flash设计UI的优点有:Flash程序运行于Flash player虚拟机中,具有良好的跨平台和兼容性;Flash程序是基于各个帧之间的跳转,而不是应用程序类的构造/析构,运行速度流畅;Flash程序脚本可以管理界面运行,有助于实现UI界面和应用主程序的开发分离。目前,以Flash打造UI界面,配合底层程序的软件架构在Windows平台上业已成熟[3],但是该架构基于Windows独有的COM组件方式实现,在Linux中缺少相应的替代方案。 本文基于嵌入式Qt和Flash开发技术,提出了一种适合嵌入式Linux的软件架构,实测表明,该架构满足嵌入式软件开发的需求,对于嵌入式应用产品的开发具有实用价值。 1 基础技术 1.1 嵌入式Qt开发技术 Qt是Trolltech公司的一个标志性产品,最初是针对桌面式应用推出的,而后又发布了适应Linux嵌入式设备的Qt/Embedded Linux,它是一个可以在嵌入式Linux上提供窗口系统的产品[4]。Qt推崇“一次编程,随便编译”理念,为跨平台的图形用户程序提供了一个完整的C++应用程序开发框架,这些平台包括Windows,Linux,Solaris等,且许多Qt模块库也都是Qt/Embedded Linux的组成部分。 在Qt模块库中,QtWebkit模块提供Qt应用程序使用Web浏览器的视图,它基于开源Web浏览器引擎WebKit实现,为Qt和HTML建起了一个数据交互通道,使得其他文件(如Flash制作的.swf文件等)能够通过HTML的 2 嵌入式Linux软件架构设计 结合Qt应用开发框架和Flash开发技术,本文提出的嵌入式Linux软件架构如图1所示。 图1中,UI界面基于Flash软件设计,对于UI界面背景内容,可以单独制作成图片文件,导入至Flash工程舞台即可,对于其他交互控件或动画部分可以定制成影片剪辑(MovieClip)或按钮(Button)等;UI交互脚本基于ActionScript语言开发,实现与外界的通信和UI界面信息的加载/更新;运行适配接口,基于JavaScript语言开发,对上实现与UI交互脚本之间的通信,对下实现与应用主程序之间的通信;应用主程序基于C/C++语言开发,实现基于Qt模块库的用户个性化定制服务。 在嵌入式Linux环境中运行基于上述架构开发的应用程序时,首先需要在系统中安装嵌入式Qt模块库和Flash控制库(libflashplayer.so)。其中,Qt模块库用于应用主程序运行时系统支持库,Flash控件库用于在HTML页面加载运行UI界面和交互脚本。嵌入式Qt模块库和Flash控制库的安装属于系统配置范畴,以下主要介绍UI界面和交互脚本、运行适配接口和应用主程序的设计思路。 3 关键技术设计 3.1 UI界面和交互脚本设计 UI界面设计可参考Flash动画[2]设计方法,只是此时界面元素的布局更多是基于帧,而不是时间轴。对于UI界面背景内容,可在PhotoShop等软件中制作成图片并导入到影片舞台,其他交互控制或动画部分,可基于基本控件、影片剪辑和按钮对象方式自定制。 本文以文本框(TextBox)、按钮(Button)和下拉框(ComboBox)为例,介绍UI控件及交互脚本的设计思路。结合应用实际,脚本采用ActionScript 2.0编程语言。 (1) 文本框(TextBox)。在舞台中增加文本框,设置为动态文本,设置关联变量名(如myVariable)。在时间轴中新建空白关键帧,选中该帧并打开动作面板,通过this.myVariable实现文本框内容的读写。 (2) 按钮(Button)。在库中新建按钮,分别设置其弹起、经过、按下、点击4个状态显示效果。使用时将其拖动至舞台中,选中该对象并打开动作面板,通过on()函数实现键钮事件触发。 (3) 下拉框(ComboBox)。在库中新建影片剪辑,在影片剪辑编辑模式下,通过文本工具设计显示区域,通过按钮对象设计下拉项,通过脚本语言控制下拉项的内容及其显示效果。使用时将该影片剪辑拖动至舞台中,设置实例名(如myComboBox),在时间轴中新建空白关键帧,选中该帧并打开动作面板,通过this.myComboBox访问下拉框定义的变量和函数。 此外,UI交互脚本还应实现与HTML页面文档的数据交互。对于接收HTML页面数据,只需在Flash文件嵌入至HTML页面时,通过