加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 单片机学习

基于uClinux系统的MiniGUI的研究与移植

时间:2013-09-08  来源:123485.com  作者:9stone

摘要:MiniGUI作为一种嵌入式的图形用户界面,适合于作为嵌入式应用软件的显示引擎。分析了MiniGUI的结构和特点,并在配置和编译好uClinux后,提出一种将MiniGUI移植到目标平台上的方案。

1 引言
    嵌入式系统是当今一个非常重要的发展方向,嵌入式的广泛应用已经无所不在,手机、电话座机、PDA、数字机顶盒等都有嵌入式系统的存在。而用于嵌入式系统的图形用户界面(GUI)也随之广泛流行,它极大地方便了非专业用户的使用。MiniGUI最初是为了满足一个工业控制系统(计算机数控系统)的需要而设计和开发的。考虑到X Window不适合于实时控制系统并且其本地化也不尽人意,因此MiniGUI一开始就针对实时系统而设计,考虑了实时系统对GUI的占用资源少、高性能、高可靠性及可配置的基本要求。MiniGUI目前的功能己经非常强大,并且已经成功应用于许多嵌入式系统中。

2 MiniGUI的特点和体系结构
2.1 MiniGUI的特点
    目前,在嵌入式系统中比较常用的有如下几种GUI系统:紧缩的X Window系统、MiniGUI、MicroWindows、OpenGUI及QT/Embedded 等,而MiniGUI作为一个面向实时系统的GUI,具有其自身的特点:

  •  提供了完备的多窗口机制和消息传递机制。
  •  提供常用的控件类,包括静态文本框、按钮、单行和多行编辑框、列表框、组合框、进度条、属性页、工具栏、拖动条、树型控件、月历控件等。
  •  对话框和消息框支持。
  •  其他GUI元素,包括菜单、加速键、插入符、定时器等。
  •  界面皮肤支持。用户可以通过皮肤支持外观非常华丽的图形界面。
  •  通过两种不同的内部软件结构支持低端显示设备(如单色LCD)和高端显示设备(如彩色显示器),后者在前者的基础上提供了强大的图形功能。
  •  Windows的资源文件支持,如位图、图标、光标等。
  •  各种流行图像文件的支持,包括JPEG、GIF、PNG、TGA、BMP等等。
  •  多字符集和多字体支持,目前支持ISO8859-1-ISO8859-15、GB2312、GBK、GB18030、BIG5、EUC-jp、Shift-JIS、EUC-KR、UNICODE等字符集,支持等宽点阵字体、变宽点阵字体、Qt/Embedded使用的嵌入式字体QPF、TrueType以及Adobe Typel等矢量字体。
  •  汉字(GB2312)输入法支持,包括内码、全拼、智能拼音、五笔及自然码等。
  •  针对嵌入式系统的特殊支持,包括一般性的I/O流操作,字节序相关函数等。

2.2 MiniGUI的体系结构
    MiniGUI是分层设计的,其结构如图1所示:
 
    中间层是MiniGUI的核心层,上层为它的API,在底层,图形抽象层GAL和输入抽象层IAL提供底层图形接口以及输入接口,而Pthread是用于提供内核级线程支持的c函数库。
    利用GAL和IAL,MiniGUI可以在许多图形引擎上运行,可以非常方便地将MiniGUI移植到其他POSIX系统上,而这只需要根据我们的抽象层接口实现新的图形引擎即可;并且也可提高MiniGUI的可移植性,使程序的开发和调试变得更加容易。可以在一般的Linux系统上开发和调试自己的MiniGUI程序,通过重新编译就可以让MiniGUI应用程序运行在特殊的嵌入式硬件平台上。
    针对不同的操作系统环境,MiniGUI可以被配置成三种运行模式:

  •  MiniGUI-Threads。运行在MiniGUI-Threads上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或者地址空间运行。这种运行模式非常适合于大多数传统意义上的嵌入式操作系统,比如uc/OS-II、VxWorks、pSOS等。当然,在Linux和uClinux上,MiniGUI也能以
    MiniGUI-Threads的模式运行。
  •  MiniGUI-Lite。和MiniGUI-Threads相反,MiniGUI-Lite上的每个程序是单独的进程,每个进程也可以建立多个窗口。MiniGUI-Lite适合于具有完整UNIX特性的嵌入式操作系统,比如嵌入式Linux。
  •  MiniGUI-Standalone。在这种运行模式下,MiniGUI可以以独立的方式运行,既不需要多线程也不需要多进程的支持,这种运行模式适合功能单一的应用场合。比如在一些使用uClinux的嵌入式产品中,因为各种原因而缺少线程的支持,这时,就可以使用MiniGUI-Standalone来开发应用软件。

