3. 目标机连接与下载

在 Workbench 中调试 VxWorks 目标机,第一步不是下断点,而是把宿主机与目标机之间的“通道”建立起来,并把可执行映像和符号信息正确送到目标机上。通道、映像、符号表三者缺一不可:通道不通,后续全部无从谈起;映像不对,目标机跑的不是你要调的程序;符号表缺失或错位,断点会落到错误地址,变量窗口显示乱码。本节围绕这三件事展开,并给出连接失败时的排查路径。

一、两种连接方式:串口与以太网

Workbench 通过目标机代理(Target Server)与目标机通信,底层可走串口或以太网。串口连接不依赖网络配置,适合目标机刚上电、网络尚未就绪或网口驱动未加载的阶段;以太网连接速度快,适合下载较大的 VxWorks 映像和进行高频调试交互。实际工程中常见做法是:先用串口确认目标机能启动、能进 BootROM 命令行,再切到以太网做正式下载与调试。

串口连接的关键参数是波特率、数据位、停止位、校验位和流控。以常见的 115200-8-N-1 为例,在 Workbench 的 Target Server 配置中需与目标机 BootROM 的打印波特率一致,否则会看到乱码。以太网连接的关键参数是目标机 IP、子网掩码、宿主机 IP 以及目标机代理使用的端口(默认 1534)。目标机侧通常通过 BootROM 的 ifconfig 或启动参数设置 IP,宿主机侧在 Target Server 中填写目标机 IP 即可。

宿主机 Workbench 与目标机连接拓扑 宿主机 (Host) Workbench IDE Target Server 交叉编译器 / 符号表 IP: 192.168.1.100 目标机 (Target) VxWorks 映像 WDB Agent BootROM IP: 192.168.1.200 以太网 (TCP/IP, 端口 1534) 高速下载 / 调试交互 串口 (115200-8-N-1) BootROM 交互 / 网络未就绪时使用 连接建立顺序建议 1. 串口连接 → 确认 BootROM 启动、查看启动打印、设置目标机 IP 2. 以太网连接 → Target Server 填写目标机 IP,测试连通性 3. 下载 VxWorks 映像 → 加载符号表 → 开始调试

二、VxWorks 映像下载

VxWorks 映像常见格式有 vxWorks(可加载的 ELF 格式)、vxWorks.st(带符号表的版本)以及 bootrom.bin 等。下载方式取决于目标机启动阶段:如果目标机已经运行了 WDB Agent,可以通过 Target Server 直接下载;如果目标机停在 BootROM 命令行,则通常用 TFTP 或串口协议把映像传到目标机内存再跳转执行。

以以太网 TFTP 下载为例,目标机 BootROM 中执行类似命令:

# 目标机 BootROM 命令行
ifconfig("192.168.1.200", "255.255.255.0")
tftpGet("192.168.1.100", "vxWorks.st", 0x308000, 0)
go(0x308000)

其中 0x308000 是映像加载到内存的地址,必须与链接脚本中的入口地址一致,否则跳转后无法正常启动。宿主机侧需要先启动 TFTP 服务,并把 vxWorks.st 放在 TFTP 根目录下。下载完成后,目标机从该地址开始执行,WDB Agent 随之启动,此时 Target Server 才能接管调试。

如果使用 Workbench 的 Download 功能,则在 Target Server 连接成功后,通过菜单选择映像文件,Workbench 会自动完成传输和启动。需要注意的是,下载的映像必须与目标机 CPU 架构、BSP 匹配,否则会出现启动即挂死或反复重启。

三、符号表加载

符号表是调试器把机器指令地址映射回函数名、变量名和源文件行号的信息。VxWorks 映像如果编译时带了 -g 选项,符号信息会包含在 ELF 文件中。Workbench 在下载映像时通常会自动加载符号表,但如果目标机上运行的是裁剪过的映像,或者符号表被单独存放,就需要手动指定符号文件。

符号表加载的核心是“地址匹配”。调试器根据符号表中的段地址和函数偏移,计算出每个符号在目标机内存中的实际地址。如果映像的加载地址与符号表记录的链接地址不一致,断点就会打偏。例如符号表记录 main 在 0x308100,而实际映像被加载到 0x310000,则断点会落在错误位置。此时需要在 Workbench 中设置正确的加载偏移,或重新用匹配的链接地址编译。

判断符号表是否加载成功:在 Workbench 的 Debug 视图中展开目标机节点,能看到模块列表和函数名;在断点视图中设置函数断点,若显示为已解析(实心圆点)而非未解析(空心圆点),说明符号表已正确加载。

四、连接故障排查

连接失败的表现多种多样,按“物理层→网络层→目标机代理→符号表”的顺序排查效率最高。下面给出常见现象与对应处理。

现象 可能原因 排查方法
串口打印乱码 波特率不匹配 核对 BootROM 波特率与终端设置,常见 115200 或 9600
Target Server 连接超时 目标机 IP 不通或 WDB Agent 未启动 宿主机 ping 目标机;串口查看目标机是否已启动 WDB Agent
能 ping 通但连不上 端口 1534 被占用或防火墙拦截 检查宿主机防火墙,确认 Target Server 端口配置
下载后目标机挂死 映像与 BSP/CPU 不匹配,或加载地址错误 核对 BSP 版本、CPU 架构、加载地址与链接脚本
断点打不上或位置错误 符号表未加载或地址偏移不一致 检查符号文件是否加载,核对加载地址与链接地址

排查时建议保留串口终端始终打开,因为目标机启动阶段的关键信息(BootROM 版本、内存检测、网络初始化、WDB Agent 启动)都从串口输出。以太网连接失败时,串口输出往往能直接指出是网络配置问题还是映像问题。另外,Workbench 的 Target Server 日志和 Debug 视图中的错误提示也是重要线索,不要只看弹窗结论。

修改目标机 IP 或 Target Server 配置后,建议先断开再重新连接,避免旧连接状态残留导致“看似连上、实际不通”的假象。

把连接、下载、符号表三件事按顺序做扎实,后续的断点调试、变量观察、任务分析才有可靠基础。实际项目中,建议把目标机 IP、宿主机 IP、TFTP 根目录、映像路径、波特率等参数整理成一份连接配置记录,换机器或换项目时直接对照填写,能显著减少重复排查时间。