嵌入式系统第11讲

上传人:ji****72 文档编号:51450721 上传时间:2018-08-14 格式:PPT 页数:77 大小:3.62MB
返回 下载 相关 举报
嵌入式系统第11讲_第1页
第1页 / 共77页
嵌入式系统第11讲_第2页
第2页 / 共77页
嵌入式系统第11讲_第3页
第3页 / 共77页
嵌入式系统第11讲_第4页
第4页 / 共77页
嵌入式系统第11讲_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《嵌入式系统第11讲》由会员分享,可在线阅读,更多相关《嵌入式系统第11讲(77页珍藏版)》请在金锄头文库上搜索。

1、*生物医学工程学院电子技术系1第11讲 嵌入式系统图形界面*生物医学工程学院电子技术系2第11章 嵌入式系统图形界面n本章主要内容n嵌入式系统图形界面的相关知识和编程方法;*生物医学工程学院电子技术系3第11章 嵌入式系统图形界面 第11章 第1节 Linux图形开发基础*生物医学工程学院电子技术系411.1 Linux图形开发基础 Linux的GUI系统架构n依照X的逻辑,分为:X server(Display、Input)、Graphic Library、Toolkitss、Windows Manager、桌面环境、 Internationalization。X server:负责显示、传

2、递使用者输入事件。Graphic Library:绘图相关的函数库(画点、画线、画矩形、画圆形、 画不规则形、上色等)。Tookits:窗口的抽象组件(或称为构件。如:按钮、滚动条等),更 高层次的一组函数。Windows manager:负责窗口之间的沟通、协调(窗口切换、放大、缩 小等)桌面环境:提供一整图形界面下使用的程序(如浏览器、邮件客户端 、文件管理器、图形化桌面配置工具、桌面应用程序、办公软件等) 。主流产品:KDE、GNOME。Internationalization:*生物医学工程学院电子技术系511.1 Linux图形开发基础 11.1 Linux图形开发基础1. GUI的

3、一般架构n图形用户界面GUI(Graphics User Interface)是迄今为止计算机系统 中最为成熟的人机交互技术。一个好的图形用户界面的设计不仅要考 虑到具体硬件环境的限制,而且还要考虑到用户的喜好等。n由于图形用户界面的引入主要是从用户角度出发的,因此用户自身的 主观感受对图形用户界面的评价占了很大比重,比如,易用性、直观 性、友好性,等等。另外,从纯技术的角度看,仍然也会有一些标准 需要考虑,比如,跨平台性、对硬件的要求等。在嵌入式系统开发和 应用中,我们所考虑的问题主要集中在图形用户界面对硬件的要求, 以及对硬件类型的敏感性方面,在提供给用户的最终界面方面只是要 求简单实用就

4、够了。n虽然不同的GUI系统因为其使用场合或服务目的不同,具体实现互有 差异,但是总结起来,一般在逻辑上可以分为以下几个模块:底层I/O 设备驱动(显示设备驱动、鼠标驱动、键盘驱动等)、基本图形引擎 (画点、画线、区域填充)、消息驱动机制、高层图形引擎(画窗口 、画按钮),以及GUI应用程序接口(API)。 *生物医学工程学院电子技术系611.1 Linux图形开发基础 底层I/O设备驱动,例如,显示驱动、鼠标驱动、键盘驱动等构成 了GUI的硬件基础。由于此类设备的多样性,需要对其进行抽象, 并提供给上层一个统一的调用接口;而各类设备驱动则自成一体 ,形成一个GUI设备管理模块。当然,从操作系

5、统内核的角度看, GUI设备管理模块则是操作系统内核的I/O设备管理的一部分。 基本图形引擎模块完成一些基本的图形操作,如画点、画线、区域 填充等。它直接和底层I/O设备打交道,同时,多线程或者多进程 机制的引入也为基本图形模块的实现提供了很大的灵活性。 消息不仅是底层I/O硬件和GUI上层进行交互的基础,同时也是各类 GUI组件如窗口、按钮等相互作用的重要途径。一个GUI系统的消 息驱动机制的效率对该系统的性能,尤其是对响应速度等性能的 影响很大。 高级图形引擎模块则在消息传递机制和基本图形引擎的基础上完成 对诸如窗口、按钮等的管理。*生物医学工程学院电子技术系711.1 Linux图形开发

