ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

VxWorks 6.8与Workbench 3.2环境搭建完整指南

VxWorks 6.8与Workbench 3.2环境搭建完整指南 1. 先聊聊这套老环境VxWorks 6.8与Workbench 3.2先说结论VxWorks 6.8搭配Workbench 3.2是一套“年纪不小但生命力极强”的开发组合。VxWorks本身是风河公司推出的实时操作系统在航空航天、工业控制、轨道交通、医疗器械、网络设备这些对稳定性要求极高的领域它已经稳定运行了几十年。而Workbench 3.2是配套的集成开发环境基于Eclipse内核做了深度定制负责代码编辑、交叉编译、镜像构建、目标机调试这一整条链路。很多刚接触这个领域的朋友会觉得奇怪现在都什么年代了怎么还在学6.8这么老的版本答案很简单就像很多工厂里还在用XP系统控制设备一样嵌入式行业对“能用、稳定、经过验证”的追求远高于对“新版、花哨、功能多”的追求。VxWorks 6.8在内核稳定性、BSP支持范围、编译工具链成熟度上都经过了十几年的生产验证国内大量存量设备、科研项目、教学实验平台都跑在这套环境上。你去翻很多大学的嵌入式实时操作系统课程、研究所的项目文档用的还是vxworks6.8和workbench3.2这对组合。这篇文章要解决的事情很直接从零开始把VxWorks 6.8和Workbench 3.2的开发环境完整搭起来跑通一个最简单的“下载-运行-打印”闭环然后用工程实践的方式理解VxWorks的核心开发流程。适合谁看刚被老师或领导安排“你去把VxWorks环境装一下”的新人准备做毕业设计的学生以及想从应用开发转到嵌入式底层开发的工程师。就算你以前完全没碰过Eclipse没写过RTOS应用按照下面的步骤走也能把环境跑起来。2. 环境搭建前先把这些事想清楚2.1 安装包与许可证绕不开的第一道坎和普通软件的“下一步下一步”不同VxWorks的安装包和许可是两个独立的东西。安装包本身是一张DVD镜像文件名一般类似Wind River VxWorks 6.8之类的ISO里面包含Workbench IDE、交叉编译工具链、BSP源码、文档和示例工程。你需要事先准备好虚拟光驱软件或者解压工具推荐直接用WinMount或者PowerISO挂载ISO比解压更省事因为安装程序对光盘路径的识别更稳定。许可证这块要特别说清楚因为头一回装的人十个有八个卡在这里。VxWorks 6.8的许可模式是“许可证服务器 客户端”。也就是说你需要在一台机器上运行Wind River License Server服务把获得的.lic许可证文件加载进去然后Workbench启动时会自动去这个服务器校验。安装包里面带不带许可证文件取决于你从什么渠道拿到的光盘。如果是商业采购风河会给你正式的许可文件和注册码如果是教学试用一般会提供带有效期的评估许可。网上有各种关于“注册机”“破解”的说法我强烈不建议走这条路——这套环境的安装本来就够磨人了许可问题搞得不干净后面编译调试还会出各种莫名其妙的幺蛾子。2.2 宿主机选择为什么我劝你用Windows 7虚拟机VxWorks 6.8年代的Workbench 3.2官方支持的操作系统是Windows XP、Windows Vista、Windows 7。虽然它在Windows 10/11上也能装但你会发现一堆兼容性问题菜单显示错位、Target Server连接不稳定、调试时断时续甚至Eclipse界面直接白屏。所以我给所有新人的第一个建议是不要在你的主力Windows 10/11上直接装老老实实开一个Windows 7 SP1的虚拟机x64版本。VMware Workstation或者VirtualBox都行虚拟机配置给2核CPU、4GB内存、60GB硬盘就足够。Windows 7虚拟机里安装Workbench 3.2运行效率、连接稳定性、调试体验比在Windows 10/11上强太多。我这几年帮人排查环境问题相当一部分“连不上目标机”“编译崩溃”的案例最后发现都是宿主机版本不匹配导致的。如果你实在不想用虚拟机那至少要做到两点安装路径不要有中文和空格推荐C:\WindRiver安装完成后把Workbench的快捷方式属性里“兼容模式”设为Windows 7并以管理员身份运行。实测下来能减少大部分崩溃问题。2.3 安装路径与目录规划不然后面有你受的Workbench 3.2基于Eclipse 3.x内核对路径的“洁癖”很重。路径一旦包含中文、空格、特殊符号编译时会直接报一堆找不到头文件的错误排查起来极其痛苦。我见过有人把WindRiver装在D:\我的软件\Wind River下面结果Boot Loader工程一编译就是几百个错误改路径重装才解决。规划建议是主安装目录C:\WindRiver工作空间C:\WindRiver\workspace许可证服务器安装目录C:\WindRiver\license安装程序默认会带上但单独建目录便于管理另外注意Windows 7下C:\Program Files这类目录有UAC权限问题Workbench写文件时可能被拦截所以宁可用根目录下的自定义目录省得后面各种“Permission denied”。安装时如果杀毒软件在运行也建议暂时退出VxWorks安装包里有大量底层工具和驱动容易被误报。3. Workbench 3.2安装实操一步步来别跳步3.1 主程序安装选组件时别乱勾挂载ISO后运行安装程序界面是典型的老式InstallAnywhere风格。前面几步就是同意协议、填用户名组织名没有太多讲究。真正需要注意的是组件选择界面。Workbench 3.2的安装组件按功能划分比如Workbench IDE必选就是Eclipse壳VxWorks 6.8 Target Support必选包含目标机运行库和BSPGNU编译器工具链必选交叉编译靠它Diab编译器可选风河自家的编译器商业许可另收费Documentation建议选上离线帮助文档查起来方便Simulator必选VxSim仿真器就在这里你要是拿不准全选也没问题就是多占几个GB的磁盘空间。安装过程大约20到40分钟取决于机器性能。中途不要切出去干别的老安装程序比较敏感最小化都会偶尔出错。3.2 许可证服务器配置这个坑我一定要单独拉出来讲安装接近尾声的时候安装程序会问你“是否安装Wind River License Server”。第一次装的人很容易忽略这一步或者出于“我只要开发环境”的心态直接跳过。然后等打开Workbench时发现新建工程、编译下载全都灰着不能用提示License错误。正确的做法是在安装向导里勾选安装License Server。安装完成后从开始菜单找到Wind River License Server的管理工具界面类似一个简单的服务管理器。在这里你需要加载.lic许可证文件指定一个端口号默认27000然后启动服务。要注意的是License Server运行后会在系统服务里生成一个WRLicenseServer服务。如果你重启了虚拟机必须确认这个服务处于运行状态再启动Workbench。很多时候“Workbench打不开”“新建工程是灰的”都是这个服务没启动。提示如果Workbench提示连接License Server失败先用浏览器访问http://localhost:27000看服务是否响应不行就去Windows服务管理里手动启动WRLicenseServer。3.3 首次启动Workbenchworkspace与界面认知安装完成并配上许可证后启动Workbench。第一次启动会弹窗让你选择workspace目录这个目录存的是你的工程文件和配置文件推荐放在C:\WindRiver\workspace勾选“Use this as the default and do not ask again”。进入主界面后你会看到非常典型的Eclipse布局左上Project Explorer、右侧代码编辑区、下方Console和Problems、左侧Outline。如果你以前用过Eclipse开发Java或C/C上手没有任何难度如果没用过也不要紧记住三个关键位置Project Explorer看工程文件结构所有源码、配置、构建文件都在这里Console编译输出、运行输出、Target Shell交互都靠它Problems编译错误警告列表双击可以直接跳到对应代码Workbench默认的透视Perspective是“VxWorks开发”相关布局不用改默认就很顺手。如果你发现界面上有很多带“Target”字样的视图别慌那是连接目标机用的调试视图后面跑VxSim时会用到。3.4 老Eclipse的内存优化不调真的会卡Workbench 3.2底层的Eclipse版本比较老默认内存配置很低工程一多就卡得让人崩溃。安装目录下有个workbench.ini文件用记事本打开找到-Xmx开头的行默认可能是-Xmx256m直接改成-Xmx1024m有条件改到-Xmx2048m。同时确保-Xms设为128m避免启动时反复分配内存。改完之后重启Workbench你会发现编译大工程时的流畅度提升一个档次。这个操作很多人不知道属于典型的“老环境使用心得”实测下来效果非常明显。4. 创建VxSim工程先把BSP和镜像跑起来4.1 从Boot Loader工程开始理解BSPVxWorks的启动流程大致是Boot ROM引导→加载VxWorks镜像→启动内核→运行应用。在真实板卡上Boot ROM放在Flash里在开发阶段我们用VxSim仿真器来代替这套流程。在Workbench里创建工程要先新建一个“VxWorks Boot Loader”工程。操作路径是File → New → Project在类型列表里找到VxWorks相关的分类选择Boot Loader工程。工程向导会让你选BSPVxWinSim或者VxSim for x86选对应x86的仿真BSP即可。BSP是VxWorks里一个非常高频率出现的词全称Board Support Package板级支持包。它把CPU初始化、中断控制器、定时器、串口、网卡这些硬件相关的东西都封装了起来对上提供统一的接口。理解BSP基本上就理解了“VxWorks怎么适配一块新板子”这件事。在仿真环境里VxSim就充当了“虚拟板子”的角色。Boot Loader工程创建后直接右键Build。编译过程会调用GNU交叉编译工具链生成bootrom相关的镜像文件。第一次编译会比较慢需要几分钟之后增量编译就快了。编译完成后在工程输出目录能看到bootrom_uncmp这样的文件这就是Boot Loader镜像。4.2 编译VxWorks镜像工程不是每个工程都能直接跑光有Boot Loader还不够我们需要一个VxWorks操作系统镜像。在Workbench里这个工程类型叫“VxWorks Image Project”。创建它的时候同样要选择BSP还是VxSim for x86然后会生成一个包含VxWorks内核配置的工程。这个地方我要特别讲一下“工程依赖”的概念。我们最终运行的应用要下载到目标机上而目标机上跑的是VxWorks镜像。所以应用工程可下载内核模块DKM必须关联到一个VxWorks镜像工程编译时才能拿到正确的头文件和符号信息。Workbench里通过“Project References”来配置这个关联后面创建DKM工程的时候要注意勾选。VxWorks镜像工程创建完成后右键Build编译产物是vxWorks这个文件。它是整个操作系统的二进制镜像包含了内核、驱动、文件系统、网络协议栈等所有组件。编译VxWorks镜像还有一个隐藏的配置环节在工程属性的“Build Properties”里可以裁剪组件——比如去掉不需要的网络功能、文件系统或者添加调试组件。这玩意儿就是VxWorks最强大的地方之一模块化裁剪想让操作系统多小就能多小。新手阶段不用动这些配置默认就行。4.3 启动VxSim目标机从“没有”到“在线”编译好镜像后启动VxSim。在Workbench工具栏上有一个“Target”相关的下拉菜单选择“Launch VxSim”或者类似选项。VxSim会在你的Windows上启动一个独立的仿真进程模拟一个跑着VxWorks的x86目标机。启动VxSim后它会在后台等待Target Server连接。Target Server是Workbench和目标机之间的一座桥负责下载镜像、转发调试命令、传递标准输入输出。首次连接Workbench会引导你创建一个Target Server配置关键参数是选择目标机类型VxSim和通信方式默认WDB。配置完成后点击连接过几秒Target视图里就会显示目标机在线。这时候你在Workbench的Console里应该能看到VxSim的启动日志类似VxWorks版本号、内存大小、BSP名称之类的信息。看到这行日志说明你的VxWorks系统已经真正跑起来了。提示VxSim运行后不要手动关闭它的窗口否则Target Server会立刻断连。我见过太多人连上后乱点把VxSim窗口关了然后跑来问“为什么Target Server时断时续”。5. 跑通第一个DKM工程下载、运行、调试一条龙5.1 什么是DKM可下载内核模块DKMDownloadable Kernel Module是VxWorks 6.8里最常用的应用开发方式。它和普通Linux用户态程序不同DKM是运行在内核态的模块拥有内核的访问权限编译产物是.out文件通过Target Server下载到目标机的内存中直接执行。为什么开发应用要用DKM而不是直接编进VxWorks镜像因为迭代快。镜像是一次编译整体烧录的改一行代码要重新编整个操作系统而DKM是动态加载的改完代码重新编译下载到目标机就能跑开发效率高得多。你在VxWorks上写设备驱动、写业务逻辑、写控制算法绝大多数时候都在写DKM。5.2 写一个最小任务示例从zero到打印创建DKM工程File → New → Project选择“VxWorks Downloadable Kernel Module”工程类型。向导会要求关联一个VxWorks镜像工程就是刚才编好的那个一定要勾上。然后新建一个C源文件比如demo.c写一个最简单的任务#include vxWorks.h #include stdio.h #include taskLib.h static void demoTask(void) { int count 0; while (1) { printf(VxWorks demo running, count %d\n, count); taskDelay(sysClkRateGet()); /* 延迟1秒 */ } } void demoStart(void) { taskSpawn(demo, 100, VX_FP_TASK, 20000, (FUNCPTR)demoTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); }这段代码干了什么事taskSpawn是VxWorks创建任务的核心API参数分别是任务名、优先级数值越小优先级越高100是普通优先级、任务选项、栈大小20000字节、函数入口以及最多10个参数。taskDelay让任务暂停指定个数的系统时钟周期sysClkRateGet()返回系统时钟频率即每秒多少个tick所以这里是延迟1秒。新手写VxWorks代码最常犯的错有两个一是栈开太小任务里一用printf这种吃栈的函数就栈溢出另一个是忘记用taskSpawn直接在初始化里写while(1)死循环把整个系统卡死。记住VxWorks是RTOS所有业务逻辑都应该放在独立任务里跑而不是在启动函数里死等。5.3 编译、下载、运行、调试写好后右键工程Build编译生成.out文件。然后在Target连接状态正常的前提下右键demo.out选择“Download to Target”把模块下载到目标机内存。下载完成后打开Workbench的Target Shell或者Console视图输入demoStart启动任务。这里要注意DKM下载之后只是把代码放到了目标机内存里并不会自动执行。你需要手动调用入口函数。Workbench的Target Shell里可以直接敲C函数名来调用就像在终端里执行命令一样。按下回车的一瞬间Console里会持续刷出VxWorks demo running, count 0之类的输出。看到这个恭喜你整套VxWorks 6.8 Workbench 3.2环境从搭建到开发的全链路已经彻底跑通了。调试的话Workbench支持源码级调试。在代码里打断点右键demo.out选择“Debug As”而不是“Download”它会进入调试模式和Eclipse调试Java的体验几乎一样可以单步、看变量、看调用栈。VxWorks 6.8的WDB调试代理支持内核态调试这对写驱动的人来说简直是救命的工具。6. 常见问题与排查技巧实录6.1 安装与许可问题速查现象常见原因解决思路Workbench启动后新建工程菜单全灰License Server未启动或许可无效启动WRLicenseServer服务检查.lic文件是否加载安装过程中报“Permission denied”杀毒软件拦截或UAC权限问题退出杀软右键安装程序以管理员身份运行Workbench启动白屏或闪退Eclipse内存不足或JDK不兼容修改workbench.ini加大Xmx确认使用安装包自带JRE编译工程时报一堆“找不到头文件”路径含中文空格或工程未关联镜像工程重装到C:\WindRiver检查Project References下载DKM提示“No target available”Target Server未连接目标机确认VxSim还在运行检查Target连接状态6.2 编译报错不直观从Build Console看真相Workbench的Problems视图有时候会“谎报军情”——显示的错误不全或者跳转位置不对。老Eclipse壳子的常见毛病。当你觉得编译结果莫名其妙时一定要打开Console视图切到“Build”标签页看完整的编译输出。真正的错误信息比如语法错误、未定义符号都在那里面比Problems视图准确得多。GNU工具链的报错格式一般是文件路径:行号:列号: error: 描述照着这个格式去Console里搜索error:关键字一眼就能定位问题。6.3 运行时连接与调试问题运行阶段的问题十个有七个出在Target Server连接上。我梳理了几个高频场景都实测验证过第一VxSim成功启动但Target Server连不上。先把防火墙关掉或者放行WorkbenchVxSim会占用某个端口和Windows通信防火墙经常拦它。第二DKM下载成功但调用demoStart没反应。检查任务是否创建成功用Target Shell敲taskShow命令查看当前所有任务列表看看有没有名为“demo”的任务。如果没有说明taskSpawn参数有问题最常见的就是栈大小设太小任务创建直接失败。第三printf输出不显示。先确认你看的是不是Target Console而不是本地的Console——VxSim上所有应用输出都走Target Server转发如果打印在Target上没出现多半是Target Server的标准IO转发配置没打开回到Target Server的启动参数里检查“Enable I/O forwarding”选项。6.4 几个让我节省大量时间的避坑习惯每台新环境装完后立刻做一个干净的虚拟机快照。以后环境搞坏了不用重装直接回滚快照。修改工程配置前先备份.wpj和.wrm这类工程文件。Workbench的配置损坏恢复起来比重装还麻烦。定期备份workspace目录。Eclipse系列的workspace里有很多本地历史记录和工程状态丢了很伤。在Windows 7虚拟机里把虚拟机的内存锁定、CPU分配调高一些VxSim和Workbench双开时不至于卡死。7. 环境跑通之后学习路线与方向建议7.1 把WindShell当成你的朋友环境搭起来后很多人就急着写任务、跑业务。但我更建议你先花时间把Target Shell也叫WindShell用熟。这是VxWorks最经典的交互工具本质是一个跑在目标机上的命令行解释器直接敲命令就能和内核交互。试试这些命令i查看所有任务状态taskShow看任务详细信息memShow查看内存使用devs查看设备列表ls和cd操作文件系统。这些命令看起来简单但能帮你建立对“正在运行的系统”的直觉。很多时候你写代码发现内存泄漏第一反应就应该是用memShow看内存趋势。WindShell还支持直接调用C函数。你可以先用WindShell手动执行一个函数确认行为正确再把它封装成正式的任务函数。这种“先手动、后自动化”的开发方式在调试阶段非常高效。7.2 用配置裁剪理解VxWorks的模块化设计VxWorks一个极其重要的特性是组件可裁剪。一个完整的VxWorks镜像可能几MB但裁掉不需要的组件后可以做到几百KB甚至更小特别适合资源受限的嵌入式场景。在Workbench的VxWorks镜像工程里打开Build Properties的配置界面你会看到密密麻麻的组件列表内核、POSIX接口、网络协议栈、文件系统、USB、图形库等等。每个组件都可以勾选或取消。建议你尝试在VxSim上裁剪掉文件系统和网络组件重新编译镜像看看系统体积和启动日志的变化。这个过程帮助你理解“操作系统由什么组成”这个底层问题。VxWorks不是一个固定的黑盒而是由大量组件拼装出来的积木系统。哪些组件影响实时性哪些组件增加功耗哪些组件有依赖关系你只有亲手裁剪过才知道。7.3 从仿真到真实板卡的过渡VxSim毕竟只是仿真它的实时性、中断行为、外设模拟都和真实硬件有差距。等你在VxSim上把任务调度、信号量、消息队列这些基础概念玩明白之后一定要找一块真实板卡练手哪怕是工控机、x86小板子甚至QEMU模拟的ARM环境。迁移到真实板卡的核心是BSP。工作内容的重点从“写应用”转向“适配硬件”时钟频率的配置、内存布局的规划、串口驱动的移植、网卡驱动的绑定。在Workbench里创建新工程时选择对应的BSP编译烧录然后跑起你之前在VxSim上写好的任务代码看看哪些能直接跑通哪些跟仿真环境不一样。从仿真到板卡你会遇到中断延迟不理想、任务切换抖动、外设驱动工作不正常这些真问题。这时候你才会真正理解VxWorks的价值不在API有多别致而在于它能给你多大的底层控制力——而这恰恰是Linux这类通用系统给不了的。我个人在实际项目里的体会是VxWorks这套东西入门曲线比Linux应用开发要陡但一旦把任务模型、内存管理、BSP机制这几个核心概念打通了你会发现RTOS的世界异常清晰。环境搭建只是万里长征第一步但这一步稳了后面的路就好走了。最后再分享一个小技巧以后凡是遇到Workbench行为怪异的问题先重启License Server和Target Server再重启Workbench别急着卸了重装——这招能解决掉一半的灵异事件。
返回列表