2. VxWorks开发环境搭建与交叉编译

VxWorks 的嵌入式开发与桌面软件开发最大的区别在于“交叉”:编译发生在宿主机上,运行发生在目标机上。宿主机通常是运行 Windows 或 Linux 的 PC,安装 Wind River Workbench 作为集成开发环境;目标机则是真正承载 VxWorks 的硬件,可能是 x86 工控板、ARM 单板、PowerPC 飞控计算机,也可能是 QEMU 模拟器。理解“宿主机编译、目标机运行”这条主线,是搭建整套开发环境的前提。

Workbench 的安装与工作区配置

Workbench 是 Wind River 基于 Eclipse 构建的集成开发环境,安装包通常以 ISO 或安装器形式提供。安装时需要注意三点:一是安装路径不要包含中文和空格,避免后续编译脚本解析异常;二是选择与目标 BSP 匹配的 VxWorks 版本组件,例如 VxWorks 7 的 SR 系列或 VxWorks 6.9;三是安装完成后首次启动要指定 workspace(工作区)目录,建议单独放在一个容量充足、路径简短的磁盘分区,例如 D:\wr_ws。

启动后进入 Workbench,先确认已安装的 VxWorks 组件是否可见。在 Window → Preferences → Wind River 中可以查看当前注册的 VxWorks 安装实例。若目标机是 ARM 架构,需要确保安装了对应的编译器工具链,例如 arm-wrs-vxworks-gcc;若目标机是 x86,则使用 i586-wrs-vxworks-gcc。工具链是否可用,可以在 Workbench 的 Build Console 中通过一次空编译验证。

宿主机与目标机的连接方式

宿主机与目标机之间需要建立两类通道:一类用于下载镜像和调试,另一类用于查看串口输出。常见连接方式包括串口、以太网和 JTAG。串口连接最简单,用交叉串口线或 USB 转串口模块连接宿主机 COM 口与目标机调试串口,波特率通常设为 115200、8 数据位、无校验、1 停止位。以太网连接速度更快,适合下载较大的 VxWorks 镜像,宿主机和目标机需在同一网段,例如宿主机 192.168.1.100,目标机 192.168.1.200。JTAG 则多用于底层 BSP 调试和引导程序烧写。

在 Workbench 中,连接配置通过 Target Manager 完成。新建一个目标连接时,需要选择连接类型(Serial、WDB、Simulator 等)、填写端口或 IP 地址,并指定目标机使用的 VxWorks 版本。配置完成后点击连接,若目标机已运行可被调试的 VxWorks 镜像,Workbench 会显示目标机状态;若目标机尚未启动,则需要先通过串口或网口下载镜像。

VxWorks 交叉编译环境连接拓扑 宿主机 (Host PC) Wind River Workbench Eclipse 集成开发环境 交叉编译器工具链 arm-wrs-vxworks-gcc / i586-wrs-vxworks-gcc Target Manager 连接配置与目标机管理 串口终端 / 网络终端 115200-8-N-1 / Telnet 工作区: D:\wr_ws 目标机 (Target Board) VxWorks 镜像 vxWorks / vxWorks.st BSP 板级支持包 初始化 CPU、内存、外设 引导程序 U-Boot / VxWorks BootROM 硬件平台 CPU / RAM / Flash / 外设 IP: 192.168.1.200 下载镜像 调试信息 串口输出 状态反馈 BSP = 硬件与 VxWorks 内核之间的适配层 提供启动代码、驱动、配置文件

BSP 的概念与作用

BSP(Board Support Package,板级支持包)是 VxWorks 能够运行在特定硬件上的关键。它位于硬件与操作系统内核之间,负责在系统启动阶段完成 CPU 初始化、内存控制器配置、时钟设置、串口初始化、中断控制器配置等底层工作,并为上层驱动提供统一的接口。可以这样理解:VxWorks 内核是通用的,而 BSP 是“翻译官”,把具体硬件的差异屏蔽掉,让内核看到一套标准的运行环境。

一个典型的 BSP 目录包含以下内容:config.h 定义系统配置参数,sysLib.c 提供系统级初始化函数,sysSerial.c 管理串口,sysClk.c 配置系统时钟,Makefile 或 Makefile.wrs 控制编译流程,以及 romInit.s 等启动汇编文件。在 Workbench 中创建 VxWorks 镜像时,必须选择一个与目标硬件匹配的 BSP。例如目标机是 Xilinx Zynq-7000,就选择 zynq_7000 或厂商提供的对应 BSP;若目标机是标准 x86 PC,则选择 pcPentium4 或 itl_generic。

创建并运行第一个 VxWorks 镜像

在 Workbench 中创建 VxWorks 镜像的典型流程如下。首先新建一个 VxWorks Image Project(VIP),在向导中选择目标 BSP,例如 arm 架构下的 vexpress_armv7。然后选择镜像类型:vxWorks 是可加载的调试镜像,vxWorks.st 是带符号表的镜像,vxWorks_rom 是固化到 ROM 中的镜像。对于首次调试,建议选择 vxWorks 并通过网络或串口下载。

接下来配置内核组件。在 VIP 的 Kernel Configuration 视图中,可以勾选需要的组件,例如 INCLUDE_SHELL(命令行解释器)、INCLUDE_NETWORK(网络协议栈)、INCLUDE_DEBUG(调试支持)。若目标机需要通过串口输出启动信息,确保 INCLUDE_STDIO 和 INCLUDE_SERIAL 已启用。配置完成后点击 Build,Workbench 会调用交叉编译器生成镜像文件,输出路径通常在 default/vxWorks。

镜像生成后,通过 Target Manager 建立连接并下载。若使用串口下载,在目标机引导程序提示符下输入 @ 或使用 load 命令;若使用网络下载,则配置目标机 IP 和宿主机 TFTP 服务,通过 boot 命令加载。下载成功后,目标机串口终端会打印 VxWorks 启动横幅,包括版本号、BSP 名称、内存大小和网络接口信息。此时在 Workbench 的 Target Manager 中可以看到目标机状态变为 Connected,说明交叉编译与连接链路已经打通。

首次运行建议先使用 QEMU 模拟器验证镜像,再切换到真实硬件。QEMU 可以模拟 x86 或 ARM 目标机,避免因硬件接线或 BSP 不匹配导致排查困难。在 Workbench 中新建 Simulator 连接,指定 QEMU 可执行文件和镜像路径即可启动。

常见问题与判断依据

环境搭建过程中最常见的三类问题:一是编译报错找不到头文件,通常是因为 BSP 路径未正确注册或工具链未选中;二是下载失败,检查串口线序、波特率、网线连通性和防火墙设置;三是目标机启动后无输出,可能是 BSP 中串口初始化配置与硬件实际端口不一致,需要核对 sysSerial.c 中的基地址和中断号。判断环境是否真正可用,最直接的依据是:Workbench 能成功编译出镜像,目标机能打印启动日志,并且 Target Manager 显示连接正常。三者同时满足,才说明交叉编译环境搭建完成。