6、基础 GUI API则是提供给最终程序员的编程接口,使得他们能够利用 GUI体系所提供的GUI高级功能快速开发GUI应用程序。n另外,为了实现GUI系统,一般需要用到操作系统 内核提供的功能,如线程机制、进程管理。当然 ,不可避免地需要用到内存管理、I/O设备管理, 甚至还可能有文件管理。n从用户的观点来看,图形用户界面(GUI)是系统 的一个至关重要的方面:由于用户通过GUI与系统 进行交互,所以GUI应该易于使用并且非常可靠。 此外,它不能占用太多的内存,以便在内存受限 的微型嵌入式设备上无缝执行。由此可见,它应 该是轻量级的,并且能够快速装入。 *生物医学工程学院电子技术系811.1 L

7、inux图形开发基础n嵌入式GUI要求简单、直观、可靠、占用资源小且 反应快速,以适应系统硬件资源有限的条件。另 外,由于嵌入式系统硬件本身的特殊性,嵌入式 GUI应具备高度可移植性与可裁减性,以适应不同 的硬件条件和使用需求。总体来讲,嵌入式GUI具 备以下特点: 体积小; 运行时耗用系统资源小; 上层接口与硬件无关,高度可移植; 高可靠性; 在某些应用场合应具备实时性。*生物医学工程学院电子技术系911.1 Linux图形开发基础n一个能够移植到多种硬件平台上的嵌入式GUI系统 ,应至少抽象出两类设备:基于图形显示设备( 如VGA卡)的图形抽象层GAL(Graphic Abstract L

8、ayer)和基于输入设备(如键盘,触摸层等)的 输入抽象层IAL(Input Abstract Layer)。GAL层 完成系统对具体的显示硬件设备的操作,最大限 度地隐藏各种不同硬件的技术实现细节,为程序 开发人员提供统一的图形编程接口。IAL层则需要 实现对于各类不同输入设备的控制操作,提供统 一的调用接口,GAL层与IAL层设计概念的引入, 可以显著提高嵌入式GUI的可移植性*生物医学工程学院电子技术系1011.1 Linux图形开发基础嵌入式GUI底层支持库1X WindownX Window系统是目前类NUIX系统中处于统治地位的桌面 图形系统。由于X Window在体系结构上的原因

9、,限制了 其对游戏、多媒体的支持能力。另外,大型的应用程序, 如mozilla浏览器,在X Window上运行时的响应能力也不 能令人满意。当然,这里有Linux内核在进行调度上的问题 ,也有X Window本身的原因。nX Window为了满足对游戏、多媒体等应用对图形加速能 力的要求,提供了直接图形访问扩展,通过该扩展,应用 程序可以在全屏模式下直接访问显示卡的帧缓冲区,并能 够提供对某此加速功能的支持。*生物医学工程学院电子技术系1111.1 Linux图形开发基础2FrameBuffernFrameBuffer是出现在2.2.xx内核中的一种驱动程序接口。 由于Linux工作在保护模式

10、,所以用户态进程无法像DOS那 样使用显卡BIOS里提供的中断调用来实现直接写屏, Linux抽象出FrameBuffer这个设备来供用户态进程实现直 接写屏。在使用Framebuffer时,Linux是将显卡置于图形 模式下的。Framebuffer就是模仿显卡的功能,相当于抽象 的显卡硬件结构,实现了通过Framebuffer的读写直接对显 存进行操作。用户可以将Framebuffer看成是显示内存的一 个映像,将其映射到进程地址空间之后,就可以直接进行 读写操作,而写操作可以立即反映在屏幕上。这种操作是 抽象的、统一的。用户不必关心物理显存的位置、换页机 制等具体细节,因为这些都是由Fr

11、amebuffer设备驱动来完 成的。*生物医学工程学院电子技术系1211.1 Linux图形开发基础nFrameBuffer设备还提供了若干ioctl命令,通过这些命令,可以获得显 示设备的一些固定信息(例如显示内存大小)、与显示模式相关的可 变信息(例如,分辨率、像素结构、每扫描线的字节宽度),以及伪 彩色模式下的调色板信息等。n通过FrameBuffer,还可以获得当前内核所支持的加速显示卡的类型( 通过固定信息得到),这种类型通常是和特定显示芯片相关的。例如 ,目前最新的内核(2.4.9)中,就包含有对S3、Matrox、nVidia、 3Dfx等流行显示芯片的加速支持。在获得了加速芯

