老系统也能跑
为什么要管老系统
老系统还在干活:财务软件、工控程序、只认某个版本 Windows 的专用工具。很多早就从物理机搬进了 VMware。要让它们不改一行就能在 keelOS 上跑,就给它们 ESXi 和 QEMU/KVM 给的那套虚拟硬件。
补上了什么
- 传统 BIOS 引导的虚拟机用 SeaBIOS 当固件,和 QEMU/KVM 一样:
"bootrom": "bios"。 - 照硬件手册新写的三个设备:PIIX3 IDE 控制器(硬盘和 ATAPI 光驱)、AMD PCnet 网卡、带坐标板的 UHCI USB 控制器,远程控制台里指针跟手。
- VGA 和 VBE 显示:从 BIOS 的文字画面、安装程序的 16 色图形模式,到高分辨率。
- 修正了新系统从来不走的那些路径:PIT 计数为 0、8259 的伪中断、PCI 只读寄存器、VGA 写模式、任务切换等。
- APICv 默认打开。XP 安装的"安装设备"一步,不开要 9 分半以上,打开后 2 分半;KVM 是 2 分钟。
三个新设备都支持挂起和恢复。模板里已经选好了这套硬件:keel vm create --template windowsxp。
实测
- Windows XP Professional SP2:桌面、网络、重启、关机、挂起恢复、RDP。
- Windows Server 2003 R2(日文版):桌面、网络、重启、关机。
- Windows 7 SP1 x64:指针跟手,设备管理器里没有不明设备。
- BIOS 引导的 Windows 10、Haiku,以及 BIOS 引导的 FreeBSD、Debian 也都能启动。
- XP 安装到一半、正在拷文件时宿主重启:虚拟机暂停 35.8 秒,接着拷。
限制
- Windows XP 是支持的最老的系统。DOS、Windows 3.x、Windows 9x 不在范围内:它们要软驱、声卡和更快的 VGA,这些是 DOSBox、86Box 这类模拟器的长项。
- BIOS 虚拟机还没有启动顺序:SeaBIOS 先试硬盘再试光驱。
- ESXi 的 LSI Logic SCSI、PVSCSI、VMXNET3、E1000e 还没做。下一步是从 ESXi 导入虚拟机的工具。