嵌入式Linux与MiniGUI的关键问题研究

2009-09-28 02:06刘书刚
大家 2009年12期
关键词:嵌入式

摘要:本文主要讨论了基于Linux的嵌入式系统的研究与开发。通过对通常嵌入式Linux操作系统的原理和实现方式的分析,针对具体的MiniGUI,分析了其体系结构和关键技术。

关键词:嵌入式 Linux MiniGUI

一 嵌入式Linux概述

自从1991年首次公开发表以来,Linux的应用范围越来越广泛。Linux常用来指Linux内核、Linux系统或Linux发行套件。当Linux内核为了特殊的硬件配置或者支持特定的应用,经过特别的裁剪,这样就成为了嵌入式Linux系统。

二 嵌入式Linux系统下MiniGUI

随着Linux的广泛应用,PDA、机顶盒、DVD/VCD播放机及WAP手机已经迅速普及。图形用户界面(GUI)的广泛流行,是当今计算机技术的重大成就之一。它极大地方便了非专业用户的使用,因此实时嵌入式系统对GUI的需求越来越明显,而这一切均要求有一个高性能、高可靠的GUI的支持。

由于Linux系统实时性要求非常高,对GUI的要求也更高。这些系统一般不希望建立在庞大累赘的、非常消耗系统资源的操作系统和GUI之上,比如Windows,太过庞大和臃肿。这样,这些系统对轻型GUI的需求更加突出。另外嵌入式系统往往是一种定制设备,它们对GUI的需求也各不相同。有些系统只要求一些图形功能,而有些系统要求完备的GUI支持,因此,GUI也必须是可定制的。嵌入式系统对GUI的基本要求包括轻型、占用资源少、高性能、高可靠性及可配置。

三 MiniGUI的体系结构

3.1多线程的分层设计

GAL和IAL为MiniGUI提供了底层的Linux控制台或者XWindow上的图形接口以及输入接口,而Pthread是用于提供内核级线程支持的C函数库。MiniGUI本身运行在多线程模式下,它的许多模块都以单独的线程运行,同时,MiniGUI还利用线程来支持多窗口。从本质上讲,每个线程有一个消息队列,消息队列是实现线程数据交换和同步的关键数据结构。一个线程向消息队列中发送消息,而另一个线程从这个消息队列中获取消息,同一个线程中创建的窗口可共享同一个消息队列。利用消息队列和多线程之间的同步机制,可以实现下面要讲到的微客户/服务器机制。多线程有其一定的好处,但不方便的是不同的线程共享了同一个地址空间,因此,客户线程可能会破坏系统服务器线程的数据,但有一个重要的优势是,由于共享地址空间,线程之间就没有额外的数据复制开销。由于MiniGUI是面向嵌入式或实时控制系统的,因此,这种应用环境下的应用程序往往具有单一的功能,从而使得采用多线程而非多进程模式实现图形界面有了一定的实际意义,也更加符合MiniGUI之“mini”的特色。目前,MiniGUI开发组准备开发出基于多进程客户/服务器机制的类XWindow的API,以便用于不同的应用环境。

3.2微客户/服务器结构

在多线程环境中,与多进程间的通讯机制类似,线程之间也有交互和同步的需求。比如,用来管理窗口的线程维持全局的窗口列表,而其他线程不能直接修改这些全局的数据结构,而必须依据“先来先服务”的原则,依次处理每个线程的请求,这就是一般性的客户/服务器模式。MiniGUI利用线程之间的同步操作实现了客户线程和服务器线程之间的微客户/服务器机制,之所以这样命名,是因为客户和服务器是同一进程中的不同线程。微客户/服务器机制的核心实现主要集中在消息队列数据结构上。

当MiniGUI在初始化全局数据结构以及各个模块之后,MiniGUI要启动几个重要的微服务器,它们分别完成不同的系统任务:

①desktop用于管理MiniGUI窗口中的所有主窗口,包括建立、销毁、显示、隐藏、修改Z-order、获得输入焦点等等。

