
嵌入式开发这行干了十几年手头用过的工具链换了一茬又一茬但总有那么一套老工具是你绕不开的Wind River的WorkBench 3.2搭配VxWorks 6.8。直到今天不少军工、工业控制、电力设备和医疗器械项目还在用它做底层平台网上隔三差五就有人问安装配置的问题。这次我把自己从裸机到跑通一个最小映像的完整安装过程整理出来步骤尽量细坑尽量提前指出来给后面入坑的同学当个参考。1. 这套组合的价值为什么还在折腾WorkBench 3.2 VxWorks 6.8先说点实在的。VxWorks 6.8属于风河公司VxWorks 6.x系列里相当成熟的一个版本内核基于BSD的TCP/IP协议栈支持SMP多核调度内存保护机制比5.x时代强了不止一个档次稳定性在工业界经过大量验证。配套的WorkBench 3.2是基于Eclipse 3.x深度定制出来的IDE虽然界面放到今天看确实复古但它的编译调试链路非常完整工程管理、交叉编译、目标机连接、断点调试、性能分析工具全都集成在一起用顺手之后效率并不低。很多朋友会问现在VxWorks 7都出来这么多年了为什么还要学6.8原因很现实存量项目太多。很多长期服役的设备其嵌入式软件固件就是用VxWorks 6.8写的维护、升级、移植都离不开WorkBench 3.2这套工具。另外VxWorks 6.8的文档、BSP包、第三方中间件资源非常丰富学习曲线比7.x平缓作为入门RTOS底层开发的选择依然合适。这套组合能做什么简单说你可以在PC上编写C/C代码交叉编译成目标机架构的二进制映像然后通过网络或串口把它下载到目标板x86、PowerPC、ARM、MIPS等架构都支持上运行并且直接在IDE里进行源码级调试。整个开发流程围绕“主机-目标机”的调试模型展开这个模型从Tornado时代一直沿用到今天。需要说明的是VxWorks 6.8官方支持的主机操作系统包括Windows XP、Windows Vista和Windows 7但实际在Windows 10和Windows 11上也能跑只是需要一些兼容性设置。我这次以Windows 10 64位系统为例讲解完整的安装和配置过程。2. 安装前的盘算主机环境、版本约束与资源准备2.1 主机操作系统兼容性实测WorkBench 3.2的安装包发布年代较早官方要求32位Windows系统但64位系统也有办法。我实测过Windows 10专业版64位和Windows 11家庭版前者整体兼容性更好一些后者偶尔会出现Eclipse界面刷新异常的问题。如果你用的是Windows 10建议做两件事关闭用户账户控制UAC或者把安装目录设置为管理员权限可写。原因在于安装过程中的一些脚本需要写入注册表和环境变量UAC拦截会导致步骤静默失败。安装路径不要出现中文、空格和特殊符号。比如D:\WindRiver是安全的C:\Program Files\WindRiver虽然可以装但后面配置命令行编译环境时路径带空格会带来额外的转义麻烦不如直接用C:\WindRiver这种短路径省心。如果必须用Windows 11遇到WorkBench界面卡顿或崩溃可以尝试以Windows 7兼容模式运行workbench.exe右键点击快捷方式在“兼容性”选项卡里勾选即可。这个方法不是百分百有效但能解决不少显示异常的问题。2.2 需要准备的材料清单安装前把下面这些材料准备好免得装到一半到处找材料说明WorkBench 3.2安装光盘或ISO镜像核心IDE和编译工具链VxWorks 6.8目标机安装文件通常包含在同一个发行包中许可证文件license或许可证服务器地址风河许可机制没有它无法启动编译和调试功能目标板BSP包不同硬件平台对应不同的板级支持包如果是实验学习可用自带的x86 BSP串口线和网线目标机通信需要串口用于启动引导和串口控制台网口用于下载映像和调试Windows 7或Windows 10系统建议先准备一个干净的虚拟机或实体机这里多提一句BSP。BSPBoard Support Package是板级支持包它把VxWorks内核和具体硬件之间的底层驱动、启动代码、内存映射配置都封装好了。如果你是针对某块具体的开发板必须确认厂家提供了对应VxWorks 6.8版本的BSP如果只是学习体验直接用WorkBench自带的x86或Pentium4BSP即可可以在没有实体目标板的情况下用虚拟机模拟跑通流程。2.3 磁盘空间与内存的底线WorkBench 3.2完整安装包括IDE、各架构编译器、目标机运行库、文档和示例工程安装后占用大约6到8GB空间。内存方面主机建议至少4GB否则编译大工程时Eclipse会频繁卡死。另外由于工具链整体是32位程序在64位系统上运行时单进程内存上限被限制在2GB编译超大工程时如果内存溢出需要调整Eclipse的eclipse.ini文件中的堆内存参数后面会讲到。3. WorkBench 3.2主体安装过程的关键节点3.1 安装启动及路径选择拿到安装包后以管理员身份运行setup.exe。这里有个细节不要直接双击ISO文件里的setup.exe而是先把整个ISO解压到本地。因为安装程序在某些步骤会访问光盘根目录下的文件Windows自带的虚拟光驱有时会锁定文件句柄导致安装中断。安装向导启动后语言选择默认英文即可WorkBench本身没有官方中文界面强行汉化反而会引入乱码问题。第二步是选择安装路径。像我前面说的用C:\WindRiver这样的短路径。安装程序会在该目录下创建完整的目录结构包括workbench-3.2IDE主程序目录vxworks-6.8VxWorks内核、BSP、目标机库docs文档目录setup一些配置脚本需要注意安装路径一旦确定后期尽量不要再移动目录因为环境变量和Eclipse工作区配置里都会写入绝对路径。移动目录之后所有基于WIND_BASE的工程都会找不到文件修复起来相当麻烦。3.2 组件勾选逻辑安装类型选择界面会列出很多组件常见的包括WorkBench IDE必选整个开发环境的核心VxWorks 6.8 Target Support必选包含目标机运行库和配置工具C/C Development Tools必选没有它就没法编译代码Wind River Compiler必选风河自带的GCC交叉编译器Target Simulator推荐这是一个软件模拟的目标机可以在没有实体硬件的情况下运行和调试VxWorks映像对初学者帮助很大Host Tools包括命令行工具和调试器建议全部勾选组件选择很大程度决定了后续能做什么、不能做什么。有的朋友为了省空间把目标模拟器Target Simulator取消了结果后面学习启动流程没东西可跑还得重装。个人建议是全选省心反正也就几个GB的事。3.3 Wind River Registry与主机-目标通信基础安装过程中有一个容易被忽略的组件叫作Wind River Registry注册表服务。这是一个轻量级的网络服务用于主机和目标机之间的相互发现。在Tornado时代它叫WRS Registry作用是在局域网上维护一个目标机列表主机通过它可以自动找到目标机从而建立连接。安装完后Wind River Registry会作为Windows服务注册到系统里但在部分系统上服务启动状态是“手动”这会导致后面连接目标机时找不到设备。装完务必打开Windows服务管理器找到Wind River Registry服务设为“自动”并手动启动一次。Registry服务对应的端口号是9956如果Windows防火墙拦截记得添加入站规则放行。另外VxWorks目标机上的目标代理target agent也需要能访问主机的这个端口所以如果你有真实的目标板要确保板子和开发机在同一网段且防火墙没有阻隔。4. VxWorks 6.8工程环境的配置与BSP选择4.1 创建一个VxWorks镜像工程WorkBench安装完成后首次启动需要选择一个工作区目录workspace。这个目录用来存放你的工程文件、配置和临时文件。建议建一个专门的目录比如D:\Workspace\VxWorks68不要用默认的C:\Users\xxx\workbench-workspace因为后面命令行编译时需要频繁访问工作区路径太深或带中文容易触发未知问题。启动WorkBench后菜单选择File - New - VxWorks Image Project进入工程创建向导。这跟普通Eclipse工程不一样VxWorks镜像工程生成的最终产物是完整的VxWorks操作系统内核映像它把内核组件、驱动、文件系统、网络协议栈全部静态链接进一个文件里直接烧写到目标板或由引导程序加载。向导中有几个核心选项Project name工程名称自定义即可BSP选择目标板对应的BSP。学习环境选x86或Pentium4有真实板卡则选对应的BSPImage project type选择vxWorks image而不是bootable引导工程Toolchain默认即可通常是diabWind River自家编译器或gnuGCC。一般默认GNU就好资料多、问题少4.2 BSP的选择原则BSP选错后面的编译大概率直接失败或者生成的映像跑不起来。常见的BSP命名规则一般是架构_板卡型号例如x86通用x86架构适合PC/104、工控机等Pentium4专门针对奔腾4处理器的BSP属x86的一种优化变体mv5500Motorola PowerPC系列p2020rdb飞思卡尔P2020处理器参考板integratorArmARM集成板选BSP的核心原则是优先选厂家提供的最新版BSP其次是选架构接近的通用BSP。如果你手上的板子是国产的厂家给的BSP如果对应的是VxWorks 6.9而不是6.8也不要强行去装版本不匹配会导致内核启动物理内存地址映射错乱最容易出现的现象就是串口打印卡在Starting at ...不动。4.3 镜像类型的选择与配置VxWorks的启动方式决定了你需要构建哪种类型的映像。常见的包括bootrom一个最小的引导程序存放在Flash或ROM中启动时负责初始化硬件、加载VxWorks映像到内存并把控制权交给VxWorksvxWorks普通映像完整的OS内核和应用可通过bootrom引导也可直接烧写到内存地址执行vxWorks_rom可压缩或非压缩的ROM驻留映像直接从ROM执行或拷贝到RAM中执行对于学习场景建议先编一个vxWorks标准映像配合Target Simulator使用。Target Simulator相当于一个虚拟的x86目标机WorkBench会加载你的映像并模拟执行串口和终端输出都在主机上显示。创建工程后工作区会生成内核组件配置界面里面列出了所有可以裁剪的内核组件比如文件系统dosFs、romFs、tmpfs、NFS客户端网络协议栈TCP/IP、UDP、ARP、DHCP客户端串口驱动16550 UARTShell组件目标机命令行shell内存管理虚拟内存、MMU学习初期建议保留默认配置不要乱裁剪。默认配置已经包含了一个完整的具备网络和Shell功能的VxWorks系统足够跑通调试流程。4.4 环境变量WIND_BASE的检查VxWorks开发很依赖一个环境变量WIND_BASE它指向VxWorks安装根目录比如C:\WindRiver\vxworks-6.8。编译器、Makefile和工程构建脚本都会引用这个变量来定位头文件和库文件。安装程序理论上会自动设置这个环境变量但我见过不少机器上没设成功的。装完后记得检查一下右键“此电脑”-“属性”-“高级系统设置”-“环境变量”看“系统变量”里是否有WIND_BASE确认其值指向准确的vxworks-6.8目录没有的话手动添加添加完要重新启动WorkBench环境变量才会被加载。这一步如果漏了编译时最常见的报错是找不到vxWorks.h而且错误信息会指向一串莫名其妙的路径。5. 许可证配置最容易卡住的环节5.1 许可证文件与服务器两种模式WorkBench 3.2和VxWorks 6.8的开发工具是需要许可证授权的即使你用的是物理机、不连网也必须先解决许可问题。风河许可证有两种工作模式本地许可证文件License File把风河销售或者官方试用发你的许可证文件放到本地通过环境变量LM_LICENSE_FILE或WRS_LICENSE_FILE指向它许可证服务器License Server在局域网某一台机器上运行FlexLM许可证服务器其他开发机通过网络获取可用许可。适合团队开发环境个人学习或者单个开发机直接用本地许可证文件最简单。企业环境则建议用服务器模式方便统一管理许可数量。5.2 许可证环境变量的配置步骤拿到许可证文件后假设你把它放在C:\WindRiver\license\license.dat操作步骤如下右键“此电脑”-“属性”-“高级系统设置”-“环境变量”在系统变量中新建变量LM_LICENSE_FILE变量值为C:\WindRiver\license\license.dat如果还有WRS_LICENSE_FILE变量同样指向该文件重开WorkBench配置后启动WorkBench时如果左下角提示许可证错误或者编译动作被禁用可以打开命令行窗口运行lmutil lmdiag命令检查许可证的可用状态。lmutil工具在C:\WindRiver\workbench-3.2\utilities目录下但要注意先切到该目录再运行cd C:\WindRiver\workbench-3.2\utilities lmutil lmdiag运行后输出会显示许可证功能项是否有效、过期时间以及当前被谁占用。如果提示Cannot find license多半是环境变量没生效或者许可证文件与主机MAC地址绑定不匹配。风河的节点锁定许可证Node-Locked License和主机网卡MAC地址绑定换了网卡或虚拟机克隆后许可证可能失效。这里给一个实操提醒如果你是在虚拟机上安装使用建议配置一块固定的虚拟网卡并且不要在系统运行中切换网络适配器。否则每次MAC地址变化许可证都要重新激活一次。5.3 许可证错误特征对照报错信息可能原因解决方向License server system does not support this feature许可证功能项不包含所需模块确认许可证类型是否包含WorkBench和编译器功能Cannot connect to license server服务器模式端口不通或服务器未启动检查服务状态、端口27000和防火墙Invalid host主机名或MAC地址与许可证不匹配更新hosts文件统一主机名或申请新许可证License expired试用期限已过续期或更换正式许可证许可证这块是安装使用中最容易消耗耐心的环节但它本身逻辑很清晰要么是环境变量指错路要么是授权对象不匹配要么是网络端口被防火墙卡住。按这个思路排错五分钟能搞定。6. 安装和启动阶段的踩坑记录6.1 编译VxWorks映像时最常见的报错创建好VxWorks Image工程后右键工程选择Build Project如果是第一次编译整个过程可能持续几分钟到十几分钟。遇到编译失败的场景不少我挑几个高频的来说。报错1Cannot open include file vxWorks.h这个基本没有悬念就是WIND_BASE环境变量没配对或者WIND_BASE指向的目录下面找不到vxWorks.h。检查办法echo %WIND_BASE% dir %WIND_BASE%\h\vxWorks.h如果第二条命令提示路径不存在修正环境变量并重开IDE即可。报错2undefined reference to _gp或者collect2: ld returned 1 exit status这个一般出现在GNUMake编译的链接阶段多数是因为BSP配置和编译器选项不匹配。比如编译器默认使用软浮点而BSP的链接脚本里引用了硬浮点库就会报类似错误。解决办法是在工程属性里把浮点模式调整成与BSP一致路径是Project Properties - Build Properties - Toolchain Options - Floating Point。报错3内存不够编译堆栈溢出在主机编译时Eclipse的Java堆空间不足会导致编译进程被异常终止。修改C:\WindRiver\workbench-3.2\workbench\eclipse.ini文件把-Xms256m -Xmx1024m改成-Xms512m -Xmx1536m注意调整前先备份原文件另外Eclipse 3.x版本对超大堆内存支持有限超过2GB反而会启动失败。6.2 Target Simulator启动及连接目标机的流程编译完成后右键工程选择Run As - 1. VxWorks SimulatorWorkBench会启动Target Simulator加载你的VxWorks映像。启动成功的标志是控制台窗口出现类似输出VxWorks 6.8 BSP version: 1.2/6 Creation date: ... WDB: Ready.之后你就可以在WorkBench的“Target”视图中看到这个模拟目标机右键连接即可打开目标机Shell执行类似i显示系统信息、devs显示设备、ifconfig查看网络接口等命令。这个流程和真实目标板基本一致适合先把开发流程跑熟。如果模拟器启动失败先看Windows事件日志里有没有网络端口绑定失败相关记录。Simulator默认会占用主机的虚拟网络接口某些精简版Windows系统禁用了相关驱动需要手动启用“Microsoft Loopback Adapter”或安装WinPcap/Npcap。6.3 真实目标板的常见连接问题使用真实目标板时连接问题会比模拟器多有几点非常关键串口控制台乱码。VxWorks BSP默认串口波特率是9600但也有不少板卡初始化代码里改成115200。串口工具设置不对就会看到乱码。建议先把串口终端反复试几个常用波特率9600、19200、38400、115200。网络下载映像失败。WorkBench通过FTP或TFTP向目标板传输映像目标板的Bootrom需要配置正确的服务器IP和目标IP。在Bootrom启动倒计时阶段进入引导配置菜单设置boot device网络设备名如fei0或motfec0host inet address开发机IPtarget inet address本板IPhost file映像文件名如vxWorkstarget name目标机名可随便起配置好后保存并重启Bootrom会自动从开发机的FTP/TFTP目录下载vxWorks文件并启动。注意开发机上必须运行FTP服务器或TFTP服务器并且根目录指向你编译生成的工程目录。下载到一半卡住。这个问题很经典原因是网卡驱动在中断共享或FIFO缓冲配置上有问题。排除步骤先用串口控制台确认Bootrom自身的网络配置是否正常可以执行ping 主机IP测试如果ping不通检查网线是否直连、主机防火墙是否拦截ICMP和FTP端口如果ping通但下载卡住尝试将网卡工作模式设为10M半双工老BSP对千兆网口的兼容性并不好6.4 关于老工具链的一些心态建议WorkBench 3.2的年代决定了它不会像现代IDE那样对错误信息做很友好的提示。编译报错经常是一大坨诡异字符看起来吓人。我的习惯是先在命令行手动执行一次构建把输出重定向到文本文件再一点点往上翻定位第一条真正的错误发生点而不是被后面的连锁报错牵着走。另外串口乱码的问题如果排除了波特率因素检查串口线是不是交叉线。绝大多数嵌入式开发板需要用交叉串口线直连线只适用于部分带串口电平转换芯片的板子。7. 装完之后的下一步跑一个最小目标机Shell整个工具链安装配置完成后我强烈建议做一次最小功能验证而不只是停留在安装成功的界面。我的验证路径是用Pentium4 BSP创建一个VxWorks Image工程保持默认组件配置编译生成vxWorks映像文件启动Target Simulator加载该映像连接目标机Shell执行devs命令查看设备列表执行printf(hello)验证Shell可用通过WorkBench的Debug模式进行断点调试在usrInit入口下一个断点复位模拟器观察断点是否命中第6步是验证调试链路完整性的最好办法。如果断点能命中说明主机到目标机的WDB调试连接没有协议问题后面换真实板卡只是改一下连接参数的事。调试模式下WorkBench右下方的“Variables”窗口可以看到内核启动阶段的关键变量值比如系统内存起始地址、堆栈指针位置等。这一步比较有迷惑性因为内核启动早期的变量符号很多没有加载调试符号时显示的是裸地址不用纠结细节能跳转到usrRoot就算成功。完成这个最小验证之后你基本可以认定这套WorkBench 3.2 VxWorks 6.8的开发环境是可用的。后续无论是移植驱动、写应用任务还是配置实时调度子系统、中断处理逻辑都有了一个可靠的起点。折腾这套环境看起来只是安装几个软件实际上是把嵌入式开发中“主机-目标机”这个底层开发模型彻底跑通。这个模型理解到位了不管以后用VxWorks 7还是QNX、Linux很多思路都是相通的。安装过程中如果还有别的意外多留意控制台输出和日志文件的细节比反复猜测什么都有用。