Qt_Embedded应用程序在ARM_Linux系统中的开发与应用
- 格式:pdf
- 大小:433.12 KB
- 文档页数:4
36 | T echniques of Automation & A pplications收稿日期:2011-05-271 引言目前,随着计算机技术和信息网络技术的飞速发展,嵌入式系统以其小巧、灵活、实用性强等特点得到越来越广泛的应用。
图像用户接口(GUI)作为人机交互的重要环节,大量应用于嵌入式系统,以增强嵌入式系统操作的便捷和友好性。
由于多数嵌入式系统采用了Linux操作系统,因此,Linux操作系统下图形界面设计与实现技术研究具有显著的实际应用价值。
Qt是Trolletch公司研发的可用于Linux操作系统下图形界面的设计与开发工具。
该软件由于具有丰富Qt/Embedded 应用程序在ARM-Linux 系统中的开发与应用孙 巍1,冯伟兴2(1.海军驻武汉四三八厂军事代表室,湖北 武汉 430060;2.哈尔滨工程大学自动化学院,黑龙江 哈尔滨150001)摘 要:随着嵌入式系统的发展,用于实现与用户交流功能的嵌入式图形用户界面(GUI)成为嵌入式系统研究中的重点。
介绍了Qt/Embedded的软硬件开发环境,详细阐述了Qt/Embedded应用程序的开发过程,并针对开发过程中的关键问题给出了详细的解决方法。
最后,结合实例说明Qt/Embedded在基于ARM的嵌入式系统中的应用。
关键词:嵌入式Qt;嵌入式Linux;嵌入式GUI;交叉编译中图分类号:TP319 文献标识码:B 文章编号:1003-7241(2010)08-0036-04Development and Application of Qt/Embedded Applications onARM-LinuxSUN Wei 1, FENG Wei-xing 2( 1. No.438 plant in Wuhan Navy Military Representative Office, Wuhan 430060 China;2. College of Automation, Harbin Engineering University, Harbin 150001 China )Abstract: With the progression of embedded systems, embedded graphical user interface (GUI) used to communicate with userschanged to be more important. After expression of hardware and software development requirement of Qt/Embedded,development process of Qt/Embedded application is expounded in detail. The solution to tackle the problem in process of Qt/Embedded application development is also addressed. The realization of Qt/Embedded in embedded ARM system is illustrated finally.Key words: Qt/Embedded; embedded linux; embedded GUI; cross-compiling的API接口和基于组件的编程模型,使得Linux系统下图形界面的开发不再困难。
尽管Qt应用程序在PC机上进行开发易于实现,但由于PC机与嵌入式系统运行的Linux平台差异比较大,因此,不能将PC机上的Qt应用程序直接复制到嵌入式系统中运行。
针对这一问题,本文阐述了基于Qt/Embedded开发Qt应用程序并移植到以ARM为核心的嵌入式系统的技术方法[1]。
2 Qt/Embedded 应用程序开发流程由于Qt最成功的应用是Linux操作系统界面开发,所以我们通常所说的Qt都是指Linux下的Qt。
Qt核心是应用于图像界面开发的图像界面库。
依据应用Techniques of Automation & Applications | 37环境的不同包括很多版本,比如Qt/X11,Qt/Embed-ded等。
其中,Qt/X11是应用于PC机Linux系统的Qt版本。
Qt/Embedded是应用于嵌入式Linux系统的Qt版本。
为了适应嵌入式系统硬件平台,Qt/Embedded采用Framebuffer(帧缓冲器)作为底层图形接口。
Framebuffer是Linux推出的标准显示设备接口,它将显示设备抽象为帧缓冲区。
在应用程序中对Framebuffer进行操作即可实现显示功能,从而不用考虑硬件问题[2-4]。
Qt/Embedded和Qt/X11的不同之处就在于,Qt/Embed-ded支持对Framebuffer进行直接操作,而Qt/X11则不支持。
Qt/Embedded应用程序开发需要构建Qt/Embedded开发环境和运行环境。
尽管Qt/Embedded和Qt/X11在图形界面设计上有着本质不同,但由于所有版本的Qt库均采用相同的命名,所以,Qt的应用程序开发具有平台无关性,Qt/Embedded的应用程序开发仍可采用Qt/X11的开发环境进行编辑。
Qt/X11开发环境提供了两种源程序开发工具designer和uic。
designer是一个可视化的基于Qt的用户界面设计工具,可以生成ui格式文件以存储设计好的Qt应用程序界面。
uic是Qt的代码自动生成工具,它可根据设计好的ui界面文件生成相应的C++代码。
源程序的编写可直接使用开发工具designer和uic进行设计。
由于Qt/X11不支持对Framebuffer进行直接操作,无法对Qt/Embedded应用程序进行编译及调试,因此,Qt/Embedded开发环境还需要有Qt/Embed-ded库进行支持。
所采用的Qt/Embedded库可以在PC上对Qt/Embedded安装包进行编译生成。
另外,在Qt/Embedded的应用程序调试时,需要使用Qt/X11的虚拟调试工具qvfb。
qvfb是一个虚拟Framebuffer调试程序,它可以将Qt/Embedded应用程序的运行结果显示在PC机界面上[5-6]。
PC机上调试好的Qt/Embedded应用程序无法直接复制到嵌入式系统中运行,需要进行应用程序移植。
程序移植首先需要在嵌入式系统中构建Qt/Embedded运行环境,即在嵌入式系统中生成Qt/Embedded应用程序运行时所需要的库文件。
具体来说,就是在PC机上使用交叉编译工具对Qt/embedded安装包进行交叉编译,以生成可以在嵌入式系统中运行的库文件。
同时,对Qt/Embedded源程序也进行交叉编译,生成最终的可以在嵌入式系统中运行的应用程序[7]。
Qt/Embedded应用程序开发的流程图如图1所示。
3 Qt/Embedded 应用程序在ARM-Linux 中的开发依据前面介绍的Qt/Embedded应用程序开发流程,要实现Qt/Embedded应用程序在ARM-Linux系统中的开发及应用,首先需要构建相应的Qt/Embedded开发环境和运行环境。
Qt/Embedded开发环境和运行环境的构建都需要对Qt/Embedded的源码包qt-embedded进行编译,生成相应的库文件。
两者的编译方法相似,不同之处仅在于编译工具的选择[8]。
Qt/Embedded应用程序也是如此,使用不同的编译工具对应用程序进行编译,将分别生成可在PC机上进行调试的应用程序和最终在ARM-Linux中运行的应用程序[9]。
图1 Qt/Embedded 应用程序开发流程图3.1 Qt/Embedded开发环境构建构建Qt/Embedded开发环境即是构建Qt/X11开发环境,但所使用的库是能够在PC机上运行的Qt/Em-bedded库。
qt-x11是用于PC机的Qt源码包,构建Qt/X11开发环境即是对Qt核心包qt-x11进行编译。
编译成功后,将生成开发Qt/Embedded应用程序所要用的开发工具designer、uic、qvfb。
在应用程序编译及调试过程中,需要Qt/Embedded库的支持。
使用PC机自带的编译工具对qt-embedded源码包进行编译,将生成编译及调试时所需要的库文件。
在编译和调试过程中,要将库文件所在目录的路径加入到环境变量LD_LIBRARY_PATH中,以使得库文件在编译和调试过程中生效。
在构建Qt/Embedded开发环境过程中,无论是编译qt-x11源码包还是qt-embedded源码包,所使用的编译工具都是PC机自带的编译器,以确保开发工具和库文件能够在PC机上运行。
Qt/Embedded开发环境构建完成后,即可进行Qt/Embedded应用程序的开发,但要使得应用程序能够在ARM-Linux系统中运行,还需构建Qt/Embed-ded运行环境。
3.2 Qt/Embedded交叉编译与移植开发Qt/Embedded应用程序的最终目的是使其能够在ARM-Linux系统中成功运行,以实现特定功能。
而Qt/Embedded应用程序在ARM-Linux系统中运行时,需要有能够在ARM-Linu系统中运行的Qt/Embed-ded库的支持[10],因此,Qt/Embedded应用程序开发的关键就是构建Qt/Embedded运行环境。
构建Qt/Embedded运行环境也需要对qt-embedded源码包进行编译,生成Qt/Embedded库文件。
由于要求Qt/Embedded库在ARM-Linux系统中运行,因此,需要使用交叉编译工具对qt-embedded源码包进行交叉编译。
交叉编译就是在一个平台上生成可在另一个平台上运行的可执行代码[11],这里即是在PC机平台上生成可在ARM平台上运行的可执行代码。
交叉编译成功后,生成能够在ARM-Linux系统中运行的Qt/Embedded库文件。
之后,将生成的库文件复制到ARM-Linux系统。
但Qt/Embedded应用程序在ARM-Linux系统中运行时,要使应用程序能够成功调用Qt/Embedded库,必须使Qt/Embedded库文件在ARM-Linux系统中有效。
登录ARM-Linux系统,将移植后的库文件的路径添加到ARM-Linux系统的环境变量LD_LIBRARY_PATH中即可使库文件生效。
完成Qt/Embedded运行环境的构建后,即可将Qt/Embedded应用程序在ARM-Linux系统中运行,进行实际测试与应用。