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 演示,您需要确保包含图形支持。
- 启动 Wind River Workbench 4:
- 启动 Workbench 并选择或创建工作区(例如 Windows 上的 C:\Users\YourName\vxworks_workspace)。
- 确保 Workbench 中已注册您的 VxWorks 7 安装(在 首选项 > Wind River > VxWorks 中检查)。
- 创建 VxWorks 源构建 (VSB) 项目:
- 在 Workbench 中,转到 文件 > 新建 > VxWorks 源构建项目。
- 命名项目(例如 vsb_graphics),并选择目标架构(例如 x86_64 或用于模拟器的 SIMNT)。
- 在配置向导中,包含以下组件:
- INCLUDE_FBDEV(帧缓冲驱动程序)
- INCLUDE_WINDML(如果您的 VxWorks 7 分发版中可用;否则可能需要手动移植旧版 WindML 库)
- INCLUDE_OPENGL 或 INCLUDE_OPENVG(作为现代图形支持的备用选项)。
- 右键单击项目并选择 构建项目,以构建 VSB 项目。这将为您的内核镜像生成库文件。
- 创建 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)或在线存档中获取。
- 定位演示源代码:
- 检查您的 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。
- 创建可下载内核模块 (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 库作为替代
- 构建 DKM:
右键单击项目并选择 构建项目。这将生成一个目标文件(例如 uglteapot_demo.out)。
在 VxWorks 模拟器上运行演示 #
为简单起见,我们将使用 VxWorks 模拟器 (vxsim) 测试演示。
- 启动模拟器:
- 在 Workbench 中,转到 运行 > 调试配置。
- 创建新的 VxWorks 模拟器连接:
- 选择您的 VIP 镜像(例如 vip_graphics/default/vxWorks)。
- 点击 应用 然后 调试 以启动模拟器。
- 模拟器控制台应显示 VxWorks 的启动过程。
- 加载并运行演示:
- 在模拟器控制台中,加载 DKM:
ld < uglteapot_demo.out
- 启动演示任务:
uglteapot
- 如果成功,将弹出一个图形窗口,显示旋转的茶壶。如果没有窗口出现,请确保模拟器已配置为支持图形输出(见下文故障排除)。
在目标硬件上运行 #
要在实际硬件上运行(例如带有显卡的 Intel x86 板卡):
- 为硬件配置 VIP:
- 更新 VIP 以匹配您的板卡支持包 (BSP),而不是模拟器。
- 重新构建 VIP 并将镜像传输到目标(例如通过 TFTP 或 USB)。
- 连接到目标:
- 使用 Workbench 的 目标管理器 通过目标服务器连接到板卡。
- 按模拟器步骤加载并运行 DKM。
- 验证输出:
- 将显示器连接到目标的图形输出端口。茶壶应在屏幕上渲染。
常见问题排查 #
- 图形窗口未出现:
- 确保内核中包含 INCLUDE_FBDEV 和图形驱动程序。
- 对于模拟器,验证主机支持图形输出(例如 Linux 上的 X11 或 Windows 上的兼容显示服务器)。
- 未找到 WindML:
- 如果 VxWorks 7 缺少原生 WindML 支持,可从旧版本移植库,或将演示改用 OpenGL ES(咨询 Wind River 支持以了解旧版兼容性)。
- 链接器错误:
- 检查库路径并确保链接所有依赖项(例如 ugl、ugluc)。使用 nm 或 objdump 检查 .out 文件,确保所有必需库都存在。
- 执行时崩溃:
- 如果因堆栈溢出而崩溃,可在 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 的支持资源。