我想使用 QEMU 来模拟 MS-DOS 系统,该系统将运行需要与 SCSI 磁带设备通信的非常具体的专有软件。
我发现 QEMU 提供了对主机 SCSI 总线的直通访问,而且它似乎还可以模拟客户操作系统可以使用的 SCSI 适配器。但我几乎没有使用 SCSI 设置 QEMU 的经验,而且文档有点复杂。
以下是我目前的 QEMU 命令行:
qemu-system-i386 -m 32 -drive file="dosdrive.img",format=raw \
-option-rom "8xx_64.ROM" \
-drive file=/dev/sg2,if=scsi,bus=0,unit=0,format=raw \
-device dc390
模拟的 BIOS 肯定能看到磁带驱动器:
...看起来 DOS 成功加载了 ASPI 驱动程序。但是,当软件实际尝试从 SCSI 设备读取时,它会挂起,并且我看到来自 QEMU 的这些错误:
lsi_scsi: error: Unhandled writeb 0xbc = 0x0
lsi_scsi: error: IO mappings not implemented
这是否意味着我运气不好,QEMU 无法与 SCSI 磁带驱动器配合使用?还是我的配置有问题?
答案1
我无法直接提供帮助,但是:
- 尝试最新的 QEMU 4 和 git 开发版本 - 也许它已经修复(我在当前 git 中找不到任何错误消息字符串,除了:“lsi_scsi:”和其他消息) - 根据https://wiki.qemu.org/ChangeLog/4.0#SCSI-> “LSI53C8xxA 和 ESP/PCscsi 并行 SCSI 适配器中的几个错误修复。”
- 您的软件可以在没有直通的情况下(使用图像文件)工作吗?
- 磁带是否能在其他 msdos 软件中使用(可能是 fastapehttp://www.dcee.net/Files/Utils/)?
提示:始终发布所用组件的确切供应商/名称/版本:
- 库姆
- 8xx_64.ROM(也许旧版本适合您并且不需要实现此映射)
- Tekram DC390(W、U、F..?)- PCI SCSI 控制器附加板,带有 SCSI 处理器 SYM53C895A?在 Linux 下使用 sym 驱动程序https://github.com/torvalds/linux/blob/master/drivers/scsi/Kconfig#L907?
- ASPI 驱动程序(LSI aspi8xx.sys?)
- 您的磁带驱动器是 ULT3580-TD5 吗?
- 您的主机系统是 x86/x64?
- 发行版,KVM 支持吗?
我已经在 ubuntu 19.04 x64 下编译了 qemu git,以便将其与您的 qemu/rom 版本进行比较
./i386-softmmu/qemu-system-i386 --version
QEMU emulator version 4.0.50 (v4.0.0-312-gdf06df4f41-dirty)
./i386-softmmu/qemu-system-i386 -nographic -device dc390 -option-rom "../lsi_bios/8xx_64.rom"
SeaBIOS (version rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org)
iPXE (http://ipxe.org) 00:03.0 C980 PCI2.10 PnP PMM+07F912F0+07EF12F0 C980
LSI Logic Corp. Symbios SDMS (TM) V4.0 PCI SCSI BIOS, PCI Rev. 2.0, 2.1
Copyright 1995-2001 LSI Logic Corp.
PCI-4.19.00
所以我找到了一个更新的 rom 4.16/4.19,我想:)
我从 https://www.broadcom.com/site-search?q=lsi_bios.zip
所以我认为你应该升级你的组件,qemu git build 很简单,不需要安装,所以你可以尝试一下
另一个检查是使用当前的 qemu/rom 和 qemu 中的 linux 来测试 SCSI 通信是否正常(也许这里的问题不仅是 qemu,而且还有 DOS 驱动程序)
我也在 qemu 邮件列表中看到了你的帖子
也许这有帮助:https://k1024.org/posts/2019/2019-02-22-qemu-scsi-tape-passthrough/
我会这样做:
主机 x64:Debian/Ubuntu - 我倾向于使用最新版本的发行版来减少与 qemu 4 的依赖问题和其他版本冲突,我有一个可移动磁盘插槽,带有专用硬盘,可用于此类测试
检查磁带驱动器是否在 Linux 下完美运行(尽可能减少 DOS 下的问题),也许有一个可用的磁带访问的严格测试(例如读/写基准测试,https://blog.devnu11.net/2009/11/benchmarking-tape-drives/ 或使用 mt 工具http://fibrevillage.com/storage/121-linux-mt-control-magnetic-tape-drive-operation)——如果在生产中使用,我会进行严格的检查
从源代码构建 qemu 4.0 (qemu-system-i386)(或找到预构建包)
使用 (virt-?)scsi-path-through 在 qemu 中安装 32 位 Ubuntu/Debian (相同版本) 非 UI 最小系统 (安装速度更快,仅用于测试)
像步骤 2 那样重新测试(但在 qemu 内部)
--> 现在 100% 确定 scsi-pass-through 可以正常工作,不会出现数据故障/奇怪的错误等。并且在此阶段之前,更容易在 qemu 邮件列表上获得帮助 - 当 DOS 发挥作用时,情况会变得复杂 :)
6.再次进行 DOS 测试(使用 qemu 4,最新组件)如果出现问题,则只能怪 BIOS 或 DOS、ASPI
如果将 6 拆分成 - 磁带访问是否有效(例如https://winworldpc.com/product/pc-tools/9x-> 中央点备份)之后,如果你的软件工作正常