跳过正文

在 VxWorks 7 上运行 WindML 图形演示:详细指南

WindML VxWorks 7 OpenGL Workbench 4
目录
APP - 这篇文章属于一个选集。
§ 12: 本文

VxWorks 是由 Wind River Systems 开发的一款领先的实时操作系统(RTOS),广泛应用于需要确定性性能的嵌入式系统中。随着 VxWorks 7 的发布,该操作系统经过重新设计,注重模块化、可扩展性和对现代硬件的支持,包括先进的图形功能。虽然 WindML(早期 VxWorks 版本如 5.x 和 6.x 中常见的图形库)在 VxWorks 7 中已被 OpenGL ES 和 OpenVG 等现代标准所取代,但在适当的配置下仍可运行基于 WindML 的图形演示。本文提供了在 VxWorks 7 上运行 WindML 图形演示(具体为经典的 uglteapot 演示)的分步指南,利用其向后兼容性和 Wind River Workbench 4 等开发工具。

前提条件
#

在开始之前,请确保具备以下条件:

  • VxWorks 7 安装:在您的主机(Windows 或 Linux)上安装了许可的 VxWorks 7。
  • Wind River Workbench 4:基于 Eclipse 的 VxWorks 7 开发 IDE。
  • 目标硬件或模拟器:支持图形硬件的目标板(例如 Intel x86 或基于 ARM 的板卡)或用于测试的 VxWorks 模拟器 (vxsim)。
  • WindML 源文件:访问 WindML 演示源代码(例如 uglteapot.c)和库,通常可在旧版 VxWorks 分发包或存档文档中找到。
  • 图形支持:确保 VxWorks 7 镜像包括图形组件(例如帧缓冲驱动程序、OpenVG 或移植的旧版 WindML 支持)。
  • 开发环境:配置好的 VxWorks 源构建 (VSB) 和 VxWorks 镜像项目 (VIP),包含必要的图形库。

设置 VxWorks 7 环境
#

VxWorks 7 使用分层构建系统(VSB 和 VIP 项目)来创建自定义内核镜像。要运行 WindML 演示,您需要确保包含图形支持。

  1. 启动 Wind River Workbench 4:
  • 启动 Workbench 并选择或创建工作区(例如 Windows 上的 C:\Users\YourName\vxworks_workspace)。
  • 确保 Workbench 中已注册您的 VxWorks 7 安装(在 首选项 > Wind River > VxWorks 中检查)。
  1. 创建 VxWorks 源构建 (VSB) 项目:
  • 在 Workbench 中,转到 文件 > 新建 > VxWorks 源构建项目。
  • 命名项目(例如 vsb_graphics),并选择目标架构(例如 x86_64 或用于模拟器的 SIMNT)。
  • 在配置向导中,包含以下组件:
    • INCLUDE_FBDEV(帧缓冲驱动程序)
    • INCLUDE_WINDML(如果您的 VxWorks 7 分发版中可用;否则可能需要手动移植旧版 WindML 库)
    • INCLUDE_OPENGL 或 INCLUDE_OPENVG(作为现代图形支持的备用选项)。
  • 右键单击项目并选择 构建项目,以构建 VSB 项目。这将为您的内核镜像生成库文件。
  1. 创建 VxWorks 镜像项目 (VIP):
  • 转到 文件 > 新建 > VxWorks 镜像项目。
  • 命名项目(例如 vip_graphics),并将其链接到您的 vsb_graphics 项目。
  • 配置内核:
    • 打开内核配置编辑器(双击 VIP 项目中的 kernel_config.c)。
    • 确认启用了图形组件(例如 INCLUDE_FBDEV、INCLUDE_WINDML)。
    • 如果使用模拟器,添加 INCLUDE_VXSIM。
  • 构建 VIP 项目以生成可启动的 VxWorks 镜像(例如 default 目录中的 vxWorks)。

获取并准备 WindML 演示
#

uglteapot 演示是一个经典的 WindML 示例,展示了一个旋转的茶壶。由于 WindML 是旧技术,您可能需要从旧版 VxWorks 安装(例如 VxWorks 6.x)或在线存档中获取。

  1. 定位演示源代码:
  • 检查您的 VxWorks 安装目录(例如 <VxWorks_Install_Dir>/vxworks-7/target/src/Mesa/windmldemos)。
  • 如果找不到,可查阅 Wind River 文档或论坛获取 uglteapot.c。或者,如果无法找到,使用以下最小示例:
