跳过正文

VxWorks下WindML相关知识和图形设备驱动程序开发

·955 字·5 分钟
VxWorks WindML SDK DDK 嵌入式GUI 多媒体库 Tornado 图形驱动 配置工具
目录

VxWorks WindML 完整指南:结构、配置与命令行定制

1 介绍
#

WindML(Wind Media Library,媒体库)支持多媒体程序运行于嵌入式操作系统。风河公司设计它主要是用来提供基本的图形、视频和音频技术,并提供一个设计标准设备驱动程序的框架。

WindML API 库提供了一个统一的图形硬件接口,以及处理输入设备和输入设备事件的能力。WindML 有以下几个设计目的:

  • 简单:提供一个灵活的图形原语集、基本的视频和音频功能;
  • 硬件便宜:可以在多种 CPU 体系结构上使用;
  • 操作系统便宜:可以在多种 RTOS 系统上使用;
  • 驱动程序开发容易:提供给开发者一个定制设备驱动程序的机制。

2 WindML 结构
#

WindML 包括两个组件——软件开发包(SDK)驱动程序开发包(DDK)

  • SDK 组件用来开发应用程序,它提供了一个全面的 API 集,包括图形、输入处理、多媒体、字体和内存管理。
  • DDK 组件用来实现驱动程序,它提供了一个完整的驱动程序参考集,包括硬件配置和 API 集,使开发者能够迅速引导和使用自己的驱动程序。

WindML 的结构可概括为如图 1-1 所示:

图 1-1 WindML 结构

VxWorks WindML SDK

2.1 SDK
#

这一层定义了应用程序代码和硬件驱动程序的接口,因此应用程序可以独立于硬件进行开发。

SDK 提供了下列 API 集:

  • 图形芯片的初始化程序
  • 多媒体 API,包括:
    • 2D 图形
    • 区域管理
    • 窗口
    • 颜色管理
    • 视频支持
    • JPEG 支持
    • 音频
  • 事件服务
  • 内存管理
  • 扩展 API
  • 设备管理

2.2 DDK
#

DDK 是处于 SDK 和硬件之间的中间层,它直接与应用程序目标硬件设备接口,包括监视器、视频、音频、键盘和指示设备等。

对于大多数 SDK API 都有相关的驱动程序级结构和 API。例如,SDK 原语 uglRectangle() 用来绘制矩形到显示设备,它访问一个包含 rectangle 域的驱动程序结构,该域就是执行绘制矩形操作的函数指针。

WindML 中定义了下列驱动程序种类:

  • graphics(图形)
    包含分配颜色的函数指针和变量、执行 drawing 操作、内存分配和覆盖页管理。如 VGA、BIOS、MediaGx 和 IGS 图形驱动程序。

  • video(视频)
    作为扩展功能,用来实现图形驱动(在驱动程序结构的扩展部分分配空间)。实现视频启动、停止和流操作等功能,例如 IGS 视频扩展。

  • fonts(字体)
    包含字体大小和绘制操作的函数指针和变量,使用图形驱动程序来显示信息。如 BMF 和 AGFA 字体引擎。

  • input(输入设备)
    包含获得和格式化输入信息的函数指针和变量。如键盘、指示和触摸屏驱动程序。

  • audio(音频)
    音频并不是一个真正的设备驱动程序,但可以通过调用 open()close()ioctl() 来实现。

下面几章将详细介绍这些驱动程序的创建和操作。

第二章 WindML 配置
#

2.1 介绍
#

在第一次使用前,必须首先配置和编译好 WindML 库。WindML 配置包括:

  • 输出驱动程序的选择和硬件设置;
  • 输入驱动程序的选择和硬件设置(指示、键盘或触摸屏);
  • 音频驱动程序的选择和硬件设置;
  • 应用程序使用的字体。

除了这些配置需求外,WindML 还可以定制成支持特殊的应用环境,可定制部分包括内存管理和定制硬件。配置好后,WindML 库必须编译并连接到应用程序或连接到 VxWorks Image。