12、片类型之后,应用 程序可以将PCI设备的内存I/O(memio)映射到进程的地址空间。这 些memio一般是用来控制显示卡的寄存器,通过对这些寄存器的操作 ,应用程序可以控制特定显卡的加速功能。n由于Framebuffer只是一个提供显示内存和显示芯片寄存器从物理内存 映射到进程地址空间中的设备。所以,对于应用程序而言,如果希望 在FrameBuffer之上进行图形编程,还需要自己动手完成其他许多工作 。*生物医学工程学院电子技术系1311.1 Linux图形开发基础3SVGALibnSVGALib是Linux系统中最早出现的非X图形 支持库,是Linux下的VGA驱动函数库。虽 然它的品质有

13、点低,支援显卡种类也不多, 但是有许多的游戏及程序都是用它来做开发 ,可以算是非官方的标准了。这个库从最初 对标准VGA兼容芯片的支持开始,已经发展 到对老式SVGA芯片,以及现今流行的高级 视频芯片的支持。它为用户提供了在控制台 上进行图形编程的接口,使用户可以在PC 兼容系统上方便地获得图形支持。但该系统 也存在一些不足:*生物医学工程学院电子技术系1411.1 Linux图形开发基础 SVGALib从最初的vgalib发展而来,保留了老 系统的许多接口,而这些接口却不能良好地适 应新显示芯片的图形能力。 未能较好地隐藏硬件细节。许多操作,不能自 动使用显示芯片的加速能力支持。 可移植性差

14、。SVGALib目前只能运行在x86平台 上,除Alpha平台,对其他平台的支持能力较差 。 SVGALib作为一个老的图形支持库,目前的应 用范围越来越小,尤其在Linux内核增加了 FrameBuffer驱动支持之后,有逐渐被其他图形 库替代的趋势。*生物医学工程学院电子技术系1511.1 Linux图形开发基础4LibGGInLibGGI是一个跨平台的绘图库,可以建立一个一 般性的图形接口,这个抽象接口连同相关的输入 (鼠标、键盘、游戏杆等)接口一起,可以方便 地运行在X Window、SVGALib、FrameBuffer等 之上。建立在LibGGI之上的应用程序,不经重新 编译,就可

15、以在上述这些底层图形接口上运行。n在Linux上,LibGGI是通过调用FrameBuffer或 SVGALib来完成图形操作的,可能速度比较慢。但 在某些不支持FrameBuffer或vga的系统上,采用 LibGGI仍然是一种不错的选择。 *生物医学工程学院电子技术系1611.1 Linux图形开发基础嵌入式GUI高级函数库1Xlib及其他相关函数库n在X Window系统中进行图形编程时,可以选择直接使用 Xlib。Xlib实际上是对底层 X 协议的封装,可通过该函数 库进行一般的图形输出。如果用户的X Server支持DGA, 则可以通过DGA扩展直接访问显示设备,从而获得加速支 持。

16、2SDL(Simple DirectMedia Layer)nSDL是一个跨平台的多媒体游戏支持库。其中包含了对图 形、声音、游戏杆、线程等的支持,目前可以运行在许多 平台上。SDL支持图形的功能强大,高级图形处理能力尤 为突出,可以实现Alpha混合、透明处理、YUV覆盖、 Gamma校正等。在SDL环境中能够非常方便地加载支持 OpenGL的Mesa库,从而提供对二维和三维图形的支持。*生物医学工程学院电子技术系1711.1 Linux图形开发基础3AllegronAllegro是一个专门为x86平台设计的游戏图形库。最初的Allegro运行 在DOS环境下,目前也可运行在Linux FrameBuffe控制台、Linux SVGALib、X Window等系统上。Allegro提供了丰富的图形功能,包 括矩形填充和样条曲线生成等,而且具有较好的三维图形显示能力。 由于Allegro的许多关键代码是采用汇编编写的,所以该函数库具有运 行速度快、占用资源少的特点。4Mesa3DnMesa3D是一

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号