嵌入式Linux系统下Microwindows的应用_linux微系统 显示器-程序员宅基地

技术标签: 技术观察  linux  服务器  microsoft  windows  嵌入式  图形  

 引言    

       在进入后PC时代以后,嵌入式 设备以一种无法抑制的迅猛速度普及和发展到日常生活及工作当中,众多知名开发商为了抢占市场和争夺利润,竞相推出各种性能优异的软硬件及内核芯片。鉴于以视窗为代表的桌面操作模式取得巨大成功,该模式目前已成为国内外开发者们在嵌入式设备中的首选方案。

       近几年,随着Linux技术的兴起,越来越多的企业和科研机构把目光转向嵌入式Linux的开发和研究。Linux不仅具有桌面电脑的全部功能和特性,允许修改和根据用户的要求进行定制,而且作为一种免费的开放式源码,还支持目前在嵌入式设计领域中常用的新型微处理器,如StrongARM、MIPS以及PowerPC等,具有稳定、高效、易定制、易裁减、硬件支持广泛等特点。 Microwindows是一个著名的开放式源码的嵌入式GUI软件,目的是把 图形视窗环境引入到运行Linux的小型设备和平台上。作为X Window系统的替代品,Microwindows可用更少的RAM和文件存储空间(100K~600KB)提供相似的功能,允许设计者轻松加入各种显示设备、鼠标、触摸屏和键盘等;可移植性非常好,可用C语言和少部分汇编语言实现,支持Intel 16位、32位CPU,MIPS R4000以及基于ARM内核的处理器芯片,有多种平台支持Microwindows。

       1 X Window的不足

       由于使用了带有TCP/IP结构的自由式开放源码 操作系统,使嵌入式设备进入了一个创新应用时代,不过这些新的应用需要考虑其资源环境,这是因为多数的嵌入式设备缺少硬件驱动和大的RAM。目前,在Linux系统中普遍使用X Window系统,如图1所示。X Window是在20世界80年代早期由MIT、DEC等提出来的,是一个基于Client/Server结构的视窗系统;允许在任一台UNIX主机(Clients——客户端)上运行 程序,而在基于X的终端(Server——服务器)上显示出来。在这个过程中,相当一部分代码用于确认主机和服务器上运行的Client/Server程序是否正常。目前,大多数X的客户端和服务器是在同一台机器上运行,X Window服务器经编译后一般用于自动检测硬件。服务器中还包含有众多的画图函数,它们的位置根据执行速度被位置在裁减层之上或之下。这些便利X Window过于臃肿和复杂,运行时需要至少8MB的内存空间。

以x windows为GPI的linux系统构架


       2 Microwindows分析比较

      
对于大多数嵌入式设计,尤其是在运行专用图形程序的场合,X Window不是一种恰当的选择。由此而发展起来的Microwindows是专门设计用于在小型设备上开发具有高品质图形功能的开放式源码桌面系统,有许多针对现代图形视窗环境的功能部件。它的结构设计使其可方便地加入不同的显示、鼠标、触屏以及键盘等设备。Microwindows基于2.2.0版本的Linux系统如图2所示。其内核所包含的代码允许用户程序将图形显示的内存空间作为framebuffer进行存取操作,这样在用户程序空间中可作为内存映射区域来直接控制图形显示,可使得用户在编写图形程序的时候不再需要去了解底层硬件,这是目前Microwindows在嵌入式系统中被很多人使用的原因。

基于microwindows的linux体系结构


       设计得在设计Microwindows时沿用了已有的两个图形应用程序接口(API):一是Microsoft Windows中Win32/WinCE的图形设备接口(GDI),它适用于所有Windows CE和Win32的应用程序;另外就Nano-X(Xlib-like界面),它与GDK非常相似,用在Linux上,是像X的API,用于占用资源少的应用程序。这使得熟悉Windows或者是Linux X11的用户可在熟悉的环境下开发图形应用程序。

       Microwindows在运行过程中仅需要50~250KB的内存空间,远小于X Windows系统所需空间。这主要是因为Microwindows对于在驱动层的每一个绘图函数采用的是单进程的方式,由驱动层核验是否裁减并调用驱动程序来绘制未被裁减的像素点或线;而在X Window系统中,则是出于对速度的考虑,包含所有像素点的绘制程序并分别有裁减和未裁减的版本。Microwindows完全支持新的Linux内核的帧缓冲区结构,同时支持1、2、4、8、16、24、32位像素点显示,支持调色板、真彩色、灰度等颜色模式,并对渲染提供内置支持。在其API函数的支持下,还可以以RGB的格式描述上述的颜色模式,系统中包含颜色转换的程序,可将像素点转换成相近的可显示颜色或相应单色系统中的灰度级。虽然Microwindows支持Linux系统,但它是基于相对简单的屏幕驱动界面结构,因此,可在许多不同的实时操作系统(RTOS)上运行,甚至于那些无硬件的实时操作系统也可运行Microwindows。这样,可使得客户的图形应用程序在不的工程中共享使用,也可在不同的RTOS上运行不同的目标程序而不需要重新编写图形应用程序,大大提高了编程效率。

