4. VxWorks启动流程与镜像构建
VxWorks 的启动过程本质上是一条“从上电到应用运行”的链:CPU 复位后先执行固化在 ROM 中的引导代码,再由引导程序把真正的 VxWorks 映像装载到内存并跳转执行。理解这条链的关键,是分清 BootROM 与 VxWorks 映像 两类二进制各自的职责,以及它们如何通过启动参数(boot line)衔接起来。
一、BootROM 与 VxWorks 映像的分工
BootROM 是“引导用”的映像,通常烧写在 Flash 或 EPROM 的起始地址,上电后由 CPU 直接取指执行。它内部包含最小化的内核、串口/网口驱动、网络协议栈(如 TFTP、BOOTP/DHCP)以及一个引导命令行。BootROM 的目标不是跑应用,而是把目标机“拉起来”,具备下载能力。
VxWorks 映像是“运行用”的映像,包含完整内核、组件与应用。按链接与装载方式,常见类型有:
- vxWorks(可加载型):未压缩、未定位,由 BootROM 通过 TFTP 下载到 RAM 后运行,适合开发调试阶段,改一次编一次、下载即跑。
- vxWorks_rom(ROM 型):把 VxWorks 与引导代码链接成一个整体,烧入 ROM/Flash,上电后从 ROM 中执行(或搬运到 RAM 执行),适合量产。
- vxWorks_romCompress(压缩 ROM 型):在 ROM 型基础上压缩,节省 Flash 空间,启动时先解压到 RAM。
- vxWorks.st(驻留 ROM 型):带符号表的 ROM 映像,便于现场调试。
选择原则很直接:开发阶段用可加载型 + 网络启动,量产阶段用 ROM 型或压缩 ROM 型 + 本地启动。
二、启动参数 boot line 的构成
BootROM 启动后会打印引导菜单,其中最关键的是 boot line。它决定了“从哪里、用什么协议、取哪个文件”。典型格式为:
boot device : fei
unit number : 0
processor number : 0
host name : 192.168.1.100
file name : /vxworks/vxWorks
inet on ethernet (e) : 192.168.1.50
host inet (h) : 192.168.1.100
gateway inet (g) : 192.168.1.1
user (u) : target
ftp password (pw) : target
flags (f) : 0x0
target name (tn) : vxTarget
其中 fei 表示目标机第一块网卡,host inet 是 TFTP 服务器地址,inet on ethernet 是目标机自身 IP,file name 是待下载的 VxWorks 映像路径。若使用串口下载,则把 boot device 改为 tsfs 或对应串口设备。
ping 确认目标机与主机连通,再执行 @ 或 boot 命令。三、网络启动实战流程
以开发板 + 主机(Linux/Windows 均可)为例,网络启动的完整闭环如下:
- 主机侧启动 TFTP 服务,把编译生成的
vxWorks放入 TFTP 根目录,例如/tftpboot/vxWorks。 - 目标机上电,进入 BootROM 命令行,用
c命令修改 boot line,把 host inet 指向主机 IP,file name 指向映像路径。 - 执行
@触发下载。BootROM 通过 TFTP 读取映像,串口会打印类似Loading... 1234567 + 89012 bytes的进度。 - 下载完成后 BootROM 跳转到映像入口,内核开始初始化,最终打印
usrAppInit或应用启动日志。
判断成功的依据:串口出现内核版本号、任务列表可查询(i 命令)、网络可 ping 通。若卡在 Loading... 不动,优先检查 TFTP 服务是否开启、防火墙是否放行 69/UDP、文件名大小写是否匹配。
四、本地启动与镜像烧写
量产时不再依赖主机,需要把 VxWorks 映像固化到目标机 Flash。常见做法是:先用网络启动把 vxWorks_rom 下载到 RAM,再通过 Flash 编程工具(如 flashProgram 或厂商提供的烧写命令)写入 Flash 起始地址。烧写完成后把启动方式切回本地,重新上电验证。
本地启动的验证要点:断开网线后仍能正常启动;串口日志中不再出现 TFTP 下载过程;version 命令显示的映像类型与烧写类型一致。若上电后无任何输出,通常是 Flash 起始地址配置错误或映像未正确链接到该地址。
五、两种启动方式的对比与选用
| 对比项 | 网络启动 | 本地启动 |
|---|---|---|
| 映像类型 | vxWorks(可加载型) | vxWorks_rom / romCompress |
| 依赖主机 | 需要 TFTP 服务器 | 不需要 |
| 迭代速度 | 快,改完即下载 | 慢,需重新烧写 |
| 适用阶段 | 开发、调试 | 量产、现场部署 |
| 典型故障 | 网络不通、TFTP 超时 | Flash 地址错、映像损坏 |
实际项目中常采用“双轨”策略:开发阶段保留 BootROM + 网络启动,方便快速迭代;量产阶段把最终验证过的 vxWorks_rom 烧入 Flash,并保留一个可回退的 BootROM 分区。这样既保证开发效率,又保证现场部署的独立性。
掌握启动链的关键,是把 BootROM、boot line、映像类型三者对应起来:BootROM 决定“能不能引导”,boot line 决定“从哪里引导”,映像类型决定“引导后怎么运行”。三者配置一致,启动才能顺利走到应用入口。