VMware虚拟机搭建VxWorks 6.9开发环境全攻略

📅 发布时间:2026/7/31 10:02:10
VMware虚拟机搭建VxWorks 6.9开发环境全攻略
1. 项目缘起为什么要在VMware里跑VxWorks如果你接触过嵌入式开发尤其是工业控制、航空航天、网络设备这些领域大概率听说过VxWorks的大名。作为一款老牌、强悍的实时操作系统它和Windows、Linux这类通用操作系统走的完全是两条路。VxWorks追求的是极致的确定性你的任务必须在确定的时间内得到确定的响应。这种特性让它成为了对可靠性要求极高的关键任务系统的首选。但问题来了VxWorks通常运行在特定的目标硬件上比如一块定制的工控板、一个网络处理器或者一台航空电子设备。对于开发者来说每次调试都要烧写到硬件效率太低成本也高。这时候虚拟化技术就成了救星。在VMware这样的虚拟机里运行VxWorks相当于在PC上凭空“造”出了一块标准的、可重复利用的“开发板”。编译、下载、调试、重启整个流程都在软件层面完成速度快环境干净还不用担心物理硬件损坏。我最近因为一个遗留项目的维护需要重新搭建VxWorks 6.9的开发环境。手头没有现成的物理板卡用VMware虚拟机就成了最经济、最便捷的选择。整个过程下来虽然官方文档有些年头了但核心步骤依然有效只是中间有几个“坑”需要特别注意。这篇文章我就把在VMware Workstation 17 Pro上成功运行VxWorks 6.9的完整过程以及我踩过的那些坑和解决方案详细记录下来。2. 环境准备选对“原料”是成功的一半在开始安装之前准备工作至关重要。VxWorks 6.9是一个比较经典的版本对宿主环境和工具链有特定要求不能随便拿个最新版的VMware和Windows就来搞。2.1 软件工具清单与版本考量首先你需要备齐以下软件我强烈建议使用与我相同的版本可以最大程度避免兼容性问题宿主操作系统我使用的是Windows 10 专业版 64位。Windows 11理论上也可以但考虑到VxWorks 6.9年代较早在Win10上经过的测试更充分稳定性更有保障。确保系统已安装所有更新并关闭杀毒软件的实时防护至少在安装过程中以免误拦截。虚拟机软件VMware Workstation 17 Pro。这是当前主流且稳定的版本。不建议使用VMware Player因为它缺少一些高级网络配置功能。VMware 16也可以但17对现代CPU的虚拟化支持更好。至于网上流传的“许可证密钥”请务必从VMware官网获取合法试用或购买正版使用非授权版本可能在关键步骤出现无法预料的问题。VxWorks 6.9 安装包你需要拥有合法的VxWorks 6.9安装介质通常是ISO镜像或安装文件。这个版本包含了Wind River Workbench开发环境和VxWorks源代码。请通过正规渠道从风河公司获取。BSP板级支持包这是关键中的关键。VxWorks需要针对特定硬件在这里是虚拟硬件的BSP才能启动。对于VMware虚拟机风河官方提供了一个名为VMware的BSP。请确认你的VxWorks 6.9安装包中包含了这个BSP路径通常类似于...\vxworks-6.9\target\config\vmware。注意网络上可能流传着一些第三方修改的BSP或针对旧版VMware如VMware ESX的BSP对于VMware Workstation请优先使用风河官方提供的vmwareBSP这是最稳妥的选择。2.2 创建“虚拟开发板”VMware虚拟机配置详解打开VMware Workstation点击“创建新的虚拟机”。这里的选择会直接影响后续VxWorks的安装和运行。典型与自定义选择“自定义高级”这样我们可以精细控制每一个参数。硬件兼容性选择“Workstation 17.x”。保持与虚拟机软件版本一致。安装来源选择“稍后安装操作系统”。这是一个非常容易出错的点。不要在这里选择任何ISO镜像因为我们不是要安装Windows或LinuxVxWorks的安装方式完全不同。客户机操作系统选择“其他”版本也选择“其他”。因为VxWorks不在VMware的预设列表里。虚拟机名称与位置取一个清晰的名字如“VxWorks 6.9 Dev”。位置选择一个剩余空间大于20GB的磁盘分区。处理器配置核心数量建议1-2个即可。VxWorks 6.9对多核支持SMP需要特定配置初期调试单核更简单。务必在“虚拟化引擎”中勾选“虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”。这是硬件辅助虚拟化必须开启否则虚拟机性能极差甚至无法运行某些系统。内存分配512MB - 1GB足够。VxWorks内核本身非常精简分配过多内存反而可能被BSP的初始化代码忽略或处理不当。网络连接这是另一个关键点。选择“使用桥接模式网络”。为什么是桥接模式桥接模式让虚拟机像一台真实的、与宿主机并列的机器一样接入局域网拥有独立的IP地址。这对于后续通过网络FTP、Telnet向VxWorks传输文件、进行调试至关重要。NAT模式虽然简单但端口映射和网络发现会更麻烦。操作在“自定义硬件”中找到网络适配器选择“桥接模式”并勾选“复制物理网络连接状态”。I/O控制器类型保持默认的“LSI Logic”即可。磁盘选择“创建新虚拟磁盘”。磁盘类型用“SCSI”。最大磁盘大小建议设置8-10GB并选择“将虚拟磁盘拆分成多个文件”。这个磁盘主要用于存放VxWorks的编译输出文件、项目文件等并非系统盘。磁盘文件默认名称即可。移除不必要的硬件在自定义硬件列表里找到“USB控制器”、“声卡”、“打印机”直接点击“移除”按钮将它们删掉。VxWorks不需要这些设备移除它们可以让虚拟机配置更干净。创建完成后先不要启动虚拟机。我们还需要对虚拟机设置进行几项关键调整。3. 核心配置调优让虚拟机“长得像”一块开发板右键点击新建的虚拟机选择“设置”进入详细配置页面。3.1 修改虚拟机硬件兼容性隐藏选项虽然创建时选了Workstation 17.x但为了最大兼容性我们可以将其改为稍旧的格式。点击“选项”标签页选择“高级”在右侧找到“固件类型”。将其从“UEFI”改为“BIOS”。VxWorks 6.9的引导程序bootrom通常是为传统的BIOS引导方式设计的使用UEFI可能会导致无法引导。3.2 调整处理器虚拟化选项点击“硬件”标签页选择“处理器”。在右侧“虚拟化引擎”下确保以下两项已勾选虚拟化 Intel VT-x/EPT 或 AMD-V/RVI应已勾选虚拟化 IOMMU (IO 内存管理单元)这个建议取消勾选。IOMMU是给像Linux KVM、Windows Hyper-V这类更底层的虚拟化用的对于在VMware里跑一个客户机操作系统通常不需要开启有时反而会引起问题。3.3 配置串行端口控制台输出这是调试阶段最重要的通道。VxWorks在启动初期网络还没起来的时候所有的内核启动信息、调试输出都通过串口Serial Port打印。我们需要在VMware里模拟一个串口并将其输出重定向到宿主机的文件或窗口。在“硬件”标签页点击“添加”按钮。选择“串行端口”点击“下一步”。选择“输出到文件”。这是最方便的方式所有串口输出会实时写入一个文本文件方便你查看和搜索日志。点击“浏览”在宿主机上找一个位置创建一个文件例如C:\VxWorksLog\com1.log。请确保路径存在且你有写入权限。点击“完成”。此时硬件列表里会多出一个“串行端口”设备状态为“已连接”。关键一步双击新添加的“串行端口”或者选中后点击“高级”。确保“I/O模式”是“轮询”而不是“中断”。VxWorks的串口驱动在虚拟环境下使用轮询模式通常更稳定可靠。至此你的“虚拟开发板”就配置好了。它拥有一个基于BIOS的x86平台、一个桥接网卡、一个输出到文件的串口以及一个干净的SCSI硬盘。这个环境已经非常接近一块标准的x86开发板了。4. 构建引导镜像Bootrom与内核VxWorks现在我们切换到Wind River Workbench环境来编译生成需要的镜像文件。Workbench是基于Eclipse的集成开发环境是VxWorks 6.x系列的标准开发工具。4.1 创建Bootrom项目Bootrom相当于PC的BIOS它的作用非常有限初始化最基础的硬件CPU、内存、串口、网卡然后从网络TFTP/FTP或本地磁盘加载真正的VxWorks内核镜像。启动Wind River Workbench。选择File - New - Wind River Workbench Project。在“Project Name”中输入例如bootrom_vmware。在“Project Type”中选择Boot Loader Components。点击“Next”在“BSP Selection”页面这是最关键的一步。在列表中找到并选择vmware。如果你找不到说明你的VxWorks安装不完整或者BSP路径没有正确识别。请检查安装目录下的target\config文件夹。继续“Next”在“Boot Loader Configuration”中选择Boot ROM。Bootrom有两种类型Boot ROM是压缩的体积小Boot ROM (uncompressed)是未压缩的加载更快但体积大。我们选择标准的Boot ROM即可。在“Boot Line”参数中这是告诉Bootrom去哪里加载VxWorks内核。我们需要根据后续的网络配置来填写。一个典型的用于网络加载的bootline如下fei(0,0)host:vxWorks h192.168.1.100 e192.168.1.50 utarget pwtarget tntargetfei(0,0): 表示使用第一个网络适配器fei是VxWorks对PCnet系列网卡的驱动名VMware的默认虚拟网卡兼容此驱动。host:vxWorks: 从主机host加载名为vxWorks的文件。h192.168.1.100: 宿主机的IP地址即你的Windows电脑在桥接网络下的IP。e192.168.1.50: 目标机虚拟机的IP地址。这个IP需要和宿主机在同一网段。utarget pwtarget tntarget: FTP登录的用户名、密码和目标名。我们后续会在宿主机搭建一个FTP服务器并使用这些凭证。你也可以先使用一个简单的本地加载配置如ata0,0(0,0)host:vxWorks表示从第一个IDE硬盘加载但网络加载是更主流的开发方式。点击“Finish”完成项目创建。Workbench会自动生成一个默认的bootConfig.c等配置文件。右键点击项目选择Build Project。编译成功后你会在项目的default文件夹下找到生成的文件其中最重要的就是bootrom.bin也可能是bootrom或bootrom.sys具体看BSP设置。这个文件就是我们的引导镜像。4.2 创建VxWorks内核项目VxWorks内核才是真正的操作系统它包含了任务调度、内存管理、文件系统、网络协议栈等所有核心组件。同样File - New - Wind River Workbench Project。项目名例如vxworks_vmware。项目类型选择Operating System Kernel。点击“Next”同样选择vmwareBSP。点击“Finish”创建项目。这会创建一个包含默认内核配置prjParams.h的项目。在项目导航器中找到并打开kernel configuration工具通常是一个叫“内核配置”的视图或右键菜单选项。在这里你可以像勾选菜单一样添加或移除组件。必须包含的组件INCLUDE_NETWORK网络支持、INCLUDE_FTP_SERVER或INCLUDE_TFTP_CLIENT取决于你用什么协议加载、INCLUDE_SHELL命令行外壳用于调试。建议包含的组件INCLUDE_PCI_BUSPCI总线支持、INCLUDE_DEBUG调试支持、INCLUDE_WDBWind River Debugger 支持。对于初学可以直接使用默认配置它通常包含了最基本的功能。配置完成后保存。然后右键点击项目选择Build Project。编译过程会比Bootrom长一些。编译成功后在default文件夹下会生成vxWorks文件。这个就是可引导的内核镜像。4.3 宿主机服务搭建FTP与TFTP为了让虚拟机里的Bootrom能通过网络加载vxWorks内核我们需要在宿主机Windows上运行一个文件服务器。方案一使用FTP服务器推荐FTP更稳定适合传输较大的文件。你可以使用任何轻量级FTP服务器软件如FileZilla Server。安装并启动FileZilla Server。创建一个新用户用户名和密码就设置为我们在bootline里写的target。为该用户设置一个主目录例如C:\tftproot。将编译好的vxWorks内核文件复制到这个目录下。确保Windows防火墙允许FileZilla Server通过。方案二使用TFTP服务器TFTP协议更简单常用于网络引导。Windows本身没有内置TFTP服务器可以使用Tftpd64这类小工具。运行Tftpd64在“Current Directory”中设置服务器目录例如C:\tftproot。将vxWorks文件放入该目录。Bootline需要相应修改使用fei(0,0)host:vxWorks h192.168.1.100这种更简单的格式省略用户密码并确保BSP配置中包含了TFTP客户端支持。我个人更推荐FTP因为它在传输完整性和稳定性上更好。准备好服务器后务必将宿主机防火墙中对应端口FTP的21TFTP的69打开或者临时关闭防火墙进行测试。5. 启动与调试从黑屏到命令行激动人心的时刻到了我们要启动这台“虚拟开发板”。转换Bootrom格式VMware虚拟机不能直接引导.bin文件。我们需要将bootrom.bin转换为VMware认可的引导磁盘镜像。使用一个名为mkisofs或genisoimage的工具它通常在Cygwin或一些开源工具包里有。打开命令行执行mkisofs -o bootrom.iso -b bootrom.bin -no-emul-boot -boot-load-size 4 -boot-info-table .这条命令会生成一个bootrom.iso文件。-b bootrom.bin指定了引导扇区文件。配置虚拟机引导回到VMware打开虚拟机设置。在“硬件”标签页选择“CD/DVD (SATA)”。在右侧选择“使用ISO映像文件”然后浏览并选中刚才生成的bootrom.iso。同时勾选“启动时连接”。启动虚拟机点击VMware的“开启此虚拟机”。虚拟机启动后会首先从虚拟光驱即我们的bootrom.iso引导。观察串口输出虚拟机屏幕很可能是一片漆黑或者显示一些BIOS信息后停住。不要慌这才是正常现象。VxWorks的启动信息都输出到我们之前配置的串口了。立即用文本编辑器如Notepad打开你设置的日志文件C:\VxWorksLog\com1.log。你应该能看到类似下面的滚动信息Initializing... CPU: GenuineIntel Pentium Pro/II/III Memory Size: 0x20000000 (512MB) ... Attached TCP/IP interface to fei unit 0 IP: 192.168.1.50 Mask: 255.255.255.0 ... Boot device: fei Unit number: 0 Processor number: 0 File name: vxWorks Inet on ethernet (e): 192.168.1.50:ffffff00 host inet (h): 192.168.1.100 user (u): target ftp password (pw): target flags (f): 0x0 target name (tn): target Attaching to TCP/IP interface... Done. Loading... ################################################## 100% Starting at 0x00100000...如果看到了“Loading...”和进度条并且最后显示“Starting at ...”恭喜你Bootrom已经成功通过网络从你的FTP服务器下载了vxWorks内核并开始启动了进入VxWorks Shell内核启动后串口日志会继续输出大量内核初始化信息。当看到类似-或者value 0 0x0这样的提示符时说明VxWorks已经启动完成并且Shell组件已激活。此时你可以在串口终端或者如果你配置了Telnet也可以用Telnet连接虚拟机的IP192.168.1.50中输入命令了。尝试输入i查看所有任务或者help查看命令列表。6. 常见问题与深度排错指南即使按照步骤操作你也可能会遇到一些问题。下面是我在搭建过程中遇到的和可能遇到的典型问题及其解决方法。6.1 虚拟机启动后黑屏串口日志无输出可能原因1串口配置错误。检查确认虚拟机设置中串口已“连接”且输出文件路径正确、有写入权限。尝试将输出改为“输出到命名管道”例如\\.\pipe\com_1然后用putty等终端软件选择“串行”连接该管道名进行实时查看。检查串口的I/O模式是否设置为“轮询”。可能原因2Bootrom镜像制作有误或未正确引导。检查虚拟机设置中CD/DVD是否连接了正确的bootrom.iso文件并且是“启动时连接”。可以尝试在虚拟机启动时按F2进入虚拟BIOS查看引导顺序确保CD-ROM在硬盘之前。检查mkisofs命令是否执行成功生成的ISO文件是否有效。可以尝试用虚拟机挂载一个Linux Live CD如果能正常引导说明虚拟机本身没问题问题在ISO。可能原因3硬件兼容性问题。检查虚拟机设置中的“固件类型”是否为“BIOS”。检查是否错误地移除了某些必要硬件确保至少有处理器、内存、硬盘、CD/DVD、网络适配器和串口。6.2 Bootrom卡在“Attaching to TCP/IP interface...”或加载失败可能原因1网络不通。检查宿主机和虚拟机的IP是否在同一网段在宿主机上ping虚拟机的IP192.168.1.50是否能通注意在Bootrom完全启动并加载内核前虚拟机还没有IP此时ping不通是正常的。但Bootrom自身会通过BOOTP/DHCP或静态配置获取IP如果配置错误会卡在这里。检查宿主机防火墙是否阻止了FTP/TFTP连接最直接的测试方法是暂时完全关闭Windows防火墙。检查VMware网络适配器模式是否为“桥接模式”并且桥接到了正确的物理网卡如果你有有线/无线多个网卡。可能原因2FTP/TFTP服务器问题。检查FTP服务器是否已启动用户认证信息u,pw是否正确vxWorks文件是否已放入服务器的正确目录并且文件名与bootline中的host:后面的名字完全一致区分大小写检查使用FTP客户端如FileZilla Client从本机127.0.0.1连接你自己的FTP服务器看能否成功登录并看到vxWorks文件。可能原因3Bootline参数错误。检查bootline字符串的拼写和格式必须绝对正确不能有多余空格或错误标点。特别是设备名fei(0,0)括号是英文括号逗号间没有空格。6.3 内核启动后崩溃或重启可能原因1内核组件冲突或配置错误。检查在Workbench的内核配置中是否添加了某些实验性或不稳定的组件尝试创建一个最简内核只包含INCLUDE_SHELL和INCLUDE_NETWORK看是否能稳定启动。检查prjParams.h文件中是否有自定义的、错误的宏定义与BSP默认的config.h文件是否有冲突可能原因2内存配置问题。检查虚拟机分配的内存大小是否在BSP支持的范围内vmwareBSP通常能自动检测内存但如果分配过大如超过2GB旧版BSP的初始化代码可能处理不了。尝试将虚拟机内存调整为512MB。可能原因3编译器/工具链问题。检查Workbench项目是否使用了正确的编译器和编译选项确保你编译的是default构建规格通常是SIMNTgnu或PENTIUM4gnu并且没有修改过默认的编译和链接参数。6.4 如何从硬盘引导摆脱网络依赖每次开发都依赖网络加载内核确实麻烦。一旦系统稳定我们可以将VxWorks安装到虚拟硬盘上实现本地引导。准备硬盘镜像首先需要让VxWorks能识别并格式化虚拟硬盘。这需要在内核中包含INCLUDE_DISK、INCLUDE_DOSFS等组件并编写一段启动脚本。创建启动脚本在VxWorks Shell中你需要先配置网络如果内核已包含网络然后使用usrFtp或tftp命令将vxWorks内核文件下载到内存再使用diskFormat和dosFsVolFormat命令格式化虚拟硬盘的第一个分区例如ata0,0最后使用copy命令将内存中的内核镜像写入硬盘。修改Bootrom创建一个新的Bootrom项目将bootline改为从硬盘加载例如ata0,0(0,0)host:/ata0/vxWorks。编译生成新的bootrom.iso。切换引导用新的ISO引导Bootrom会直接从虚拟硬盘加载内核无需网络。这个过程涉及更多VxWorks系统编程知识是进阶操作。在VMware里成功运行VxWorks 6.9就像是搭建了一个完美的沙盒。它隔离了物理硬件的不稳定因素提供了快照、克隆等强大功能让系统调试和测试变得高效而安全。我花了大约两天时间才把整个环境完全调通大部分时间都耗在了网络配置、BSP选项理解和启动参数调试上。最大的体会是日志是你的第一盟友。无论是串口日志还是Wind River Debugger的日志里面包含了几乎所有问题的线索。遇到问题别急着乱改静下心来看日志从最早出现的错误信息开始分析往往能事半功倍。另一个建议是在修改任何重要配置如BSP文件、内核选项前给虚拟机拍个快照这样你永远有一条安全的退路。