3. 交叉开发环境搭建
VxWorks 是典型的交叉开发系统:编译、链接、镜像生成在宿主机(通常是 x86 Linux 或 Windows 上的 Workbench)完成,而运行、调试、验证发生在目标机(ARM、PowerPC、x86 或 RISC-V 板卡)上。交叉开发环境搭建的本质,是把“宿主机工具链—目标机硬件—BSP—镜像—下载通道—调试通道”这条链路逐段打通。任何一段不通,后续的驱动开发、协议栈调试、网络设备功能验证都无从谈起。
一、宿主机与目标机的物理连接与网络规划
宿主机与目标机的连接通常分两类:一类是调试/引导通道,如串口(UART)、JTAG/OCD;另一类是数据/下载通道,如以太网、USB。串口用于观察 BootROM 输出、进入 BootLoader 命令行、设置启动参数;以太网用于 TFTP 下载 VxWorks 镜像、NFS 挂载文件系统、以及后续的调试通信。
以常见的网络通信设备开发为例,建议规划如下:宿主机双网卡,一张接办公网,一张接目标机所在的调试网段。调试网段使用独立私有地址,例如宿主机 192.168.10.1/24,目标机 192.168.10.100/24,避免与办公网冲突。串口使用 USB 转串口线,参数通常为 115200-8-N-1,无流控。若目标机支持 JTAG,则 JTAG 用于 CPU 初始化和 BootROM 烧写,串口用于运行期观察。
连接完成后,先在宿主机上确认串口设备节点(如 /dev/ttyUSB0)和网卡状态,再给目标机上电,观察串口是否输出 BootROM 版本、内存大小、网卡 MAC 等信息。若串口无输出,优先检查波特率、线序(TX/RX 是否交叉)、目标机是否处于复位状态。
二、BSP 的选择与配置
BSP(Board Support Package)是 VxWorks 与具体硬件之间的适配层,包含启动代码、串口驱动、定时器、中断控制器、网卡驱动、内存映射等。BSP 选择的第一原则是“与目标板最接近”:优先使用板卡厂商提供的 BSP;若没有,则选择 CPU 架构相同、外设相近的参考 BSP 进行移植。
在 Workbench 中新建 VxWorks Image Project(VIP)时,需要指定 BSP。常见配置项包括:
- CPU 与架构:如 ARM Cortex-A9、PowerPC e500、x86_64,决定编译器与指令集。
- 内存布局:RAM 起始地址、大小,以及 VxWorks 镜像加载地址(如
0x80000000)。 - 串口:系统控制台使用的 UART 编号、寄存器基址、波特率。
- 定时器:系统时钟频率,影响
sysClkRateSet()与任务调度精度。 - 网络接口:MAC 控制器类型、PHY 地址、中断号,决定后续网络下载与调试是否可用。
- 启动参数:
bootline中的motet、host、target、gateway、file等字段。
配置时不要一次性打开所有组件。建议先保证“串口控制台 + 定时器 + 内存”可用,能进入 VxWorks shell;再逐步加入网卡驱动、文件系统、调试代理。每加一组组件就重新编译、下载、验证,便于定位问题。
三、VxWorks 镜像裁剪
VxWorks 镜像由内核、组件库、BSP、应用模块组成。裁剪的目标是在满足功能的前提下减小镜像体积、缩短启动时间、降低内存占用。裁剪的基本方法是:在 VIP 的组件配置树中,只保留必需组件,关闭未使用的协议、文件系统、调试工具和示例程序。
例如,一个网络通信设备的最小镜像可保留:内核(INCLUDE_KERNEL)、任务与信号量、消息队列、网络协议栈(INCLUDE_NETWORK、INCLUDE_BSD_SOCKET)、目标代理(INCLUDE_WDB)、串口控制台、以及必要的网卡驱动。可关闭:图形界面、USB 主机栈、未使用的文件系统(如 dosFs 若不需要)、多余的 shell 命令、调试打印等。
裁剪后应记录镜像大小与启动时间。示例:裁剪前镜像约 4.2 MB,启动到 shell 约 6 s;裁剪后约 2.1 MB,启动约 3 s。这些数值属于示例参考,实际以目标板与配置为准。若裁剪后网络不通,优先检查是否误删了网卡驱动或协议栈组件。
四、网络下载与调试通道建立
网络下载通常使用 TFTP。宿主机启动 TFTP 服务,根目录指向镜像所在目录;目标机在 BootLoader 中设置 bootline,例如:
boot device : motet
unit number : 0
processor number : 0
host name : 192.168.10.1
file name : /tftpboot/vxWorks.bin
inet on ethernet (e) : 192.168.10.100:ffffff00
gateway inet (g) : 192.168.10.1
user (u) : target
ftp password (pw) : target
flags (f) : 0x0
target name (tn) : vxTarget
设置完成后执行 @ 或 boot,目标机通过 TFTP 拉取镜像并跳转执行。若下载失败,依次检查:宿主机 TFTP 服务是否启动、防火墙是否放行 69/UDP、目标机 IP 是否与宿主机同网段、网线是否连通、BootLoader 中网卡驱动是否已初始化。
镜像启动后,VxWorks 会加载 WDB 目标代理,宿主机 Workbench 通过 WDB 协议连接目标机,实现符号调试。连接时需指定目标机 IP 和符号文件 vxWorks.sym。连接成功后,可在 Workbench 中查看任务列表、设置断点、读写内存、查看变量。若 WDB 连接失败,检查目标机是否包含 INCLUDE_WDB 组件、网络是否可达、端口是否被占用。
五、常见问题与排查顺序
交叉开发环境搭建的故障往往集中在“链路不通”和“配置不匹配”两类。推荐排查顺序:先串口,再网络,再 BSP,最后镜像。串口不通时,不要急于改 BSP,先确认线序、波特率、串口终端配置。网络不通时,先用 ping 验证宿主机与目标机连通性,再验证 TFTP。BSP 配置错误通常表现为启动卡死、内存异常、网卡不识别,此时应回退到参考 BSP 的最小配置,逐项恢复。镜像裁剪过度则表现为缺少符号、命令不可用、协议栈异常,应检查组件依赖关系。
完成上述步骤后,宿主机与目标机之间的交叉开发链路即告建立。后续的驱动开发、协议栈移植、网络设备功能测试,都可以在这条链路上进行编译、下载、运行和调试。