有两种方法来配置 WindML:

  1. 使用 WindML 配置工具(Tornado → Tools → WindML 菜单选项),这是配置 WindML 和相关驱动程序的主要方法。
  2. 通过直接编辑配置头和源文件(命令行方法),实现配置工具无法完成的定制。

根据目标程序所需要的 WindML 内容来决定使用的配置方法。WindML 标准配置包含一个图形设备、一个键盘设备和一个指示设备。配置工具允许配置这个标准设备集;如果要使用多个设备,需要直接修改配置文件。

一旦 WindML 配置好,就可以使用 Tornado 工程将 WindML 添加到 VxWorks Image。

2.1.1 配置方法比较
#

表 2-1 总结了这两种配置方法。对第一次安装和配置,推荐使用配置工具。

表 2-1 配置方法比较

VxWorks WindML configuration

2.2 基本配置
#

基本配置意味着使用标准的 WindML 配置。标准配置使用 WindML 提供的支持驱动程序,包括:

  • 一个单一的图形设备
  • 一个指示设备
  • 一个键盘设备
  • 一个音频设备
  • 一个支持的字体引擎
  • 缺省的内存管理器

如果要使用不被支持的硬件或不同于下列所列的配置,就必须做非标准配置。

如果使用配置工具定义 WindML 配置,配置工具在 build 过程中产生的文件用于编译和连接 WindML。如果不使用配置工具,必须编辑文件 target/src/ugl/config/uglInit.h

2.2.1 配置图形设备
#

要配置一个图形设备,必须设置下列基本配置选项:

  • 图形设备类型(如 MediaGx)
  • 显示分辨率
  • 帧缓冲颜色深度(如 4、8 或 16 位)
  • 显示器的刷新率
  • 输出设备类型(CRT 或平板显示器)

可裁剪的图形驱动功能(取决于硬件设备):

  • software cursors
  • overlay surfaces
  • video
  • JPEG
  • alpha blending
  • double buffers

这些功能都是可裁剪的。

2.2.2 配置键盘设备
#

要配置键盘设备,设置下列配置选项:

  • 键盘设备类型
  • 设备名

缺省的设备名是 /keyboard/0

2.2.3 配置指示设备
#

要配置指示设备,设置下列选项:

  • 指示设备类型
  • 设备名

缺省的指示设备名取决于设备类型:

  • PS2:/mouse/0
  • 串口设备指示器:/tyCo/0
  • 触摸屏设备:/touchscreen/0

2.2.4 配置字体
#

必须配置字体引擎来显示文本。WindML 提供的字体引擎是 bitmap(位图)字体引擎,其他可用的字体引擎来自第三方。通常需要:

  • 选择要使用的字体
  • 选择字体引擎类型配置选项

如果从命令行配置,必须修改字体引擎文件(位于 target/src/ugl/config 目录)来定义要包含的字体和字体引擎特性。文件名格式为 uglFontengineCfg.c(Fontengine 指字体引擎名)。例如,对于位图字体引擎,文件名为 uglBmfCfg.c

2.2.5 配置音频
#

要配置音频,定义下列选项:

  • 音频设备类型
  • 音频通道

2.2.6 混杂配置项
#

下列配置项目可以配置给 WindML:

  • Event Queue Size(事件队列大小)
    确定 WindML 应用程序中事件数,缺省大小是 100 个事件。

  • Memory Manager(内存管理器)
    WindML 可以使用专有内存池,也可以使用 VxWorks 系统内存池。当指定使用专有内存池时,所有内存分配都来自专有内存池;当指定使用 VxWorks 系统内存池时,所有内存分配都来自系统内存池。

  • Special Processor Requirements(特殊处理器需要)
    有的处理器类型有特殊需要。例如 PowerPC 有两个内存模型:PowerPC Reference Platform (PreP) 和 Common Hardware Reference Platform (CHRP)。配置 PowerPC 时必须定义正确的内存模型。

