×
嵌入式开发 > 详情

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

发布时间:2020-07-07 发布时间:
|

摘要:随着嵌入式系统的发展,用户对嵌入式系统的要求越来越高,因此用于实现与用户交流功能的嵌入式GUI成为嵌入式研究中的一个重点。该文首先介绍了什么是嵌入式系统和嵌入式系统中的GUI,并阐述了开发基于嵌入式Linux平台的GUI系统的必要性。然后详细的介绍了三种常见的嵌入式GUI系统(Microwindows、MiniGUI和QT)的设计结构和使用上的优缺点等,并列表进行了比较。最后,描述了每个系统基于ARMLinux平台的移植,包括编译环境的建立、编译选项的配置和修改以及运行时参数的设置等等。

引言

什么是嵌入式系统

嵌入式系统一般指以嵌入式微处理器为核心,有别于PC系统,有计算机的部分功能但又不称之为计算机的设备或器材。它主要是以应用为目的,系统软硬件于一体,通常要求具有代码小、响应速度快、可靠性高、低功耗、集成度高等特点。嵌入式系统遍布于各个行业以及人们的日常生活当中,比如掌上PDA、移动计算设备、电视机顶盒、手机、汽车、数字相机、家庭自动化系统、安全系统、自动售货机、工业自动化仪表与医疗仪器等。

什么是嵌入式系统中的GUI

随着后PC时代的到来,嵌入式系统的性能有了大幅度的提高,应用范围也越来越广,当初的一些简单的人机交互接口已经无法满足人们的要求。而与此同时,在台式PC机上图形交互界面早已普及并成熟,于是在嵌入式系统中也逐渐出现了图形用户界面(GraphicUserInterface,GUI),特别是在一些消费类产品中。嵌入式系统中的GUI就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统。由于受到当前嵌入式系统本身特点的影响,并受其发展限制,所以嵌入式系统中的GUI应该有如下特点:

占用的存储空间以及运行时占用资源少;运行速度以及响应速度快;可靠性高;便于移植和定制。

Linux有开放的源码、高效稳定的内核、良好的开发环境以及支持多种硬件平台等特点,而且由于Linux的可配置性和可模块化,一个Linux内核经过配置和裁减可以只占用几百K左右的存储空间,使其在嵌入式系统中也得到广泛应用。然而,在嵌入式系统中有严格的资源限制,台式机Linux平台下成熟的GUI无法直接移植到嵌入式设备上。因此,嵌入式系统中基于Linux的GUI愈发成为开发基于Linux的嵌入式系统所必须面对的问题。目前,随着嵌入式行业分工的细化,出现了专门的公司致力开发Linux下的GUI并给其它公司提供授权,从而缩短了嵌入式系统的开发周期。本文就旨在于对这样的几种嵌入式GUI进行研究,列出表1进行比较,并介绍这几种GUI在基于ARMLinux上的移植。

几种比较成熟的嵌入式GUI的研究

Microwindows

Microwindows是由美国CenturySoftware公司开发的开放源码的嵌入式GUI项目。它不需要其他图形系统的支持,可以充分利用Linux提供的FrAMEbuffer机制来进行图形显示。同时在底层提供了对多种芯片的支持,并基本上用C语言实现,因此移植性很强。国内也有人参与了这个项目的开发,并编写了GB2312等字符集的支持。

Microwindows是基于分层式设计的,它允许不同的层可以被重新设计以满足系统实现的需要,目前总共分为三层。最底层是屏幕、鼠标或触摸屏和键盘的驱动程序,用于实现系统的显示功能以及满足用户特有的输入需求。中间层实现了一个可移植的图形引擎,以提供对画线、填充、剪切和着色的支持。在最上层,则提供了多种的API给应用程序设计者。Microwindows支持两种API:ECMAAPIW(类Win32API)和Nano-XAPIs。这些API对Win32和XWindow系统有很好的兼容性,使程序可以很容易地从其它系统上移植过来。其中比较完备的是Nano-XAPI。Nano-X设计成是一个客户端/服务器的环境,在此模式下应用程序与一个客户端的库相连,而这个库则通过一个UNIXsocket与Nano-X服务器相连。每个应用程序都通过UNIXsocket来传递各种参数,并由服务端来完成客户端的各种请求。当为了满足运行速度以及调试的需求时,还可以通过共享的内存空间来完成传播数据。

由于Microwindows为了与XWindow的兼容,它采用了传统的基于UNIXsocket的客户端/服务器结构。此是,客户端的画图、窗口建立等操作都是通过套接字与服务器通信。在这种情况下,系统就变得非常依赖于UNIXsocket,而UNIXsocket的传递都需要通过内核,这样在一些对实时性要求比较高的系统里就不太有利。而且Microwindows基本上用C语言实现的,虽然增强了可移植性,但也同样导致了系统的运行效率不高。同时Microwindows的开发工具FLNX也还不够成熟,有待进一步提高。

MiniGUI

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

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

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



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32的窗口看门狗