我试图理解这两个驱动参数之间的区别:
-drive file=drive.qcow2
-device virtio-blk-device,drive=hd -drive file=drive.qcow2,if=none,id=hd
第一个模式 (Debian) 可以很好地使用 qemu-system-(i386、x86_64、aarch64、...),但不能使用 qemu-system-(arm、riscv64)。对于 arm 和 riscv64,我必须使用第二个参数模式。
我试图理解这里发生了什么(而不仅仅是让它工作)。第一个缺少什么,第二个可以弥补什么。
顺便说一句:这似乎与-nic user,model=virtio-net-pci
vs 的情况相同。-device virtio-net-device,netdev=net -netdev user,id=net
更新:添加启动日志差异...
附件是显示两个控制台启动日志之间的差异的图像。左侧是成功运行(参数模式 #2)。右侧是启动失败的(参数模式 #1)。看起来内核只是没有找到硬件设备。
答案1
使用 Qemu 监视器和info qtree
命令,我发现参数模式#1将设备放在 PCI 总线上:
dev: gpex-pcihost, id ""
...
bus: pcie.0
type PCIE
dev: virtio-blk-pci, id ""
...
参数模式 #2 将其放在 virtio-mmio 上
dev: virtio-mmio, id ""
...
bus: virtio-mmio-bus.31
type virtio-mmio-bus
dev: virtio-blk-device, id ""
drive = "hd"
...
有了这些新信息,我发现这个 Qemu-devel 邮件列表帖子这直接回答了我的问题:
您需要使用 virtio-blk-device 等设备手动指定内容,因为快捷方式都假定 virtio 是 PCI。因此在这种情况下:
-drive if=none,文件=root,id=foo
-device virtio-blk-device,驱动器=foo-- 产品经理
因此答案是:快捷参数(例如“-drive”而不带“-device”)假设 virtio 是 PCI