2.3 使用配置工具
#

在 Windows 操作系统中,从 Tornado 菜单中选择 Tornado → Tools → WindML,初始配置窗口如图 2-1 所示。

图 2-1 Configurator on a Windows Host

VxWorks WindML configuration

2.3.1 定义一个新的配置
#

  1. Configuration File 域中输入一个配置名。
  2. 在处理器列表中选择一个处理器类型。选择后,配置域会出现只适用于该处理器的选项。
  3. 选择 Graphics 配置页并设置:
    • graphics device
    • output device type
    • color depth
    • resolution
    • refresh rate
    • optional components
  4. 选择 Input 配置页并设置:
    • Pointer 设备类型和设备名
    • Keyboard 设备类型和设备名
  5. 从所安装的字体引擎集中选择要使用的字体引擎。
    对于 UGL Bitmap font engine,选择:
    • 是否使用 Unicode 字体
    • 字体 cache 的大小
    • 应用程序要使用的字体
  6. Audio 配置页选择:
    • 音频硬件类型
    • 音频设备名
    • 使用硬件上的通道号
  7. Miscellaneous 配置页选择:
    • Build 选项(如 building with debug symbols 和要建立的库)
    • 是否使用专用 WindML 内存池(如果使用,设置内存池大小)

配置完成后,按 Save 按钮存储这个配置。

2.3.2 建立 WindML 库
#

建立 WindML 前,选择 Miscellaneous 页并选择下列选项之一:

  • Build VxWorks archive
    使 objCpuToolvx 目录中的 WindML 对象重新建立并加入到 libCpuToolvx.a 文档中,该文档用来建立 VxWorks Image。

  • Build WindML archive
    使 objCpuToolUgl 目录中的 WindML 对象重新建立并加入到 libCpuToolUgl.a 文档中,这是一个只包含 WindML 对象的独立文档。

  • Build WindML object
    使 objCpuToolUgl 目录中的 WindML 对象建立。所有在配置工具中配置的 SDK 对象、设备驱动程序和字体引擎都会被建立在可下载的目标程序 lib/CpuTool.o 中。

  • Build Example Programs
    执行与 Build WindML archive 同样的操作。

选择好 build 选项后,点击 Build 按钮即可建立 WindML 库。

2.3.3 清除 WindML 目标文件
#

点击 Clean 按钮可清除所选择的目标。例如:

  • 如果选择 Build Example ProgramsobjCpuToolUgl 中的目标会随着 libCpuToolUgl.a 一起被清除。
  • 如果选择 Build VxWorks archive,所有来自 objCpuToolvx 目录的 WindML 目标会被清除,但 libCpuToolvx.a 文件中的 WindML 目标不会被清除。

2.4 命令行配置
#

一般来说,不推荐使用命令行配置。如果要使用不止一个图形设备、指示设备或键盘,则需要修改源文件,利用命令行进行 WindML 配置。

至少需要修改 uglInit.h 和所选择的字体引擎相关字体配置文件。在有些情况下也需要修改 uglInit.c 文件。这两个文件都位于 target/src/ugl/config 目录下。

  • uglInit.h:指定 WindML 的基本配置。
  • uglInit.c:控制 WindML 库的初始化,包含函数 uglInitialize()uglDeinitialize()。提供了处理标准 WindML 系统的函数(一个图形设备、一个键盘、一个指示器、一个字体引擎和一个音频设备)。通常修改此文件的唯一原因是处理多个设备。

2.4.1 编辑 uglInit.h 文件
#

uglInit.h 文件允许选择配置包括图形、键盘、指示器和音频、字体引擎、内存管理器以及 miscellaneous 目标/处理器项目。文件被分成以下几个部分:

  • 设备驱动程序选择
  • 字体引擎选择
  • 输入设备配置
  • 图形设备配置
  • 音频设备配置
  • 字体引擎配置
  • 内存管理器配置
  • Miscellaneous target/processor 配置

选择设备驱动程序

