多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

WinXP虚拟机安装Tornado2.2:VxWorks老项目维护实战指南

WinXP虚拟机安装Tornado2.2:VxWorks老项目维护实战指南 干嵌入式十年以上的朋友对Tornado2.2这个名字一定不陌生。它是风河公司当年为VxWorks 5.x准备的那套集成开发环境最常见的老搭档就是Windows XP。直到今天很多老设备、老BSP、老固件还在用这套组合维护新工程师第一次接触VxWorks时也大概率要在WinXP里把它装起来。这篇文章就围绕WinXP Tornado2.2的组合从虚拟机准备、安装步骤、环境配置到编译BSP和连接目标机把我实际操作中记得的细节、踩过的坑都写出来给需要的人一个可以直接照着做的参考。1. 为什么还要折腾WinXP上的Tornado2.21.1 这个组合现在还用在哪儿先说结论Tornado2.2不是“过气软件”而是很多长生命周期产品的最后一道维护工具。工业设备、电力保护装置、通信板卡、医疗仪器里不少还在跑VxWorks 5.5配套的开发环境就是Tornado2.2。产品卖出去五年、十年客户现场出问题厂家必须能重新编译固件、连接目标机、在线看变量这时候手里没有一套能用的Tornado2.2就很被动。另一个使用场景是学习。VxWorks的实时性设计、任务调度、信号量、消息队列这些核心概念在Workbench时代虽然也讲但Tornado2.2时代的代码更直观BSP结构更简单特别适合初学者逐行读源码。你想搞懂bootrom是怎么从Flash加载vxWorks的或者想调试一块老开发板Tornado2.2就是绕不开的入口。再加上一些老工程师已经习惯Tornado的交互方式Tornado Shell里敲几行命令就能查任务列表、看内存、调函数比现在动不动就拉一整套IDE工程轻量得多。所以不是“不思进取”是现实需求逼着大家继续用这套老环境。1.2 版本选择不是越新越好Tornado家族里常见的有Tornado 2.0、2.2以及后来的Workbench。Tornado2.2对应VxWorks 5.5支持x86、PowerPC、ARM、MIPS、ColdFire等主流架构算是Tornado系列的完全体。2.0有的功能它都有而且修了不少编译器和调试器的坑。Workbench虽然新但工程格式、BSP写法变化很大老代码根本迁不动。所以在维护老项目时正确选择就是Tornado2.2而不是硬拿Workbench去兼容。曾经有人用Workbench尝试编译VxWorks 5.5的BSP折腾两天最后还是回到Tornado2.2。这个选择背后是生态匹配问题Tornado2.2的编译器版本、头文件、链接脚本跟VxWorks 5.5是一套完整的配套体系换掉任何一环都可能踩坑。关于宿主操作系统Tornado2.2官方支持Windows NT/2000/XP。XP是最后一个能舒服运行它的Windows很多Tornado自带的工具链在Windows 7以上会出各种兼容性问题。如果手里只有Win7或Win10的机器老老实实装个WinXP虚拟机比我当初硬在Win7上兼容模式运行要省心太多。2. 动手前的准备虚拟机、镜像与许可2.1 先确认你的机器跑得动这套组合很多朋友一上来就问安装包忽略了最基础的事情宿主环境准备好没有。我建议用虚拟机方案首选VMware Workstation其次VirtualBox。WinXP本身对配置要求不高单核CPU、512MB内存都能跑但Tornado2.2安装完后大概占1GB左右空间编译BSP时吃CPU所以虚拟机建议给2GB内存磁盘20GB。WinXP的安装介质可以是老光盘也可以是你手上的合法ISO镜像文件。需要注意装WinXP虚拟机不要图省事用那种精简优化版系统一些精简版把VC运行库、ODBC、网络组件删掉了Tornado2.2装到一半可能报错。装原版干净系统最稳装完后打不打SP3不重要Tornado2.2在SP2上就很正常。网上偶尔看到“WinXP网页版”这种在线系统拿来做普通体验可以但装Tornado2.2绝对不行。开发环境必须要完整的文件系统、注册表、网络协议栈网页版根本提供不了。2.2 虚拟机安装时的系统配置细节用VMware创建虚拟机时操作系统类型选Windows XP Professional固件选BIOS硬盘用IDE接口。SATA驱动的问题在WinXP原版安装盘上经常出现IDE接口能规避大半安装失败的情况。网络适配器推荐选“桥接模式”或“仅主机模式”。如果只是为了本机练习仅主机模式就够了如果后面要连接真实的VxWorks目标机桥接模式更方便。装完WinXP后记得先装VMware Tools它能解决屏幕分辨率、鼠标流畅度和网络驱动问题。特别是网卡驱动不装Tools的话虚拟机网卡可能不是标准驱动导致后面Tornado的网络组件异常。安装完系统后先做一个干净快照。这是我最想强调的一步尽量在Tornado安装前存一个“裸系统快照”后面不管是许可证搞坏了还是注册表乱了一键恢复省掉重装系统的痛苦。2.3 Tornado2.2安装包和License准备Tornado2.2安装包的形式通常是光盘或ISO镜像里面有一个setup.exe或install.exe。拿到手后不要直接从ISO里双击运行建议将光盘内容完整拷贝到虚拟机磁盘的某个目录下再安装。原因很简单安装过程中要读大量文件光驱或虚拟光驱偶尔会读盘不稳定拷贝到本地硬盘可以避免莫名其妙的“文件未找到”错误。许可证方面Tornado2.2用的是FLEXlm授权机制。安装前先确认license.dat文件内容一般会包含SERVER行、VENDOR行和若干FEATURE行。license是绑定主机网卡MAC地址或主机名的如果之前在一台机器上生成过license换到虚拟机里用通常无效。如果你只是学习和实验建议优先找官方评估许可或公司合法授权别把时间浪费在绕许可上。还要确认一个事情目标架构需要哪些。Tornado2.2安装时会让你选Target architecturesx86、ARM、PPC、MIPS等可以多选。确认你手头BSP的CPU类型缺了对应架构支持后面编译时会报找不到编译器。3. 安装与配置核心操作一步一步来3.1 Tornado2.2安装向导全流程在WinXP虚拟机里运行setup.exe后安装向导会经历几大步。不同介质版本界面略有差异但大体流程是固定的。把光盘内容复制到本地安装的好处在于中途出错可以用“仅此一次”的耐心排查而不是反复换盘。欢迎界面点击Next选择“Install Tornado 2.2”进入授权协议页选Accept。然后是安装路径选择。到这里我多说一句安装路径的坑非常深Tornado老版本对路径中的空格和中文支持很差默认安装到C:\Tornado是最稳的选择。千万不要为了“整洁”装到C:\Program Files\WindRiver下空格会让很多make脚本直接崩掉。接下来选择安装组件。核心组件必须选Tornado核心环境、目标架构支持、主机开发工具Host Tools。VxSim模拟器建议选上它是纯软件模拟的VxWorks目标机没有真实硬件时用它学习调试非常方便。WindView和Browser属于性能分析和系统浏览工具空间够的话一并装上。许可证配置页会要求你定位许可证文件。可以直接把license.dat拷贝到本地然后在安装界面指定路径也可以先跳过装完再通过环境变量LM_LICENSE_FILE指定。后面我会详细讲环境变量的配置。安装执行复制文件阶段大约需要10到20分钟视虚拟机的磁盘性能而定。复制完成后一般会提示重启虚拟机重启就完事儿了不要急着删安装介质。3.2 环境变量和注册表修正安装完成后Tornado不会自动广播所有环境变量很多功能需要手动配置。打开系统属性进入“高级”标签页的环境变量设置需要确认四个关键变量。WIND_BASE指向Tornado安装根目录例如C:\Tornado。WIND_HOST_TYPE指定主机类型Windows统一填x86-win32。WIND_REGISTRY填Tornado Registry所在主机名或IP单机使用填本机IP或localhost。PATH中必须追加%WIND_BASE%\host\x86-win32\bin这样命令行里才能直接使用GNU make、ccmips、windshell等工具。变量名示例值作用WIND_BASEC:\TornadoTornado安装根目录定位工具链和BSPWIND_HOST_TYPEx86-win32主机编译器平台必须与Tornado安装版本匹配WIND_REGISTRYlocalhost目标机Registry服务地址PATH%WIND_BASE%\host\x86-win32\bin让命令行能找到make和交叉编译器环境变量配置完成后打开一个新命令行窗口执行echo %WIND_BASE%能正确输出路径说明设置生效。这里有个小细节环境变量修改后所有已经打开的命令行窗口不会自动更新必须新开窗口才生效。3.3 启动Tornado并做首次自检从开始菜单中找到“Tornado 2.2”程序组先启动“Tornado Registry”。这是个后台服务负责登记目标机注册信息。启动成功后任务栏或托盘区会出现Wind River Registry的图标。如果Registry启动失败后面Target Server怎么连都连不上。接着启动“Tornado”主程序会打开主IDE窗口。首次启动时如果找不到license程序会弹窗让你指定许可证文件位置。在环境变量LM_LICENSE_FILE里指明license.dat完整路径重启程序即可。完成基础启动后我习惯做一个自检打开Tornado Shell窗口输入“i”命令查看系统信息。如果Shell能正常响应说明Tornado主程序没问题。再做一次编译自检进入某个BSP目录比如target\config\pc486执行make clean确认交叉编译环境正常工作。4. 编译一个BSP并连目标机的实战记录4.1 用pc486 BSP编译vxWorks镜像自检通过后找一份最标准的BSP来练手。Tornado2.2自带target\config\pc486这是x86平台的标准BSP适合学习。先用命令行进入该目录。注意Windows下进入BSP目录后不要直接用系统自带的make一定要在Tornado环境中调用GNU make。最简单的办法是使用Tornado自带的命令行环境或者手动确认PATH中Tornado的bin目录排在最前面。执行make clean清掉历史编译产物。接着执行make bootrom编译一个完整bootrom映像。这个过程的本质是把BSP引导代码、网络协议栈、文件系统驱动全部编译链接生成目标机启动用的bootrom。编译耗时取决于虚拟机性能一般三到五分钟。编译完bootrom后想要一个完整的vxWorks内核镜像执行make vxWorks。它与bootrom的区别在于bootrom负责从主机或Flash加载内核而vxWorks本身是真正的应用运行环境。调试场景下经常只编bootrom配合网络download vxWorks。4.2 配置连接参数和Target Server目标机上的VxWorks启动后Tornado通过Target Server与目标机建立调试通道。在Tornado主界面选择Tools菜单下的Target Server配置新建一个Server配置。最关键的是设置目标机的IP和启动行。VxWorks的启动行bootline在BSP的config.h里配置常见格式类似 dc(0,0)host:vxWorks h192.168.0.1 e192.168.0.2 utarget pwvxWorks otargeth是主机宿主机IPe是目标机IPu和pw是登录目标机的用户名密码o是启动参数。这些参数必须和Target Server里填写的IP完全一致否则会出现目标机能启动但调试器连不上的情况。Target Server配置里连接协议一般选wdbrpc目标机类型选对应架构目标机IP填写config.h里e参数对应的地址。配置完成后保存在Target Server列表里启动观察状态是否变为Connected。4.3 Tornado Shell里跑一个最小验证成功连接后打开Tornado Shell窗口输入指令i显示目标机系统信息和任务列表ls列出当前目录文件sp 函数名在目标机上启动一个任务执行td显示任务详细信息第一次连上目标机时我最喜欢先跑一个printf测试。在Shell里输入printf(hello from tornado\n)目标机的串口或控制台能输出这段字符说明整条链路通了。别小看这步验证它能区分问题是出在编译阶段、网络阶段还是一开始的Target Server配置。如果手头没有真实硬件用VxSim模拟器代替目标机步骤几乎一样只是目标机IP填本机回环地址。我学习期间就是用VxSim把任务调度、信号量这些机制捋顺了再去碰真实硬件上手速度明显快。5. 这些年踩过的坑问题排查速查表5.1 安装阶段的高频问题安装阶段的坑最磨人因为往往发生在流程最早期。比较典型的问题是安装向导进行到中途报错原因是安装目录带了空格或中文解决办法是卸载后重装到纯英文路径。安装时提示“无法复制文件”或者“安装源不可用”大概率是光驱读盘不稳定按我之前说的先把整个安装介质拷贝到本地磁盘再装。还有人的杀毒软件实时监控会拦截Tornado的驱动程序注册安装前建议暂时禁用杀毒软件。许可证无效是另一大类。启动Tornado时报license not found或invalid host先检查环境变量LM_LICENSE_FILE是否指向正确文件再确认license里的主机信息是否和当前网卡匹配。虚拟机安装时尤其容易踩这个坑因为VMware虚拟网卡MAC地址可能和生成license时不一致。5.2 编译阶段的经典报错编译BSP时最常见的报错是“make不是内部或外部命令”这说明Tornado的bin目录没有加入PATH或者当前命令行环境不对。Windows的cmd不会自动加载系统环境变量的最新修改必须新开窗口。“couldnt find wtxreg.h”这类头文件找不到的错误通常和WIND_BASE没有正确设置有关。请检查环境变量是否指向Tornado根目录不要指向BSP子目录。还要注意大小写问题一个老同事的BSP编译不过去最后发现是头文件include路径中少了一个大写字母Linux下的路径和Windows不同但跨平台BSP对大小写仍然敏感。路径中有空格导致的“No such file or directory”同样常见。不仅是安装路径BSP路径也不能放在带空格的目录下比如“Desktop\My BSP”这种目录会直接让make脚本失效。把整个工程放到C:\work这种简单路径下。5.3 连接阶段的疑难杂症Target Server启动后一直处于Connecting状态先检查防火墙。WinXP自带防火墙默认会拦截Tornado的通信端口在防火墙设置里放行Tornado相关程序或临时关闭测试一遍。目标机与宿主机网络不通是最常见的连接问题。从宿主机ping一下目标机IP如果ping不通问题在VxWorks的bootline配置重点检查config.h里的h、e参数和网卡驱动。如果ping通但Target Server仍连不上再检查目标机上是否启动了wdb agent很多BSP默认没有把WDB组件编进去需要在config.h里打开WDB配置。串口连接方式下COM口选错或波特率不匹配是常见原因。Tornado2.2默认串口波特率通常是9600或115200要跟目标机VxWorks配置保持一致。虚拟机的串口使用命名管道时还需要确认管道两端都正确打开VxWorks目标机端和宿主机端缺一不可。现象可能原因排查方向Registry图标不出现服务未启动或端口被占确认wtxregd进程释放WDB端口Target Server一直Connecting网络不通或IP配置错ping目标机检查bootline编译报command not foundPATH未设置确认bin目录已加入PATHShell执行sp后无输出WDB组件没编进去检查BSP的config.h WDB配置连接很快但Shell无响应内存窗口配置不对检查目标机vxWorks内存池参数5.4 从Tornado到Workbench的迁移思路写到这里很多人会问老环境撑到现在是不是该考虑迁移了我的看法是不要把迁移当作一个“升级项目”而要当作一次“渐进替换”。新项目坚决用新工具链比如风河Workbench配合新版本VxWorks。老项目则维持Tornado2.2哪怕机器再破也保留一套专用环境。两个版本可以共存但不要试图在一个Tornado工程里做跨版本编译。迁移时先把BSP源码签出到新工作目录在Workbench里重建工程逐个解决编译错误。这个过程中你会发现很多错误根本不是语法问题而是老代码依赖了Tornado特有的宏和链接行为。根据我个人经验维护老设备最怕的不是环境老而是环境的不可复现。装一套Tornado2.2在WinXP虚拟机上把整个虚拟机文件夹备份到网盘或移动硬盘比任何文档都可靠。同事离职、电脑报废都不影响你恢复开发环境。最后分享一个让很多人忽略的小技巧Tornado2.2安装在中文版WinXP上时把区域语言选项里的“非Unicode程序语言”保持为“中文(中国)”没问题但如果你做的是纯英文BSP建议切成“英语(美国)”再编译。某些老编译器对本地代码页敏感切英文后可能解决不少莫名其妙的编码报错。这台虚拟机做干净快照之后再捣鼓实验心里就有底了。
返回列表