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 协议在连接链路之上建立,承载调试命令与符号信息。三条链路各司其职,缺一不可。
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)和参数。
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 中配置扫描链。
4.5 案例:从零搭建一条以太网调试链路
假设目标机为 ARM Cortex-A9 板卡,已烧录 BootROM,需通过以太网建立调试链路。操作步骤如下:
- 用串口线连接宿主机与目标机,打开串口终端,确认 BootROM 启动信息正常输出。
- 在 BootROM 命令行中配置目标机 IP:
ifconfig motetsec0 192.168.1.100。 - 宿主机执行
ping 192.168.1.100,确认网络连通。 - 在 Workbench 中新建 Target Server,选择
wdbrpc协议,填写目标 IP 和端口17185。 - 启动 Target Server,若连接成功,Workbench 会显示目标机内核符号和任务列表。
- 创建 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 和终端软件波特率一致。