文件第一部分是选择要使用的设备驱动程序。每个支持的设备驱动程序通过 INCLUDE_* 来标记。要选择指定的设备驱动程序,定义(#define)相关 INCLUDE_*,而将相关子部分其他的 INCLUDE_* 设为 undefined

示例:

/* Specify the graphics device to use (Select 1) */
#undef INCLUDE_BIOS_GRAPHICS
#undef INCLUDE_CHIPS_GRAPHICS
#undef INCLUDE_CUSTOM_GRAPHICS /* User defined graphics device */
#undef INCLUDE_IGS_GRAPHICS
#undef INCLUDE_MEDIAGX_GRAPHICS
#undef INCLUDE_SA11XX_GRAPHICS
#undef INCLUDE_SIMULATOR_GRAPHICS
#undef INCLUDE_Q2SD_GRAPHICS
#undef INCLUDE_M821_GRAPHICS
#define INCLUDE_VGA_GRAPHICS

/* Specify the keyboard type (Select 1) */
#define INCLUDE_PC_AT_KEYBOARD /* Standard PC AT style */
#undef INCLUDE_CUSTOM_KEYBOARD /* User defined keyboard device */
#undef INCLUDE_SIMULATOR_KEYBOARD /* Simulator keyboard device */

/* Specify the type of pointer device (Select 1) */
#undef INCLUDE_ASSABET_POINTER /* Assabet touchscreen */
#undef INCLUDE_CUSTOM_POINTER /* User defined pointer device */
#undef INCLUDE_MS_POINTER /* Microsoft serial mouse */
#define INCLUDE_PS2_POINTER /* PS-2 type mouse */
#undef INCLUDE_SIMULATOR_POINTER /* Simulator pointer device */

/* Specify the audio hardware device (Select 1) */
#undef INCLUDE_IGS_AUDIO
#undef INCLUDE_CUSTOM_AUDIO /* User defined audio device */

在此示例中,配置包括 VGA 图形设备、标准 PC AT 型键盘、PS-2 鼠标和无音频设备。

选择字体引擎

/* Specify the font engine (Select 1) */
#define INCLUDE_BMF_FONTS

此示例使用位图字体引擎。

配置输入设备

WindML 支持两种输入设备类型:键盘和指示器设备(鼠标、跟踪球、触摸屏、光笔等)。

VxWorks WindML Device Name

缺省设备名可通过添加相关宏来改变。例如,要改变串口鼠标名为 /tyCo/1,在 uglInit.h 中添加下列行(放在 #include <ugl/config/uglDepend.h> 前面):

#define SYS_POINTER_NAME "/tyCo/1"
#include <ugl/config/uglDepend.h>

可定义键盘映射类型:

/* Specify the keyboard key mapping (Select 1) */
#define INCLUDE_KMAP_ENGLISH_US
#undef INCLUDE_KMAP_ENGLISH_UK
#undef INCLUDE_KMAP_GERMAN
#undef INCLUDE_KMAP_ITALIAN
#undef INCLUDE_KMAP_FRENCH
#undef INCLUDE_KMAP_SWEDISH
#undef INCLUDE_KMAP_NONE

配置图形设备

图形配置包括分辨率、刷新率、帧缓冲格式和可选图形设备组件。

示例:

/*
 * Specify characteristics of the display
 */
#define UGL_DISPLAY_WIDTH 800
#define UGL_DISPLAY_HEIGHT 600
#define UGL_REFRESH_RATE 60

/*
 * When using a flat panel, select the flat panel type
 * (Defaults to a CRT monitor)
 */
#undef INCLUDE_UGL_KYOCERA_KCS057QV1AA /* Passive, 320x240x8 */
#undef INCLUDE_UGL_SHARP_LM9V385 /* Dual panel passive, 640x480x8 */
#undef INCLUDE_UGL_SHARP_LQ039Q2DS01 /* TFT, 320x240x(8 or 16) */

/*
 * Specify the frame buffer format (Select 1)
 */
#undef INCLUDE_UGL_MONO
#undef INCLUDE_UGL_GREYSCALE2
#undef INCLUDE_UGL_GRAYSCALE4
#undef INCLUDE_UGL_GRAYSCALE8
#undef INCLUDE_UGL_INDEXED4
#define INCLUDE_UGL_INDEXED8
#undef INCLUDE_UGL_ARGB4444
#undef INCLUDE_UGL_RGB565
#undef INCLUDE_UGL_ARGB8888

/*
 * Select graphics driver optional components
 */
#undef INCLUDE_UGL_ALPHA /* Alpha blending */
#undef INCLUDE_UGL_DOUBLE_BUFFERING /* Double buffering */
#define INCLUDE_UGL_JPEG /* JPEG extension */
#undef INCLUDE_UGL_OVERLAY /* Video overlay support */
#define INCLUDE_UGL_SW_CURSOR /* Software cursor */
#undef INCLUDE_UGL_VIDEO /* Video extension */

上述配置表示:

  • 800×600 分辨率
  • 刷新率 60Hz
  • 使用 CRT 显示器
  • 帧缓冲格式为每像素 8 位
  • 包含 JPEG 扩展
  • 包含软件光标

配置字体引擎

主要的字体配置机制是 uglFontengineCfg.c 文件。例如,配置位图字体引擎时,需要在 uglInit.h 中添加相关定义:

/* Size of cache */
#define BMF_FONT_GLYPH_CACHE_SIZE UGL_BMF_GLYPH_CACHE_SIZE_MAX

/* Memory pool to use for glyph cache */
#define BMF_FONT_GLYPH_CACHE_MEM_POOL UGL_DEFAULT_MEM_POOL_ID

/* Include Unicode fonts */
#define INCLUDE_UGL_BMF_UNICODE

2.4.2 编辑字体配置文件
#

要选择指定的字体,编辑 uglFontengineCfg.c 文件。

配置位图字体引擎

位图配置文件 uglBmfCfg.c 包含一个数据结构,用来定义应用程序使用的字体:

extern const UGL_BMF_FONT_DESC uglBMFFont_Lucida_Sans_12;
extern const UGL_BMF_FONT_DESC uglBMFFont_Helvetica_Bold_12;
extern const UGL_BMF_FONT_DESC uglBMFFont_Lucida_Sans_8;
extern const UGL_BMF_FONT_DESC uglBMFFont_Courier_12;

const UGL_BMF_FONT_DESC * uglBMFFontData[] =
{
    &uglBMFFont_Lucida_Sans_12,
    &uglBMFFont_Helvetica_Bold_12,
    &uglBMFFont_Lucida_Sans_8,
    &uglBMFFont_Courier_12,
    NULL
};

修改 uglBMFFontData 数据结构,使其包含 WindML 应用程序所需的位图字体。同时需要将字体放到该数据结构中,外部引用字体必须添加到外部引用列表。

例如,要添加间距 18 的 Courier Bold Oblique 字体,添加以下外部引用:

extern const UGL_BMF_FONT_DESC uglBMFFont_Courier_Bold_Oblique_18;

然后添加到数据结构中:

&uglBMFFont_Courier_Bold_Oblique_18,

目录 target/src/ugl/fonts/bmf 包含 WindML 发布可用的字体。如果需要其他字体,需要添加到该目录。

相关文章

VxWorks 6.8 安装配置 Qt 4.8.3 详细教程
·617 字·3 分钟
VxWorks Qt 嵌入式开发 VxWorks 6.8 Qt 4.8.3 Vxsim WindML 交叉编译 嵌入式GUI
Synergy Microsystems VxWorks BSP Guide for PowerPC CPU Boards
·1247 字·6 分钟
VxWorks Powerpc Board Support Package BSP Tornado Embedded Systems VMEbus CompactPCI Real-Time-Operating-System
Debugging VxWorks Semaphores
·459 字·3 分钟
VxWorks Semaphores WindRiver