3 uClinux的配置和编译
    本方案是在Embest EduKit-II实验平台上实现的,CPU为S3C44BOX芯片,宿主机编译环境为RedHat9.0操作系统。uClinux采用uClinux-dist-20040408,首先运行make xconfig进行配置,需要设置的选项有(如图2所示):在Vendor/Product Selection中选择相应的目标平台Embest,在Kernel/Library/Defaults Selection中,Kernel选为Linux-2.4.x,libc选uClibc,然后选择Customize Kernel Settings为Y进行内核配置。
 
    在linux kernel Configuration对话框中(如图3所示)。Character devices菜单设置Virtual terminal和Support for consoleon virtual terminal为Y,Console drivers菜单设置Support Frame buffer devices为Y,并点击Frame-buffer support后进入Framebuffer支持配置界面进行设置。
 
    配置完成后开始编译uClinux,在编译前必须将gcc编译工具链的安装路径添加到系统默认路径。进人uClinux-dist目录依次运行命令make
dep、make clean、make lib_only、make user_only、make romfs、make image,最终生成uClinux内核映像文件以及文件系统的映像文件,可以将它们烧写到flash上。

4 MiniGUI的移植
    由于MiniGUI较好地将硬件设备抽象为GAL层和IAL层,移植时只需要针对自身的硬件特点按照GAL层调用接口和IAL层调用接口来做内部实现即可。实现了对framebufer的支持后,配置MiniGUI选择Native的GAL引擎,便可以使用framebuffer作为MiniGUI的图形发生引擎。
    MiniGUI的IAL层将输入设备的输入事件最终映射为GUI系统API层的消息事件。IAL层默认处理两种设备的输入操作:键盘设备和鼠标设备。键盘设备向上层提供不同的按键输入信息,鼠标设备提供点击、抬起和落笔坐标等的信息。在实现MiniGUI与输入设备驱动的接口时,采用Select的方式获得输入设备的动作,并转换为消息队列中的消息。消息参数按照Win32接口定义为点击键编号或鼠标当前的坐标。通过编写针对硬件开发系统的IAL支持代码,实现IAL层的移植。
具体的移植过程如下:
    下载MiniGUI的函数库文件源代码包libMiniGUI-1.3.3.tar.gz和资源文件包MiniGUI-res-1.3.3.tar.gz,分别进行移植。由于MiniGUI使用了自由软件常用的automake和autoconf接口,因此其配置和编译非常容易。
    解压缩库文件源码包后,进入MiniGUI源代码目录,运行autogen.sh脚本文件,陔文件可以简单地重新生成所有与配置相关的文件,然后为当前的构建环境配置软件。库文件的编译配置主要通过执行源程序根目录下configure这个文件,并给它传递相关的参数来实现,如编译环境所在的主机类型(--host选项)、目标平台类型(--target选项)以及函数库的安装路径(--prefix选项)等。
    由于要配置成MiniGUI-Standalone模式, 此还需要加上参数:--enable-standalone。参数设置好后执行configure文件,生成一个标准的Makefile文件,执行make命令开始编译,编译结束后执行make install命令进行安装。
    安装MiniGUI资源文件MiniGUI-res比较简单,只要修改目录树下的configure.linux文件,将prefix选项改为和刚才的安装路径一致就可以了,然后直接执行make install进行安装。
    编译MiniGUI应用程序的时候,可以先单独编译MiniGUI程序,生成该程序的可执行文件,然后复制到uClinux-dist的rotors目录中,执行makeimage命令,生成映像文件,烧写到flash上后可以在目标板上运行该程序。

5 结束语
    本文介绍了MiniGUI的特点和体系结构,在配置和编译uClinux系统的基础上,将MiniGUI成功移植到了目标平台上。熟悉图形应用程序的用户可以很快在MiniGUI上面编写自己的图形应用程序。随着MiniGUI的不断推广和功能的加强,它将在嵌入式系统设计中起着举足轻重的作用,并且在实际应用中不断走向成熟。

参考文献
[1]闰玉忠,石理.嵌入式Linux的MiniGUl研究和移植
[2].单片机与嵌入式系统应用,2003(6):2-3
[2]李善平,刘文峰,王焕龙等.Linux与嵌入式系统[M].北京:清华大学出版社,2003,
[3]飞漫公司:MiniGUI Technology White Paper


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->单片机学习
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门