#include <ugl/ugl.h>
#include <ugl/ugluc.h>
void windMLTeapot(UGL_BOOL animate, int argc, char *argv[]) {
    UGL_ID gc = uglGcCreate(UGL_DEFAULT_DISPLAY);
    uglGcClear(gc, 0, 0, 640, 480, UGL_RGB(255, 255, 255));
    uglTeapot(gc, 200, 200, 100, animate);
    uglGcDestroy(gc);
}
void uglteapot(void) {
    taskSpawn("tTeapot", 210, VX_FP_TASK, 100000, (FUNCPTR)windMLTeapot, UGL_TRUE, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
  • 将其保存为 uglteapot.c。
  1. 创建可下载内核模块 (DKM) 项目:
  • 在 Workbench 中,转到 文件 > 新建 > VxWorks 可下载内核模块项目。
  • 命名项目(例如 uglteapot_demo),并将其链接到您的 vsb_graphics 项目。
  • 将 uglteapot.c 添加到项目中,可通过拖放到项目资源管理器或使用 导入 > 文件系统。
  • 修改构建设置:
    • 右键单击项目,选择 属性 > 构建属性。
    • 在 ‘Paths’ 下,添加 WindML 头文件的包含路径(例如 <VxWorks_Install_Dir>/vxworks-7/target/h/ugl)。
    • 在 ‘Libraries’ 下,添加 WindML 库(例如 libwindml.a),如果可用,或者链接到 Mesa/OpenGL 库作为替代
  1. 构建 DKM:

右键单击项目并选择 构建项目。这将生成一个目标文件(例如 uglteapot_demo.out)。

在 VxWorks 模拟器上运行演示
#

为简单起见,我们将使用 VxWorks 模拟器 (vxsim) 测试演示。

  1. 启动模拟器:
  • 在 Workbench 中,转到 运行 > 调试配置。
  • 创建新的 VxWorks 模拟器连接:
    • 选择您的 VIP 镜像(例如 vip_graphics/default/vxWorks)。
    • 点击 应用 然后 调试 以启动模拟器。
  • 模拟器控制台应显示 VxWorks 的启动过程。
  1. 加载并运行演示:
  • 在模拟器控制台中,加载 DKM:
ld < uglteapot_demo.out
  • 启动演示任务:
uglteapot
  • 如果成功,将弹出一个图形窗口,显示旋转的茶壶。如果没有窗口出现,请确保模拟器已配置为支持图形输出(见下文故障排除)。

在目标硬件上运行
#

要在实际硬件上运行(例如带有显卡的 Intel x86 板卡):

  1. 为硬件配置 VIP:
  • 更新 VIP 以匹配您的板卡支持包 (BSP),而不是模拟器。
  • 重新构建 VIP 并将镜像传输到目标(例如通过 TFTP 或 USB)。
  1. 连接到目标:
  • 使用 Workbench 的 目标管理器 通过目标服务器连接到板卡。
  • 按模拟器步骤加载并运行 DKM。
  1. 验证输出:
  • 将显示器连接到目标的图形输出端口。茶壶应在屏幕上渲染。

常见问题排查
#

  1. 图形窗口未出现:
  • 确保内核中包含 INCLUDE_FBDEV 和图形驱动程序。
  • 对于模拟器,验证主机支持图形输出(例如 Linux 上的 X11 或 Windows 上的兼容显示服务器)。
  1. 未找到 WindML:
  • 如果 VxWorks 7 缺少原生 WindML 支持,可从旧版本移植库,或将演示改用 OpenGL ES(咨询 Wind River 支持以了解旧版兼容性)。
  1. 链接器错误:
  • 检查库路径并确保链接所有依赖项(例如 ugl、ugluc)。使用 nm 或 objdump 检查 .out 文件,确保所有必需库都存在。
  1. 执行时崩溃:
  • 如果因堆栈溢出而崩溃,可在 taskSpawn 中增加任务堆栈大小(例如从 100000 增加到 200000)。

VxWorks 7 中的现代替代方案
#

虽然像 uglteapot 这样的 WindML 演示具有教育意义,但 VxWorks 7 鼓励使用现代图形 API:

  • OpenGL ES:硬件加速的 3D 图形。
  • OpenVG:用于 2D 界面的矢量图形。
  • Tilcon UI:用于高级 GUI 的商业 UI 框架。

要将 uglteapot 适配为 OpenGL ES,可将 WindML 调用替换为 OpenGL 等效项(例如 glClear、glRotatef),但这需要更广泛的代码更改。

结论
#

在 VxWorks 7 上运行 WindML 图形演示是将旧代码与现代 RTOS 环境结合的过程。通过仔细配置 VSB 和 VIP 项目,将演示集成到 DKM 中,并在模拟器或硬件上测试,您可以成功可视化teapot演示。这一过程不仅展示了 VxWorks 7 的灵活性,还将其历史功能与现代图形标准连接起来。如需进一步帮助,请查阅 VxWorks 7 文档或 Wind River 的支持资源。

APP - 这篇文章属于一个选集。
§ 12: 本文

相关文章

VxWorks 7开发用户指南
VxWorks 7
在Arm Cortex-R82上运行VxWorks
VxWorks Arm Cortex R82
在 VxWorks 上运行 Qt:嵌入式开发的强强联合
VxWorks QT