Microwindows支持图形目标平台的主机平台竞争,也就是说应用于Linux的Microwindows应用程序不需要跨平台编译,就可在桌面上直接运行和测试,同时仍可在目标平台上运行。这一点需通过使用Micorwindows的X11屏幕驱动器实现,同时驱动器可以根据像素点和颜色值来模拟目标平台的显示。因此,即使桌面系统是24位的颜色模式,它也可以以2色模式显示目标系统中的应用程序。

对于那些熟悉使用Microsoft Windows或Linux X Windows的程序员页言,经编写应用程序时是有一定区别的。Microsoft Windows的编程员一般使用MS-Visual C++的类库(MFC)中的C++应用程序框架或者是更新的ATL框架,在绘制图形时使用Win32图形设备接口(GDI)。Windows中还包括有许多Win32 GDI中的应用界面控件,如按钮、列表等。而X Windows系统提供了一个低级接口——Xlib,仅用于实现最低级简单的绘图功能,并将其封装成程序包在需显示时在显示设备上运行。在用户界面中,大多数的解决利用插件,在Xlib的上层加入插件集来实现更高级的函数。目前,对Microwindows的应用正在逐步地加入GTK+/GDK以及FLTK插件,以实现更多的用户界面控件。

3 Microwindows的体系结构

由于Microwindows在设计上有着明显的分层结构,如图3所示,其设备与平台相关层、设备与平台无关层和应用层之间层次清晰、结构明显,因此勿需改动其整体结构,只需在其相应的部分添加代码即可实现一些更为复杂的功能。

图3 Microwindows体系结构

    在Microwindows的最底层(设备与平台相关层),系统针对显示屏、鼠标、触屏以及键盘等各定义了一个数据结构。该数据结构和顶层结构一样,供图形引擎使用,包含了针对指定设置和硬件驱动代码。Microwindows中还包含了诸多设备和操作系统的各种版本的驱动程序。屏幕驱动可支持系统1的、2、4、8、16、24、32位显示和调色板、真彩色、灰度等颜色模式。屏幕驱动中还包括一些入口指针,这些指针分别用读写像素、绘制水平或垂直线,在屏幕和内存之间相互映射内存空间。在实现这些基本指针的过程中需运行包括TrueType或Adobe Type1的字体支持、RGB颜色支持、JPEG以及BMP图形处理等Microwindows上层函数。如果屏幕驱动中还包括有硬件加速的话,仅需更改驱动程序即可;也可在系统中添加触屏、键盘、按键等的输入。

Microwindows的中间层是图形引擎层(也称为设备与平台无关层),因为所有的绘图函数都通过调用屏幕驱动来实现,该层与硬件无关。图形引擎层为应用层提供了一系列相应的入口指针调用绘图函数,还为所有的颜色指定了RGB的颜色模型;同样,该层也与显示设备无关,可以由RGB值为判断硬件中的像素值。除此之外,Microwindows还在中间层实现裁减功能,它采用多矩形算法,可在任意复杂的区域中实现绘图功能。中间层还要控制所有字体的显示,支持FreeType以及使用T1Lib的Adobe Type 1字体、支持比例字体,同时还支持ASCII、Unicode-16、Unicode-32、UTF-8编码规则。

Microwindows的最高层(应用层)实现了窗口交互系统,这使得程序员既可在全屏幕显示,也可在层叠的窗口中显示。一层还包括事件处理,可将触摸屏、按键等激发的事件传送给应用程序。

Nano-X API允许程序可以根据Client/Server协议通过网络或是本地的UNIX主机进行编译,以同时显示几个运行在已连接到Microwindows服务器的嵌入式设备或远程主机上的程序。除此之外,Client/Server协议还可以利用共享的内存空间客户端和服务器之间传播数据。Nano-X可在每个客户机上步运行,这意味着一旦发送了客户机请求包,服务器在另一个客户机提供服务之前一直等待,直到整个包到达为止。这使得服务器代码非常简单,而运行速度仍非常快。

4 Micorowindows上的FLTK API

FLTK是一个简单灵活的GUI工具箱,特别适用于占用资源很少的环境。它提供大多数窗口构件一一按钮、对话框、文本框以及出色的“赋值器”选择(用于输入数值的窗口构件),还包括滑动器、滚动条、刻度盘等其它构件。针对Microwindows GUI引擎的FLTK的Linux版本被称为FLNX,它能用来为嵌入式环境创建一个出色的UI构建器,由两个构件组成:FI_Widget和FLUID。FI_Widget由所有基本窗口构件API组成,占用40~48KB的资源。FLUID(Fast Light User Interface Desigher,快速轻巧的用户界面设计器)是用来产生FLTK源代码的图形编辑器,占用大约380KB资源(包括每个窗口构件)。

FLTK是一个C++库,由于大多数现代GUI环境都是面向对象的,这命名编写的应用程序移植到类似的API中会更容易。

结语

Microwindows正在嵌入式开发领域稳步发展,是完全免费的开放式源代码,为嵌入式设备提供了更多的解决方案;任何对将Linux定制于PDA、掌上机或者可移动设备感兴趣的人都可从因特网免费下载,并将其移值或开发。熟悉图形应用程序的用户可以很快就在该系统上编写自己的图形应用程序,在未来的嵌入式系统设计中,它的作用是无可限量的。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dwater/article/details/773302

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签