2、VxWorks开发环境搭建:Workbench安装、目标机与宿主机连接、工程创建、编译与下载运行的基本流程
VxWorks实时操作系统的开发模式与通用嵌入式Linux开发有显著差异,其核心在于“宿主机-目标机”的交叉开发架构。宿主机(Host)运行Wind River Workbench集成开发环境,负责代码编辑、交叉编译、调试与镜像部署;目标机(Target)则是运行VxWorks内核及应用程序的硬件平台。两者通过以太网、串口或JTAG等物理链路连接,并依赖Wind River提供的目标机代理(Target Agent)与主机侧调试服务器(Target Server)建立通信。本章将围绕Workbench 4.x(基于Eclipse)的安装配置、目标机连接、工程创建、编译及下载运行全流程展开,帮助读者建立一套可复用的开发环境搭建方法论。
2.1 Workbench安装与许可证配置
Workbench的安装并非简单的“下一步”操作,其核心难点在于许可证管理、组件选择与主机环境兼容性。Wind River Workbench 4.x基于Eclipse 3.x/4.x构建,支持Windows与Linux宿主机。安装前需确认宿主机操作系统版本(如Windows 10 64位或Ubuntu 18.04/20.04)、JDK版本(通常要求1.8+)以及磁盘空间(建议至少20GB)。安装包通常包含Workbench主程序、交叉编译器套件(如GCC for PowerPC/ARM/x86)、VxWorks 7或6.9的BSP源码包以及目标机调试工具。
LM_LICENSE_FILE 指向许可证服务器(如 27000@license-server-ip),或在Workbench的 Window → Preferences → Wind River → License 中配置。若使用节点锁定许可证,则需将license文件放置于安装目录的 license/ 文件夹下。常见错误是许可证服务器端口被防火墙拦截,导致启动时提示“Cannot connect to license server”。
安装完成后,首次启动Workbench需要选择工作空间(Workspace)目录。建议将工作空间与BSP源码分离,例如 D:\vxworks_workspace 用于存放工程,而BSP源码保留在安装目录的 target/config/ 下。Workbench的界面布局与Eclipse一致,包含Project Explorer、Editor、Console、Target Manager等视图。其中Target Manager是连接目标机的核心视图,所有调试会话均在此发起。
2.2 目标机与宿主机连接:物理链路与通信协议
目标机与宿主机之间的物理连接方式决定了后续调试的便捷性与可靠性。VxWorks支持三种主流连接方式:以太网(最常用,支持WDB调试与FTP下载)、串口(用于Boot ROM引导输出与早期调试)、JTAG/BDM(用于硬件级调试与Flash编程)。在实际项目中,通常采用“以太网为主、串口为辅”的组合方案。
| 连接方式 | 通信协议 | 适用场景 | 关键配置参数 | 优缺点 |
|---|---|---|---|---|
| 以太网 | WDB(Wind Debug) over UDP/TCP | 应用调试、内核调试、文件下载 | 目标机IP、MAC地址、WDB端口(默认17185) | 速度快、支持网络文件系统;需配置网络参数 |
| 串口 | RS-232 控制台协议 | Boot ROM引导、内核启动日志、应急调试 | 波特率(115200/57600)、数据位8、停止位1、无校验 | 简单可靠、无需IP;速度慢、无法传输大文件 |
| JTAG | JTAG/BDM 硬件调试协议 | Flash编程、硬件初始化、内核崩溃分析 | 调试器型号(Wind River ICE/Probe)、JTAG时钟频率 | 可调试硬件底层;需要额外硬件设备、配置复杂 |
以太网连接的核心是Target Agent(目标机代理)与Target Server(主机侧调试服务器)的配对。Target Agent运行在目标机上,负责接收主机发来的调试命令;Target Server运行在宿主机上,将Workbench的调试请求转换为WDB协议数据包。两者通过UDP端口17185(默认)通信。配置时需确保目标机IP与宿主机IP在同一网段,且目标机Boot ROM中已正确设置网络参数。
2.3 工程创建:VxWorks镜像工程与应用工程
VxWorks开发中工程分为两类:Boot Loader工程(可选)与VxWorks镜像工程,以及应用工程(可加载模块)。镜像工程用于生成VxWorks内核镜像(如 vxWorks 文件),应用工程则生成可加载到目标机的 .out 文件(类似Linux的 .ko 模块)。
创建VxWorks镜像工程的步骤如下:
- 在Workbench中右键点击Project Explorer空白处,选择
New → VxWorks Image Project。 - 输入工程名称(如
vxWorks_imx6),选择目标机架构(如ARMv7)与BSP包(如imx6q_sabrelite)。 - 选择内核版本(VxWorks 7或6.9),并指定镜像类型:
RAM-based(下载到内存运行)或ROM-based(烧写到Flash)。 - 在
Kernel Configuration界面中,通过图形化组件树裁剪内核功能。例如,若不需要FTP服务器,可取消勾选Network Protocols → FTP Server。 - 点击
Finish后,Workbench会自动生成config.h、Makefile以及bsp.h等关键文件。
应用工程的创建相对简单:选择 New → VxWorks Downloadable Kernel Module Project,输入工程名并选择工具链(与镜像工程一致)。应用工程编译产物为 .out 文件,可通过Target Server动态加载到运行中的VxWorks系统,无需重启目标机。
vxWorks.h),必须在工程属性中正确设置头文件搜索路径,否则编译会报“file not found”错误。
2.4 编译与下载运行:从源码到目标机执行
编译过程分为两个层次:内核镜像编译与应用模块编译。内核镜像编译在Workbench中右键点击镜像工程,选择 Build Project。Workbench会调用交叉编译器(如 ccarm)编译BSP源码与内核组件,最终生成 vxWorks 可执行文件(ELF格式)。编译日志可在Console视图中查看,常见错误包括头文件路径缺失、宏定义冲突以及链接时符号未定义。
应用模块编译类似,但输出为 .out 文件。编译前需确认应用工程引用的内核符号(如 taskSpawn、semBCreate)在目标机内核中已导出。若符号未导出,可在镜像工程的 kernel Configuration 中勾选 Include Symbol Table 选项。
下载运行的核心流程如下:
- 启动目标机Boot ROM: 目标机上电后,Boot ROM通过串口或网络加载VxWorks镜像。若使用网络加载,需在Boot ROM命令行中设置
boot device: emac0、host inet: 192.168.1.100、target inet: 192.168.1.101等参数。 - 建立Target Server连接: 在Workbench的Target Manager视图中,右键点击
New Target Server,选择连接方式(如WDB over UDP),输入目标机IP与WDB端口。点击Launch后,Target Server会与目标机上的Target Agent握手,建立调试通道。 - 下载镜像: 若目标机尚未运行VxWorks,需通过Boot ROM加载镜像。Workbench提供
Download按钮,将vxWorks文件通过FTP或TFTP传输到目标机内存指定地址(如0x100000),然后执行go命令启动内核。 - 加载应用模块: 内核运行后,在Target Manager中右键点击目标机,选择
Load Module,选择编译好的.out文件。加载成功后,可在Shell视图中调用模块中的函数(如sp startTask)。
2.5 案例拆解:基于IMX6Q开发板的VxWorks 7环境搭建
以某工业控制项目为例,目标硬件为NXP i.MX6Q四核Cortex-A9开发板,需要搭建VxWorks 7开发环境并验证GPIO驱动。项目约束:开发板仅有以太网接口,无串口调试输出(因串口被复用为其他功能);宿主机为Windows 10 64位,Workbench版本为4.6。
初始现象: 开发板上电后,Boot ROM通过串口输出正常,但无法通过以太网加载VxWorks镜像。串口日志显示 Attaching network interface emac0... done,但随后提示 Can't load boot file。
分析过程: 首先检查Boot ROM网络参数,发现 host inet 设置为 192.168.0.10,而宿主机IP为 192.168.1.100,网段不一致导致FTP请求无法到达宿主机。其次,宿主机未启动FTP服务器,Workbench自带的FTP服务默认未开启。
解决步骤:
- 修改Boot ROM参数:在Boot ROM命令行执行
p命令打印当前参数,使用h命令设置宿主机IP为192.168.1.100,目标机IP设为192.168.1.101,子网掩码255.255.255.0。 - 在Workbench中开启FTP服务:
Window → Preferences → Wind River → FTP Server,勾选Enable FTP Server,并设置根目录为镜像文件所在目录。 - 重新下载镜像:在Target Manager中新建Target Server,选择
WDB over UDP,目标机IP为192.168.1.101。点击Download,选择vxWorks文件,Workbench自动通过FTP传输并启动内核。 - 验证GPIO驱动:内核启动后,加载GPIO驱动模块
gpioDrv.out,在Shell中执行gpioTest函数,观察开发板LED灯闪烁,确认驱动工作正常。
结果对比: 调整网络参数并启用FTP后,镜像下载时间从原来的超时(>60秒)缩短至约8秒。后续调试中,通过WDB协议加载应用模块的延迟小于1秒,满足实时调试需求。
风险与复盘: 本次排障的教训是:网络参数配置是VxWorks开发中最常见的故障源。建议在项目启动初期,将宿主机IP、目标机IP、子网掩码、网关等参数写入项目文档,并统一规划网段。此外,FTP服务的安全性需注意,仅在开发阶段开启,产品发布时应关闭。
2.6 常见误区与总结复盘
在VxWorks开发环境搭建过程中,以下误区值得特别关注:
- 误区一:忽略BSP与内核版本的匹配。 VxWorks 7的BSP与VxWorks 6.9不兼容,强行使用会导致编译错误或启动崩溃。选择BSP时,务必确认其支持的内核版本与Workbench版本。
- 误区二:内核组件裁剪过度。 为了减小镜像体积,裁剪了必要的网络协议栈(如TCP/IP),导致Target Server无法连接。建议保留
INCLUDE_TCPIP、INCLUDE_WDB等基础组件。 - 误区三:混淆RAM-based与ROM-based镜像。 RAM-based镜像下载到内存运行,掉电丢失;ROM-based镜像烧写到Flash,适合产品发布。开发阶段使用RAM-based,量产阶段切换为ROM-based。
- 误区四:忽视符号表导出。 若应用模块需要调用内核函数,但内核未导出符号表,加载时会报
undefined symbol错误。在镜像工程中勾选Include Symbol Table可解决此问题。