微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM LINUX的嵌入式GUI的研究和移植

基于ARM LINUX的嵌入式GUI的研究和移植

时间:04-23 来源:互联网 点击:

,面向基于Linux的实时嵌入式系统,使用现有成熟的图形引擎(SV2GALib/LibGGI),采用类似WinCE的线程机制(目前MiniGUILite版本改用微客户端/服务器模式来提供对多进程的支持),集成了多字体和多字符集,支持硬件加速能力,充分使用显示内存。

从整体来看,MiniGUI也是属于分层结构设计(见图1)。在最底层,GAL和IAL提供了Linux控制台和底层图形接口的支持以及输入设备比如鼠标、键盘等的驱动,PThread则是提供了内核级线程支持的函数库;中间层MiniGUIKernel则包括了窗口系统的各个模块,MiniGUI本身是运行在多线程模式下,它的各个模块都是以单独的线程运行,同时它也利用线程来实现多窗口;最上层,则是提供给各种应用程序使用的API函数。MiniGUI中利用线程之间的同步操作,实现了客户线程和服务线程之间的微客户端/服务器结构,因为它的客户和服务器是同一进程的两个不同线程。它的核心实现主要体现在消息队列数据结构的使用上。

多线程有其一定的好处,但弱点则在于不同的线程共享了同一个地址空间,因此,客户线程可能会破坏系统服务器线程的数据,导致系统健壮性不够健全。虽然目前的MiniGUILite版本抛弃LinuxThread库而改用微客户端/服务器模式提供对多进程的支持,但是仍然存在着对多进程支持弱、图形功能不完善、窗口剪切不完备等问题。

QT/Embedded和Qtopia

QT/Embedded是著名的QT库开发商TrollTech开发的基于framebuffer、面向嵌入式系统的QT版本。它的特点主要有界面美观、色彩配比好,使用与QT/Windows和QT/X11完全一致的API接口,许多基于QT的程序可以非常方便地移植到嵌入式系统;同时它具有丰富的模块,用户可以根据需要选择QT/Embedded的特性集合。Qtopia是TrollTech专门为嵌入式Linux设备所定制终端用户平台,它包括了Qtopia库和Qtopia的服务器及客户端应用程序。

QT/Embedded和Qtopia的结构如图2所示。QT/Embed2ded实现了对下层输入设备的驱动和底层图形接口以及各基类和API。Qtopia也是以客户/服务器的方式,通过消息机制来管理各种应用程序。QT的资源相当丰富,基于QTAPI开发的应用程序相当多,像KDE这种应用范围极广的GUI也是使用QTAPI开发出来的;而且OPIE组织也开发了并改进了许多专门基于QT/Embedded上的Qtopia应用程序及函数库。

不过QT/Embedded对于系统的资源要求非常高,需要在较大的存储空间和运行空间上才可以运行;而且它是基于C++来实现的,而这种C++接口对于嵌入式系统中的某些应用来说就显得比较臃肿;另外如若需要修改QT/Embedded并在商业产品中发布,则需要分别购买开发授权及运行时授权,所需费用太昂贵。

基于ARMLinux平台的移植

编译环境的建立

GUI的编译通常都是在PC机上执行的,也就是说,编译器本身能够在PC机上执行,同时编译源代码生成的二进制文件必须能在目标机上执行,这类编译器通常称为交叉编译器。对于ARM平台,我们安装了cross-arm-binutils-*.i386.rpm、cross-arm-gcc-*.i386.rpm、cross-arm-glibc-*.i386.rpm这三个包。这些包都可以从网上免费获取,“*”通常代表版本号。arm-binutils这个包一般包含了一些针对ARM平台的二进制工具,比如arm-STrip、arm-ar等命令;arm-glibc这个包包含的是标准C的函数库的ARM的版本以及对应的头文件;arm-gcc中包含的则是生成ARM平台代码的x86上的交叉编译器。执行rpm命令将这些包安装到PC机上,若不在系统默认搜索目录下,比如安装在/opt/cross目录下,则必须将/opt/cross/bin目录加到系统的PATH环境变量中,这样在每次编译时系统才能找得到编译器。另外需要注意的是,编译时所用的函数库版本要与目标版上运行时所用的函数库版本一致。经过上述步骤,就已经建立了交叉编译环境,接下来的就是选择或修改GUI的编译选项,从而生成所需要的GUI系统。

Microwindows的移植

Microwindows的定制和编译主要是通过修改它源程序根目录下的cONfig这个文件中的选项来实现,而在configs这个目录下已经有一些针对不同平台的config文件,若目标平台与之定义的相符,可直接将其拷贝到根目录下覆盖掉原有的config文件,然后输入命令make来开始编译。另外还可以执行根目录下的xconfigure文件,它提供了一个可视化的窗口来方便用户进行编译选项配置。下面介绍一下其中主要的一些选项:

目标平台选项。ARCH表示目标机的平台,比如ARCH=LINUX-ARM,BIGENDIAN表示目标平台是否为大数端;

图像支持选项。HAVE-BMP-SUPPORT=Y、HAVEJPEG-SUPPORT=Y两项表示对BMP和JPEG格式图像的支持(还有其它格式选项)。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top