4. 开发环境搭建

VxWorks 开发与通用 Linux 应用开发最大的区别在于:代码在宿主机上编写和编译,但运行在独立的目标机硬件上。因此,开发环境搭建的核心是建立一条从宿主机到目标机的完整链路——包括工具链、连接通道和调试通道。本章围绕 Workbench 安装配置、宿主机与目标机连接、交叉编译工具链以及串口/以太网/JTAG 三种调试通道展开,帮助读者搭建一套可用的 VxWorks 开发环境。

4.1 核心原理:宿主机—目标机开发模型

VxWorks 采用典型的交叉开发模型。宿主机(Host)通常是运行 Windows 或 Linux 的 PC,负责代码编辑、编译、下载和调试;目标机(Target)是运行 VxWorks 的嵌入式硬件,负责实时执行。两者之间通过物理通道连接,宿主机上的 Workbench 通过目标服务器(Target Server)与目标机上的 WDB(Wind Debug)代理通信,实现下载、启动、断点、变量查看等操作。

理解这一模型的关键在于区分三条链路:第一条是编译链路,由交叉编译工具链完成,把宿主机上的 C/C++ 源码编译为目标机 CPU 架构的可执行文件;第二条是连接链路,由串口、以太网或 JTAG 提供物理传输;第三条是调试链路,由 Target Server 和 WDB 协议在连接链路之上建立,承载调试命令与符号信息。三条链路各司其职,缺一不可。

VxWorks 宿主机—目标机开发链路 宿主机 Host (PC) Workbench IDE 编辑 / 工程管理 / 调试界面 Target Server WDB 协议代理 / 符号服务 交叉编译工具链 diab / gcc (target-triple) 调试通道接口 串口 COM / 以太网 NIC / JTAG USB 驱动与端口配置 目标机 Target (嵌入式板卡) VxWorks 内核 实时调度 / 任务管理 WDB Agent 调试代理 / 断点响应 应用程序 DKM / RTP 可执行模块 硬件接口 UART / Ethernet PHY / JTAG TAP Boot ROM / BSP 串口 (RS-232/USB) 以太网 (TCP/IP) JTAG (边界扫描) 生成目标代码 串口通道 以太网通道 JTAG 通道 三条链路:编译链路 → 连接链路 → 调试链路

4.2 Workbench 安装与配置要点

Workbench 是 Wind River 提供的 Eclipse 基础集成开发环境,安装前需确认版本与目标机 BSP 匹配。安装过程主要注意以下几点:

  • 版本匹配:Workbench 版本必须与 VxWorks 源码版本一致,例如 VxWorks 7 对应 Workbench 4.x,VxWorks 6.9 对应 Workbench 3.3。
  • 许可证配置:安装完成后需导入 license 文件,否则无法创建工程和编译。
  • 工具链注册:在 Preferences → Wind River → Build 中确认交叉编译器路径已正确注册。
  • 目标服务器配置:在 Target Manager 中新建目标连接,选择正确的连接方式(串口/以太网/JTAG)和参数。
Workbench 安装路径中不要包含中文或空格,否则可能导致工具链调用失败。建议安装在 C:\WindRiver 或 /opt/windriver 等纯英文路径下。

4.3 交叉编译工具链

交叉编译工具链是宿主机上生成目标机可执行代码的核心工具集。VxWorks 常用的工具链包括 Wind River 自带的 Diab 编译器和 GNU 工具链。工具链通常以目标三元组命名,例如 arm-wrs-vxworks-gcc、ppc-wrs-vxworks-gcc。

使用工具链时,需要关注以下参数:

# 查看工具链版本
arm-wrs-vxworks-gcc --version

# 典型编译命令
arm-wrs-vxworks-gcc -mcpu=cortex-a9 -mfloat-abi=hard \
  -I$WIND_HOME/vxworks-7/host/include \
  -c app.c -o app.o

# 链接生成 DKM 模块
arm-wrs-vxworks-ld -r app.o -o app.out

工具链配置的关键是确保头文件路径、库路径与目标机 BSP 一致。如果编译时出现 undefined reference 或头文件找不到,通常是 include 路径或库路径配置错误。

4.4 调试通道建立:串口、以太网与 JTAG

三种调试通道各有适用场景,选择时需根据目标机硬件资源和调试阶段决定。

通道 典型速率 适用阶段 优点 局限
串口 115200 bps BootROM 启动、早期调试 硬件简单、无需网络协议栈 速率低、不支持大文件下载
以太网 100/1000 Mbps 应用下载、日常调试 速率高、支持远程调试 需网络驱动和 IP 配置正确
JTAG 取决于适配器 BSP 移植、内核启动失败 不依赖目标机软件、可硬件级调试 需专用适配器、速率较低

串口通道建立时,需在 Workbench 中配置正确的 COM 端口和波特率,目标机 BootROM 通常默认输出到串口。以太网通道需要目标机已加载网络驱动并配置 IP,宿主机通过 ping 确认连通后,在 Target Server 中填写目标 IP。JTAG 通道需要安装对应的 JTAG 适配器驱动(如 Wind River ICE、Lauterbach),并在 Workbench 中配置扫描链。

JTAG 调试时目标机 CPU 会被暂停,若目标机运行的是实时控制任务,可能导致执行机构失控。在工业现场调试时,务必先断开执行机构或切换到安全状态。

4.5 案例:从零搭建一条以太网调试链路

假设目标机为 ARM Cortex-A9 板卡,已烧录 BootROM,需通过以太网建立调试链路。操作步骤如下:

  1. 用串口线连接宿主机与目标机,打开串口终端,确认 BootROM 启动信息正常输出。
  2. 在 BootROM 命令行中配置目标机 IP:ifconfig motetsec0 192.168.1.100。
  3. 宿主机执行 ping 192.168.1.100,确认网络连通。
  4. 在 Workbench 中新建 Target Server,选择 wdbrpc 协议,填写目标 IP 和端口 17185。
  5. 启动 Target Server,若连接成功,Workbench 会显示目标机内核符号和任务列表。
  6. 创建 DKM 工程,编译后通过 Target Server 下载到目标机,设置断点并运行。
# 宿主机验证连通性
ping 192.168.1.100

# 目标机 BootROM 网络配置示例
ifconfig motetsec0 192.168.1.100
hostAdd "host", "192.168.1.10"

# Target Server 启动日志片段
Target Server: wdbrpc
Target: 192.168.1.100:17185
Connected to WDB Agent version 2.0
Loading symbols from vxWorks... done

4.6 常见误区与复盘

  • 误区一:工具链版本与 BSP 不匹配。使用错误版本的编译器可能导致生成代码无法在目标机运行,表现为启动即异常。应严格使用 BSP 配套的工具链。
  • 误区二:以太网调试时目标机 IP 与宿主机不在同一网段。Target Server 无法连接,需检查子网掩码和网关配置。
  • 误区三:JTAG 扫描链配置错误。多核 CPU 需正确配置 TAP 链顺序,否则无法识别目标核。
  • 误区四:串口波特率不匹配。表现为乱码,需确认目标机 BootROM 和终端软件波特率一致。
搭建 VxWorks 开发环境的核心检查清单:Workbench 版本与 VxWorks 匹配、License 已导入、工具链路径已注册、目标机 IP 可 ping 通、Target Server 能连接、串口终端无乱码、JTAG 适配器驱动已安装。逐项确认后,开发环境即可稳定用于后续章节的工程开发与调试。