带有和不带有设备参数的驱动器参数有什么区别?

带有和不带有设备参数的驱动器参数有什么区别?

我试图理解这两个驱动参数之间的区别:

  1. -drive file=drive.qcow2
  2. -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-pcivs 的情况相同。-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

相关内容