②parsor线程用来从IAL中收集鼠标和键盘事件,并将收集到的事件转换为消息而邮寄给desktop服务器。

③timer线程用来触发定时器事件。该线程启动时首先设置Linux定时器,然后等待desktop线程的结束,即处于体眠状态。当接收到SIGALRM信号时,该线程处理该信号并向desktop服务器发送定时器消息。当desktop接收到定时器消息时,desktop会查看当前窗口的定时器列表,如果某个定时器过期,则会向该定时器所属的窗口发送定时器消息。

四 MiniGUI的关键技术

(1)多线程和多窗口

MiniGUI中的窗口基本分四类,分别为主窗口、对话框、控件和主窗口中的子窗口。MiniGUI中的主窗口和Windows应用程序的主窗口概念类似,但有一些重要的不同,MiniGUI中的每个主窗口及其附属主窗口对应于一个单独的线程,通过函数调用可建立主窗口以及对应的线程。

(2)对话框和标准控件

MiniGUI中的对话框是一种特殊的窗口,对话框一般和控件一起使用,这两个概念和Windows或XWindow中的相关概念是类似的。MiniGUI支持的控件类型有:

①静态框:文本、图标或矩形框等。

②文本框:单行或多行的文本编辑框。

③按钮:单选钮、复选框和一般按钮等。

④列表框。

⑤进度条。

(3)其他GUI元素

MiniGUI还支持级联式菜单、插入符、定时器、光标、快捷键等常见的GUI元素。

(4)消息和消息循环

在任何GUI系统中,均有事件或消息驱动的概念。在MiniGUI中,使用消息驱动作为应用程序的创建构架。在消息驱动的应用程序中,计算机外设发生的事件,例如键撇键的敲击、鼠标键的按击等,都由支持系统收集,将其以事先的约定格式翻译为特定的消息。

应用程序一般要提供一个处理消息的标准函数。在消息循环中,系统可以调用此函数,应用程序在此函数中处理相应的消息。MiniGUI支持如下几种消息的传递机制。这些机制为多线程环境下的窗口间通讯提供了基本途径:

①通过PostMessage发送。消息发送到消息队列后立即返回。这种发送方式称为“邮寄”消息。如果消息队列中的邮寄消息缓冲区已满,则该函数返回错误值。

②通过PostSyncMessage发送。该函数用来向不同于调用该函数的线程消息队列邮寄消息,并且只有该消息被处理之后,该函数才能返回,因此这种消息称为“同步消息”。

③通过SendMessage发送。该函数可以向任意一个窗口发送消息,消息处理完成之后,该函数返回。如果目标窗口所在线程和调用线程是同一个线程,该函数直接调用窗口过程,如果处于不同的线程,则利用PostSyncMessage函数发送同步消息。

④通过SendNotifyMessage发送。该函数向指定的窗口发送通知消息,将消息放入消息队列后立即返回。由于这种消息和邮寄消息不同,是不允许丢失的,因此,系统以链表的形式处理这种消息。

⑤通过SendAsyncMessage发送。利用该函数发送的消息称为“异步消息”,系统直接调用目标窗口的窗口过程。

参考文献:

[1] 邹思轶.嵌入式Linux设计与应用.清华大学出版社.2002年1月.第一版

[2] 冯锐等译.Linux内核源代码分析.机械工业出版社.2000年.第二版

[3] 邹勇,王青和李明树.Linux内核的实时支持的研究与实现.计算机研究与发展.2002年.第四期

[4] William Stallings.操作系统-内核与设计原理.电子工业出版社2001第4版.P336-346

作者:

刘书刚华北电力大学计算机系

猜你喜欢
嵌入式
嵌入式LINUX操作系统的研究
嵌入式的特点及发展机遇
嵌入式组件技术的研究及应用
基于嵌入式系统的游戏程序设计
“嵌入式系统概论”课程设计
AItera推出Nios II系列软核处理器