嵌入式 Linux 环境下MiniGUI 的研究与移植
发布时间:2008/8/27 0:00:00 访问次数:538
0前言
近年来随着嵌入式设备与市场需求的广泛结合,手机、pda等产品的应用对可视化操作界面的简洁和方便提出了更高的要求,这都需要一个稳定可靠的高性能gui系统来提供支持。图形用户界面(graphic user interface,简称gui)的广泛流行是当今计算机技术的重要成就之一,它极大地方便了非专业用户的使用,人们可以通过窗口、菜单方便地进行操作。嵌入式系统对gui的基本要求包括有轻型、占用资源少、高性能、高可靠性以及可配置等。minigui是目前比较常用的几种gui系统之一,与其他的gui相比,minigui最显著的特点就是轻型、占用资源少,而且在这几年的发展里,minigui已经非常成熟和稳定了,在许多产品和项目中都已得到了实际应用。*
1 minigui的特点和体系结构
1. 1 minigui的特点
minigui是由原清华大学教师魏永明主持开发的轻量级图形系统,是一种面向嵌入式或实时系统的图形用户界面支持系统。它遵循gpl公约,是基于svgalib及linuxthread库的多窗口gui支持系统。能跨多种操作系统,主要运行于linux及一切具有posix线程支持的posix兼容系统,包括普通嵌入式linux、ecos、uc/os-ii、vxworks等系统,是国内最早的自由软件之一。
minigui的主要特点有:(1) 遵循gpl条款的纯自由软件;(2) 提供了完备的多窗口机制;(3) 多字符集和多字体支持,目前支持iso8859-1、gb2312及big5等字符集,并且支持各种光栅字体和truetype、type1等矢量字体;(4) 全拼和五笔等汉字输入法支持;(5) bmp、gif、jpeg及pcx等常见图像文件的支持;(6) windows的资源文件支持,如位图、图标、光标、插入符、定时器及加速键等;(7) 可移植性好。
1.2 minigui的体系结构
1.2.1多线程的分层设计
从整体结构上看,minigui是分层设计的,结构如图1所示。在最底层,gal(图形抽象层)和ial(输入抽象层)及鼠标和键盘的驱动;中间层是minigui的核心层,包括窗口系统必不可少的各个模块;最顶层是api,即编程接口。gal和ial为minigui提供了底层的linux控制台或者x window上的图形接口以及输入接口,而pthread用于提供内核级线程支持的c函数库。利用gal和ial,大大提高了minigui的可移植性,并且使程序的开发和调试变得更加容易。
minigui本身运行在多线程模式下,它的许多模块都以单独的线程运行,同时,minigui还利用线程来支持多窗口。从本质上讲,每个线程有一个消息队列,消息队列是实现线程数据交换和同步的关键数据结构。一个线程向消息队列中发送消息,而另一个线程从这个消息队列中获取消息,同一个线程中创建的窗口可共享同一个消息队列。一个线程向消息队列中发送消息,而另一个线程从这个消息队列中获取消息,同一个线程中创建的窗口可共享同一个消息队列。利用消息队列和多线程之间的同步机制,可以实现下面要讲到的微客户/服务器机制。
图1 minigui的层次结构
1.2.2微客户/服务器结构
在多线程环境中,与多进程间的通讯机制类似,线程之间也有交互和同步的需求。比如, 用来管理窗口的线程维持全局的窗口列表, 而其他线程不能直接修改这些全局的数据结构, 而必须依据“先来先服务”的原则,依次处理每个线程的请求,这就是一般性的客户/服务器模式。minigui利用线程之间的同步操作实现了客户线程和服务器线程之间的微客户/服务器机制。
2开发环境
h2410eb开发板由北京恒颐高科技术有限公司设计开发,它基于samsung公司的s3c2410a20嵌入式arm处理器。s3c2410a20内嵌 arm920t 核,带有全性能的mmu,具有高性能、低功耗、低成本、小体积等优点,适用于手持设备、汽车等领域。
h2410eb除带有大容量的sdram和flash以外,还扩展了rs-232c串行接口、10mbps以太网接口、触摸屏接口、音频输入/输出接口、usb host、usb slave、uart接口、iic接口、用户自定义键盘、lcd显示器,方便用户使用和进行参考设计。它支持嵌入式linux操作系统的运行,支持mp3/mpeg播放、gui、web 服务及其它服务,同时可根据用户需求开发特定软件与设备驱动程序。
操作系统采用裁减后的linux,linux kernel版本为v2.4.18,系统使用的交叉编译器是arm-linux-gcc。另外,还有驱动程序源码和测试程序源码等代码模块。
3 minigui的移植
本文中使用的主机系统为red hat linux 9.0,移植目标系统为linux2.4.18,minigui的版本是1.6.9。在主机上交叉编译minigui链接库,然后将针对目标机编译的库文件,与根文件系统一起烧写到目标板的ram空间,以后将运行在目标板上的图形用户界面直接链接到该库,脱离主机独立运行。
3.1 linux交叉编译环境的构建
gui的编译通常都是在pc机上执行的,也就是说,
0前言
近年来随着嵌入式设备与市场需求的广泛结合,手机、pda等产品的应用对可视化操作界面的简洁和方便提出了更高的要求,这都需要一个稳定可靠的高性能gui系统来提供支持。图形用户界面(graphic user interface,简称gui)的广泛流行是当今计算机技术的重要成就之一,它极大地方便了非专业用户的使用,人们可以通过窗口、菜单方便地进行操作。嵌入式系统对gui的基本要求包括有轻型、占用资源少、高性能、高可靠性以及可配置等。minigui是目前比较常用的几种gui系统之一,与其他的gui相比,minigui最显著的特点就是轻型、占用资源少,而且在这几年的发展里,minigui已经非常成熟和稳定了,在许多产品和项目中都已得到了实际应用。*
1 minigui的特点和体系结构
1. 1 minigui的特点
minigui是由原清华大学教师魏永明主持开发的轻量级图形系统,是一种面向嵌入式或实时系统的图形用户界面支持系统。它遵循gpl公约,是基于svgalib及linuxthread库的多窗口gui支持系统。能跨多种操作系统,主要运行于linux及一切具有posix线程支持的posix兼容系统,包括普通嵌入式linux、ecos、uc/os-ii、vxworks等系统,是国内最早的自由软件之一。
minigui的主要特点有:(1) 遵循gpl条款的纯自由软件;(2) 提供了完备的多窗口机制;(3) 多字符集和多字体支持,目前支持iso8859-1、gb2312及big5等字符集,并且支持各种光栅字体和truetype、type1等矢量字体;(4) 全拼和五笔等汉字输入法支持;(5) bmp、gif、jpeg及pcx等常见图像文件的支持;(6) windows的资源文件支持,如位图、图标、光标、插入符、定时器及加速键等;(7) 可移植性好。
1.2 minigui的体系结构
1.2.1多线程的分层设计
从整体结构上看,minigui是分层设计的,结构如图1所示。在最底层,gal(图形抽象层)和ial(输入抽象层)及鼠标和键盘的驱动;中间层是minigui的核心层,包括窗口系统必不可少的各个模块;最顶层是api,即编程接口。gal和ial为minigui提供了底层的linux控制台或者x window上的图形接口以及输入接口,而pthread用于提供内核级线程支持的c函数库。利用gal和ial,大大提高了minigui的可移植性,并且使程序的开发和调试变得更加容易。
minigui本身运行在多线程模式下,它的许多模块都以单独的线程运行,同时,minigui还利用线程来支持多窗口。从本质上讲,每个线程有一个消息队列,消息队列是实现线程数据交换和同步的关键数据结构。一个线程向消息队列中发送消息,而另一个线程从这个消息队列中获取消息,同一个线程中创建的窗口可共享同一个消息队列。一个线程向消息队列中发送消息,而另一个线程从这个消息队列中获取消息,同一个线程中创建的窗口可共享同一个消息队列。利用消息队列和多线程之间的同步机制,可以实现下面要讲到的微客户/服务器机制。
图1 minigui的层次结构
1.2.2微客户/服务器结构
在多线程环境中,与多进程间的通讯机制类似,线程之间也有交互和同步的需求。比如, 用来管理窗口的线程维持全局的窗口列表, 而其他线程不能直接修改这些全局的数据结构, 而必须依据“先来先服务”的原则,依次处理每个线程的请求,这就是一般性的客户/服务器模式。minigui利用线程之间的同步操作实现了客户线程和服务器线程之间的微客户/服务器机制。
2开发环境
h2410eb开发板由北京恒颐高科技术有限公司设计开发,它基于samsung公司的s3c2410a20嵌入式arm处理器。s3c2410a20内嵌 arm920t 核,带有全性能的mmu,具有高性能、低功耗、低成本、小体积等优点,适用于手持设备、汽车等领域。
h2410eb除带有大容量的sdram和flash以外,还扩展了rs-232c串行接口、10mbps以太网接口、触摸屏接口、音频输入/输出接口、usb host、usb slave、uart接口、iic接口、用户自定义键盘、lcd显示器,方便用户使用和进行参考设计。它支持嵌入式linux操作系统的运行,支持mp3/mpeg播放、gui、web 服务及其它服务,同时可根据用户需求开发特定软件与设备驱动程序。
操作系统采用裁减后的linux,linux kernel版本为v2.4.18,系统使用的交叉编译器是arm-linux-gcc。另外,还有驱动程序源码和测试程序源码等代码模块。
3 minigui的移植
本文中使用的主机系统为red hat linux 9.0,移植目标系统为linux2.4.18,minigui的版本是1.6.9。在主机上交叉编译minigui链接库,然后将针对目标机编译的库文件,与根文件系统一起烧写到目标板的ram空间,以后将运行在目标板上的图形用户界面直接链接到该库,脱离主机独立运行。
3.1 linux交叉编译环境的构建
gui的编译通常都是在pc机上执行的,也就是说,